@axtec/components 0.1.5 → 0.1.7

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 (80) hide show
  1. package/README.md +6 -0
  2. package/dist/components/OptionDivider/OptionDivider.d.ts +5 -0
  3. package/dist/components/OptionDivider/index.d.ts +1 -0
  4. package/dist/components/SelectionCard/SelectionCard.d.ts +13 -0
  5. package/dist/components/SelectionCard/index.d.ts +1 -0
  6. package/dist/components/index.d.ts +2 -0
  7. package/dist/index.css +1 -1
  8. package/dist/index.js +106 -102
  9. package/dist/index.js.map +1 -1
  10. package/dist/index12.js +1 -1
  11. package/dist/index3.js +2 -2
  12. package/dist/index43.js +12 -14
  13. package/dist/index43.js.map +1 -1
  14. package/dist/index44.js +11 -87
  15. package/dist/index44.js.map +1 -1
  16. package/dist/index45.js +91 -69
  17. package/dist/index45.js.map +1 -1
  18. package/dist/index46.js +68 -121
  19. package/dist/index46.js.map +1 -1
  20. package/dist/index47.js +118 -36
  21. package/dist/index47.js.map +1 -1
  22. package/dist/index48.js +40 -44
  23. package/dist/index48.js.map +1 -1
  24. package/dist/index49.js +44 -56
  25. package/dist/index49.js.map +1 -1
  26. package/dist/index50.js +56 -16
  27. package/dist/index50.js.map +1 -1
  28. package/dist/index51.js +16 -65
  29. package/dist/index51.js.map +1 -1
  30. package/dist/index52.js +62 -51
  31. package/dist/index52.js.map +1 -1
  32. package/dist/index53.js +54 -37
  33. package/dist/index53.js.map +1 -1
  34. package/dist/index54.js +37 -66
  35. package/dist/index54.js.map +1 -1
  36. package/dist/index55.js +63 -19
  37. package/dist/index55.js.map +1 -1
  38. package/dist/index56.js +19 -101
  39. package/dist/index56.js.map +1 -1
  40. package/dist/index57.js +99 -213
  41. package/dist/index57.js.map +1 -1
  42. package/dist/index58.js +67 -62
  43. package/dist/index58.js.map +1 -1
  44. package/dist/index59.js +206 -224
  45. package/dist/index59.js.map +1 -1
  46. package/dist/index60.js +62 -96
  47. package/dist/index60.js.map +1 -1
  48. package/dist/index61.js +233 -33
  49. package/dist/index61.js.map +1 -1
  50. package/dist/index62.js +98 -14
  51. package/dist/index62.js.map +1 -1
  52. package/dist/index63.js +35 -59
  53. package/dist/index63.js.map +1 -1
  54. package/dist/index64.js +16 -59
  55. package/dist/index64.js.map +1 -1
  56. package/dist/index65.js +57 -72
  57. package/dist/index65.js.map +1 -1
  58. package/dist/index66.js +58 -106
  59. package/dist/index66.js.map +1 -1
  60. package/dist/index67.js +70 -43
  61. package/dist/index67.js.map +1 -1
  62. package/dist/index68.js +101 -40
  63. package/dist/index68.js.map +1 -1
  64. package/dist/index69.js +44 -72
  65. package/dist/index69.js.map +1 -1
  66. package/dist/index70.js +47 -53
  67. package/dist/index70.js.map +1 -1
  68. package/dist/index71.js +70 -62
  69. package/dist/index71.js.map +1 -1
  70. package/dist/index72.js +46 -28
  71. package/dist/index72.js.map +1 -1
  72. package/dist/index73.js +67 -13
  73. package/dist/index73.js.map +1 -1
  74. package/dist/index74.js +35 -2263
  75. package/dist/index74.js.map +1 -1
  76. package/dist/index75.js +17 -0
  77. package/dist/index75.js.map +1 -0
  78. package/dist/index76.js +2267 -0
  79. package/dist/index76.js.map +1 -0
  80. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index59.js","sources":["../src/components/StatisticsChart/StatisticsChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport {\n BarChart,\n Bar,\n LineChart,\n Line,\n ComposedChart,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n Cell,\n} from 'recharts'\nimport { cn } from '@/lib/utils'\n\nexport interface StatisticsChartDataPoint {\n label: string\n value: number\n secondaryValue?: number\n}\n\nexport interface StatisticsChartProps {\n data: StatisticsChartDataPoint[]\n type?: 'bar' | 'line' | 'composed'\n /** Chart height in pixels */\n height?: number\n /** Primary color for bars/lines */\n primaryColor?: string\n /** Primary color on hover (for interactive mode) */\n primaryColorHover?: string\n /** Secondary color for second data series */\n secondaryColor?: string\n /** Show grid lines */\n showGrid?: boolean\n /** Show legend */\n showLegend?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** Custom value formatter for tooltips and axis */\n valueFormatter?: (value: number) => string\n /** Chart title */\n title?: string\n /** Chart subtitle */\n subtitle?: string\n /** Header background color (creates a colored header block) */\n headerColor?: string\n /** Enable interactive hover mode (highlights bars, can trigger onHover) */\n interactive?: boolean\n /** Callback when hovering over a data point */\n onHover?: (index: number, dataPoint: StatisticsChartDataPoint | null) => void\n /** Minimal mode - no axes, compact display */\n minimal?: boolean\n /** Empty state message */\n emptyMessage?: string\n className?: string\n}\n\nconst defaultFormatter = (value: number) => {\n if (value >= 1000000) {\n return `$${(value / 1000000).toFixed(1)}M`\n } else if (value >= 1000) {\n return `$${(value / 1000).toFixed(0)}K`\n }\n return `$${value}`\n}\n\nexport const StatisticsChart = ({\n data,\n type = 'bar',\n height = 300,\n primaryColor = 'var(--color-primary-500, #1DA061)',\n primaryColorHover = 'var(--color-primary-700, #168a52)',\n secondaryColor = 'var(--color-primary-300, #6FCF97)',\n showGrid = true,\n showLegend = false,\n showXAxis = true,\n showYAxis = true,\n valueFormatter = defaultFormatter,\n title,\n subtitle,\n headerColor,\n interactive = false,\n onHover,\n minimal = false,\n emptyMessage = 'No data available',\n className,\n}: StatisticsChartProps) => {\n const [hoveredIndex, setHoveredIndex] = useState(-1)\n\n const chartData = data.map((item) => ({\n name: item.label,\n value: item.value,\n secondary: item.secondaryValue,\n }))\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleMouseMove = (e: any) => {\n if (interactive && e && typeof e.activeTooltipIndex === 'number') {\n if (e.activeTooltipIndex !== hoveredIndex) {\n setHoveredIndex(e.activeTooltipIndex)\n onHover?.(e.activeTooltipIndex, data[e.activeTooltipIndex] || null)\n }\n }\n }\n\n const handleMouseLeave = () => {\n if (interactive) {\n setHoveredIndex(-1)\n onHover?.(-1, null)\n }\n }\n\n const commonAxisProps = {\n tick: { fontSize: 11, fill: '#64748b' },\n axisLine: { stroke: '#e2e8f0' },\n tickLine: { stroke: '#e2e8f0' },\n }\n\n const minimalAxisProps = {\n hide: true,\n }\n\n // Empty state\n if (!data || data.length === 0) {\n return (\n <div className={cn('w-full', className)}>\n {(title || headerColor) && (\n <div\n className={cn(\n 'px-5 py-4 rounded-t-2xl',\n headerColor ? 'text-white' : 'bg-slate-100'\n )}\n style={headerColor ? { backgroundColor: headerColor } : undefined}\n >\n {title && <h3 className=\"text-lg font-bold\">{title}</h3>}\n {subtitle && (\n <p className={cn('text-xs', headerColor ? 'opacity-80' : 'text-slate-500')}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div\n className={cn(\n 'flex items-center justify-center bg-slate-50 rounded-xl',\n title || headerColor ? 'rounded-t-none' : ''\n )}\n style={{ height }}\n >\n <p className=\"text-slate-500 text-sm\">{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n const renderChart = () => {\n const margin = minimal\n ? { top: 5, right: 5, left: 5, bottom: 5 }\n : { top: 20, right: 20, left: 20, bottom: showXAxis ? 60 : 20 }\n\n if (type === 'bar') {\n return (\n <BarChart\n data={chartData}\n margin={margin}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value) => [valueFormatter(Number(value) || 0), 'Value']}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Bar dataKey=\"value\" radius={[4, 4, 0, 0]}>\n {chartData.map((_, index) => (\n <Cell\n key={`cell-${index}`}\n fill={interactive && hoveredIndex === index ? primaryColorHover : primaryColor}\n />\n ))}\n </Bar>\n </BarChart>\n )\n }\n\n if (type === 'line') {\n return (\n <LineChart data={chartData} margin={margin}>\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value) => [valueFormatter(Number(value) || 0), 'Value']}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={primaryColor}\n strokeWidth={2}\n dot={{ fill: primaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: primaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n {chartData.some((d) => d.secondary !== undefined) && (\n <Line\n type=\"monotone\"\n dataKey=\"secondary\"\n stroke={secondaryColor}\n strokeWidth={2}\n dot={{ fill: secondaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: secondaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n )}\n </LineChart>\n )\n }\n\n // Composed chart (bar + line)\n return (\n <ComposedChart data={chartData} margin={margin}>\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value, name) => [\n valueFormatter(Number(value)),\n name === 'value' ? 'Primary' : 'Secondary',\n ]}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Bar dataKey=\"value\" radius={[4, 4, 0, 0]}>\n {chartData.map((_, index) => (\n <Cell\n key={`cell-${index}`}\n fill={interactive && hoveredIndex === index ? primaryColorHover : primaryColor}\n />\n ))}\n </Bar>\n {chartData.some((d) => d.secondary !== undefined) && (\n <Line\n type=\"monotone\"\n dataKey=\"secondary\"\n stroke={secondaryColor}\n strokeWidth={2}\n dot={{ fill: secondaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: secondaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n )}\n </ComposedChart>\n )\n }\n\n // With colored header\n if (headerColor) {\n return (\n <div\n className={cn('rounded-2xl overflow-hidden border border-slate-200 shadow-sm', className)}\n >\n <div className=\"px-5 py-4\" style={{ backgroundColor: headerColor }}>\n {title && <h3 className=\"text-lg font-bold text-white\">{title}</h3>}\n {subtitle && <p className=\"text-xs text-white/80\">{subtitle}</p>}\n </div>\n <div className=\"bg-white p-5\">\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n </div>\n </div>\n )\n }\n\n // With title (no colored header)\n if (title) {\n return (\n <div className={cn('w-full', className)}>\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n {subtitle && <p className=\"text-sm text-slate-500\">{subtitle}</p>}\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n </div>\n )\n }\n\n // Basic chart only\n return (\n <div className={cn('w-full', className)} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n )\n}\n"],"names":["defaultFormatter","value","StatisticsChart","data","type","height","primaryColor","primaryColorHover","secondaryColor","showGrid","showLegend","showXAxis","showYAxis","valueFormatter","title","subtitle","headerColor","interactive","onHover","minimal","emptyMessage","className","hoveredIndex","setHoveredIndex","useState","chartData","item","handleMouseMove","e","handleMouseLeave","commonAxisProps","minimalAxisProps","cn","jsxs","jsx","renderChart","margin","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Bar","_","index","Cell","LineChart","Line","ComposedChart","name","ResponsiveContainer"],"mappings":";;;;AA6DA,MAAMA,IAAmB,CAACC,MACpBA,KAAS,MACJ,KAAKA,IAAQ,KAAS,QAAQ,CAAC,CAAC,MAC9BA,KAAS,MACX,KAAKA,IAAQ,KAAM,QAAQ,CAAC,CAAC,MAE/B,IAAIA,CAAK,IAGLC,IAAkB,CAAC;AAAA,EAC9B,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,cAAAC,IAAe;AAAA,EACf,mBAAAC,IAAoB;AAAA,EACpB,gBAAAC,IAAiB;AAAA,EACjB,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,gBAAAC,IAAiBb;AAAA,EACjB,OAAAc;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,SAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,cAAAC,IAAe;AAAA,EACf,WAAAC;AACF,MAA4B;AAC1B,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAE,GAE7CC,IAAYtB,EAAK,IAAI,CAACuB,OAAU;AAAA,IACpC,MAAMA,EAAK;AAAA,IACX,OAAOA,EAAK;AAAA,IACZ,WAAWA,EAAK;AAAA,EAAA,EAChB,GAGIC,IAAkB,CAACC,MAAW;AAClC,IAAIX,KAAeW,KAAK,OAAOA,EAAE,sBAAuB,YAClDA,EAAE,uBAAuBN,MAC3BC,EAAgBK,EAAE,kBAAkB,GACpCV,KAAA,QAAAA,EAAUU,EAAE,oBAAoBzB,EAAKyB,EAAE,kBAAkB,KAAK;AAAA,EAGpE,GAEMC,IAAmB,MAAM;AAC7B,IAAIZ,MACFM,EAAgB,EAAE,GAClBL,KAAA,QAAAA,EAAU,IAAI;AAAA,EAElB,GAEMY,IAAkB;AAAA,IACtB,MAAM,EAAE,UAAU,IAAI,MAAM,UAAA;AAAA,IAC5B,UAAU,EAAE,QAAQ,UAAA;AAAA,IACpB,UAAU,EAAE,QAAQ,UAAA;AAAA,EAAU,GAG1BC,IAAmB;AAAA,IACvB,MAAM;AAAA,EAAA;AAIR,MAAI,CAAC5B,KAAQA,EAAK,WAAW;AAC3B,6BACG,OAAA,EAAI,WAAW6B,EAAG,UAAUX,CAAS,GAClC,UAAA;AAAA,OAAAP,KAASE,MACT,gBAAAiB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD;AAAA,YACT;AAAA,YACAhB,IAAc,eAAe;AAAA,UAAA;AAAA,UAE/B,OAAOA,IAAc,EAAE,iBAAiBA,MAAgB;AAAA,UAEvD,UAAA;AAAA,YAAAF,KAAS,gBAAAoB,EAAC,MAAA,EAAG,WAAU,qBAAqB,UAAApB,GAAM;AAAA,YAClDC,KACC,gBAAAmB,EAAC,KAAA,EAAE,WAAWF,EAAG,WAAWhB,IAAc,eAAe,gBAAgB,GACtE,UAAAD,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAIN,gBAAAmB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWF;AAAA,YACT;AAAA,YACAlB,KAASE,IAAc,mBAAmB;AAAA,UAAA;AAAA,UAE5C,OAAO,EAAE,QAAAX,EAAA;AAAA,UAET,UAAA,gBAAA6B,EAAC,KAAA,EAAE,WAAU,0BAA0B,UAAAd,EAAA,CAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IACtD,GACF;AAIJ,QAAMe,IAAc,MAAM;AACxB,UAAMC,IAASjB,IACX,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,MACrC,EAAE,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,QAAQR,IAAY,KAAK,GAAA;AAE7D,WAAIP,MAAS,QAET,gBAAA6B;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,MAAMZ;AAAA,QACN,QAAAW;AAAA,QACA,aAAaT;AAAA,QACb,cAAcE;AAAA,QAEb,UAAA;AAAA,UAAApB,KAAY,CAACU,KAAW,gBAAAe,EAACI,KAAc,iBAAgB,OAAM,QAAO,WAAU;AAAA,UAC9E3B,KAAa,CAACQ,KACb,gBAAAe;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACP,GAAGT;AAAA,cACJ,OAAO;AAAA,cACP,YAAW;AAAA,cACX,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAGbX,KAAW,gBAAAe,EAACK,GAAA,EAAO,GAAGR,EAAA,CAAkB;AAAA,UACxCnB,KAAa,CAACO,KACb,gBAAAe,EAACM,KAAO,GAAGV,GAAiB,eAAejB,GAAgB;AAAA,UAE5DM,KAAW,gBAAAe,EAACM,GAAA,EAAO,GAAGT,EAAA,CAAkB;AAAA,UACxC,CAACZ,KACA,gBAAAe;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,WAAW,CAACxC,MAAU,CAACY,EAAe,OAAOZ,CAAK,KAAK,CAAC,GAAG,OAAO;AAAA,cAClE,cAAc;AAAA,gBACZ,iBAAiB;AAAA,gBACjB,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,UAAU;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA;AAAA,UAGHS,uBAAegC,GAAA,EAAO;AAAA,UACvB,gBAAAR,EAACS,GAAA,EAAI,SAAQ,SAAQ,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GACrC,UAAAlB,EAAU,IAAI,CAACmB,GAAGC,MACjB,gBAAAX;AAAA,YAACY;AAAA,YAAA;AAAA,cAEC,MAAM7B,KAAeK,MAAiBuB,IAAQtC,IAAoBD;AAAA,YAAA;AAAA,YAD7D,QAAQuC,CAAK;AAAA,UAAA,CAGrB,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAKFzC,MAAS,SAET,gBAAA6B,EAACc,GAAA,EAAU,MAAMtB,GAAW,QAAAW,GACzB,UAAA;AAAA,MAAA3B,KAAY,CAACU,KAAW,gBAAAe,EAACI,KAAc,iBAAgB,OAAM,QAAO,WAAU;AAAA,MAC9E3B,KAAa,CAACQ,KACb,gBAAAe;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACP,GAAGT;AAAA,UACJ,OAAO;AAAA,UACP,YAAW;AAAA,UACX,UAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAGbX,KAAW,gBAAAe,EAACK,GAAA,EAAO,GAAGR,EAAA,CAAkB;AAAA,MACxCnB,KAAa,CAACO,KACb,gBAAAe,EAACM,KAAO,GAAGV,GAAiB,eAAejB,GAAgB;AAAA,MAE5DM,KAAW,gBAAAe,EAACM,GAAA,EAAO,GAAGT,EAAA,CAAkB;AAAA,MACxC,CAACZ,KACA,gBAAAe;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,WAAW,CAACxC,MAAU,CAACY,EAAe,OAAOZ,CAAK,KAAK,CAAC,GAAG,OAAO;AAAA,UAClE,cAAc;AAAA,YACZ,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,UAAU;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,MAGHS,uBAAegC,GAAA,EAAO;AAAA,MACvB,gBAAAR;AAAA,QAACc;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,QAAQ1C;AAAA,UACR,aAAa;AAAA,UACb,KAAK,EAAE,MAAMA,GAAc,aAAa,GAAG,GAAG,EAAA;AAAA,UAC9C,WAAW,EAAE,GAAG,GAAG,QAAQA,GAAc,aAAa,GAAG,MAAM,OAAA;AAAA,QAAO;AAAA,MAAA;AAAA,MAEvEmB,EAAU,KAAK,CAAC,MAAM,EAAE,cAAc,MAAS,KAC9C,gBAAAS;AAAA,QAACc;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,QAAQxC;AAAA,UACR,aAAa;AAAA,UACb,KAAK,EAAE,MAAMA,GAAgB,aAAa,GAAG,GAAG,EAAA;AAAA,UAChD,WAAW,EAAE,GAAG,GAAG,QAAQA,GAAgB,aAAa,GAAG,MAAM,OAAA;AAAA,QAAO;AAAA,MAAA;AAAA,IAC1E,GAEJ,IAMF,gBAAAyB,EAACgB,GAAA,EAAc,MAAMxB,GAAW,QAAAW,GAC7B,UAAA;AAAA,MAAA3B,KAAY,CAACU,KAAW,gBAAAe,EAACI,KAAc,iBAAgB,OAAM,QAAO,WAAU;AAAA,MAC9E3B,KAAa,CAACQ,KACb,gBAAAe;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACP,GAAGT;AAAA,UACJ,OAAO;AAAA,UACP,YAAW;AAAA,UACX,UAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAGbX,KAAW,gBAAAe,EAACK,GAAA,EAAO,GAAGR,EAAA,CAAkB;AAAA,MACxCnB,KAAa,CAACO,KACb,gBAAAe,EAACM,KAAO,GAAGV,GAAiB,eAAejB,GAAgB;AAAA,MAE5DM,KAAW,gBAAAe,EAACM,GAAA,EAAO,GAAGT,EAAA,CAAkB;AAAA,MACxC,CAACZ,KACA,gBAAAe;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,WAAW,CAACxC,GAAOiD,MAAS;AAAA,YAC1BrC,EAAe,OAAOZ,CAAK,CAAC;AAAA,YAC5BiD,MAAS,UAAU,YAAY;AAAA,UAAA;AAAA,UAEjC,cAAc;AAAA,YACZ,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,UAAU;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,MAGHxC,uBAAegC,GAAA,EAAO;AAAA,MACvB,gBAAAR,EAACS,GAAA,EAAI,SAAQ,SAAQ,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GACrC,UAAAlB,EAAU,IAAI,CAACmB,GAAGC,MACjB,gBAAAX;AAAA,QAACY;AAAA,QAAA;AAAA,UAEC,MAAM7B,KAAeK,MAAiBuB,IAAQtC,IAAoBD;AAAA,QAAA;AAAA,QAD7D,QAAQuC,CAAK;AAAA,MAAA,CAGrB,GACH;AAAA,MACCpB,EAAU,KAAK,CAAC,MAAM,EAAE,cAAc,MAAS,KAC9C,gBAAAS;AAAA,QAACc;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,QAAQxC;AAAA,UACR,aAAa;AAAA,UACb,KAAK,EAAE,MAAMA,GAAgB,aAAa,GAAG,GAAG,EAAA;AAAA,UAChD,WAAW,EAAE,GAAG,GAAG,QAAQA,GAAgB,aAAa,GAAG,MAAM,OAAA;AAAA,QAAO;AAAA,MAAA;AAAA,IAC1E,GAEJ;AAAA,EAEJ;AAGA,SAAIQ,IAEA,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD,EAAG,iEAAiEX,CAAS;AAAA,MAExF,UAAA;AAAA,QAAA,gBAAAY,EAAC,SAAI,WAAU,aAAY,OAAO,EAAE,iBAAiBjB,KAClD,UAAA;AAAA,UAAAF,KAAS,gBAAAoB,EAAC,MAAA,EAAG,WAAU,gCAAgC,UAAApB,GAAM;AAAA,UAC7DC,KAAY,gBAAAmB,EAAC,KAAA,EAAE,WAAU,yBAAyB,UAAAnB,EAAA,CAAS;AAAA,QAAA,GAC9D;AAAA,0BACC,OAAA,EAAI,WAAU,gBACb,UAAA,gBAAAmB,EAAC,OAAA,EAAI,OAAO,EAAE,QAAA7B,EAAA,GACZ,UAAA,gBAAA6B,EAACiB,GAAA,EAAoB,OAAM,QAAO,QAAO,QACtC,UAAAhB,IAAY,CACf,GACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAMFrB,sBAEC,OAAA,EAAI,WAAWkB,EAAG,UAAUX,CAAS,GACpC,UAAA;AAAA,IAAA,gBAAAY,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,wCAAwC,UAAApB,GAAM;AAAA,MAC3DC,KAAY,gBAAAmB,EAAC,KAAA,EAAE,WAAU,0BAA0B,UAAAnB,EAAA,CAAS;AAAA,IAAA,GAC/D;AAAA,IACA,gBAAAmB,EAAC,OAAA,EAAI,OAAO,EAAE,QAAA7B,KACZ,UAAA,gBAAA6B,EAACiB,GAAA,EAAoB,OAAM,QAAO,QAAO,QACtC,UAAAhB,EAAA,GACH,EAAA,CACF;AAAA,EAAA,GACF,sBAMD,OAAA,EAAI,WAAWH,EAAG,UAAUX,CAAS,GAAG,OAAO,EAAE,QAAAhB,KAChD,UAAA,gBAAA6B,EAACiB,KAAoB,OAAM,QAAO,QAAO,QACtC,UAAAhB,KACH,GACF;AAEJ;"}
1
+ {"version":3,"file":"index59.js","sources":["../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n type ReactNode,\n type ComponentType,\n type SVGProps,\n type MouseEvent,\n} from 'react'\nimport { cn } from '@/lib/utils'\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n} from '@heroicons/react/24/outline'\n\n// ─── Context ────────────────────────────────────────────────────────────────\n\ninterface SidebarContextValue {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n toggle: () => void\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null)\n\nexport const useSidebar = () => {\n const ctx = useContext(SidebarContext)\n if (!ctx) throw new Error('useSidebar must be used within a <Sidebar>')\n return ctx\n}\n\n// ─── Sidebar (root) ─────────────────────────────────────────────────────────\n\nexport interface SidebarProps {\n children: ReactNode\n /** Start collapsed */\n defaultOpen?: boolean\n /** Controlled open state */\n open?: boolean\n /** Controlled callback */\n onOpenChange?: (open: boolean) => void\n /** Render inline (relative position) instead of fixed — useful for embedding in a layout container */\n inline?: boolean\n className?: string\n}\n\nexport const Sidebar = ({\n children,\n defaultOpen = true,\n open,\n onOpenChange,\n inline = false,\n className,\n}: SidebarProps) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = open !== undefined ? open : internalOpen\n\n const setIsOpen = (value: boolean) => {\n if (onOpenChange) onOpenChange(value)\n else setInternalOpen(value)\n }\n\n const toggle = () => setIsOpen(!isOpen)\n\n return (\n <SidebarContext.Provider value={{ isOpen, setIsOpen, toggle }}>\n <div\n className={cn(\n 'flex flex-col justify-between bg-slate-50 border-r border-slate-200 transition-all duration-300 ease-in-out',\n inline\n ? 'relative h-full'\n : 'hidden md:flex fixed top-0 left-0 z-10 h-screen',\n isOpen ? 'w-64' : 'w-16',\n className\n )}\n >\n <div className=\"flex flex-col h-full\">\n {children}\n </div>\n </div>\n </SidebarContext.Provider>\n )\n}\n\n// ─── SidebarHeader ──────────────────────────────────────────────────────────\n\nexport interface SidebarHeaderProps {\n children?: ReactNode\n /** Show the built-in collapse toggle button (default: true) */\n showToggle?: boolean\n className?: string\n}\n\nexport const SidebarHeader = ({\n children,\n showToggle = true,\n className,\n}: SidebarHeaderProps) => {\n const { isOpen, toggle } = useSidebar()\n\n return (\n <div\n className={cn(\n 'flex items-center border-b border-slate-200 h-16',\n isOpen ? 'px-4 justify-between' : 'px-2 justify-center',\n className\n )}\n >\n {isOpen && children}\n {showToggle && (\n <button\n onClick={toggle}\n className=\"p-2 rounded-lg hover:bg-slate-200 transition-colors cursor-pointer flex-shrink-0\"\n aria-label={isOpen ? 'Collapse sidebar' : 'Expand sidebar'}\n >\n {isOpen ? (\n <ChevronLeftIcon className=\"h-5 w-5 text-slate-500\" />\n ) : (\n <ChevronRightIcon className=\"h-5 w-5 text-slate-500\" />\n )}\n </button>\n )}\n </div>\n )\n}\n\n// ─── SidebarNav ─────────────────────────────────────────────────────────────\n\nexport interface SidebarNavProps {\n children: ReactNode\n className?: string\n}\n\nexport const SidebarNav = ({ children, className }: SidebarNavProps) => (\n <nav className={cn('flex-1 py-4', className)}>\n <ul className=\"flex flex-col space-y-1 px-2\">\n {children}\n </ul>\n </nav>\n)\n\n// ─── SidebarSection ─────────────────────────────────────────────────────────\n\nexport interface SidebarSectionProps {\n /** Section label (hidden when collapsed) */\n label?: string\n children: ReactNode\n className?: string\n}\n\nexport const SidebarSection = ({ label, children, className }: SidebarSectionProps) => {\n const { isOpen } = useSidebar()\n\n return (\n <div className={cn('mt-4 first:mt-0', className)}>\n {label && isOpen && (\n <div className=\"px-3 mb-2 text-xs font-semibold uppercase tracking-wider text-slate-400\">\n {label}\n </div>\n )}\n {!label && isOpen && <div className=\"border-t border-slate-200 mx-3 mb-2\" />}\n <ul className=\"flex flex-col space-y-1\">\n {children}\n </ul>\n </div>\n )\n}\n\n// ─── SidebarItem ────────────────────────────────────────────────────────────\n\ntype HeroIcon = ComponentType<SVGProps<SVGSVGElement> & { title?: string; titleId?: string }>\n\nexport interface SidebarItemProps {\n /** Menu item label */\n label: string\n /** Heroicon component */\n icon?: HeroIcon\n /** Whether this item is currently active */\n active?: boolean\n /** URL — renders as an anchor. Omit for button behavior. */\n href?: string\n /** Click handler */\n onClick?: (e: MouseEvent) => void\n /** Custom link renderer for framework integration (Next.js Link, React Router, etc.) */\n as?: ComponentType<{ href: string; className: string; title?: string; children: ReactNode }>\n /** Badge count shown to the right of the label */\n badge?: number | string\n className?: string\n}\n\nexport const SidebarItem = ({\n label,\n icon: Icon,\n active = false,\n href,\n onClick,\n as: LinkComponent,\n badge,\n className,\n}: SidebarItemProps) => {\n const { isOpen } = useSidebar()\n\n const itemClasses = cn(\n 'flex items-center rounded-lg transition-all duration-200 cursor-pointer group w-full',\n isOpen ? 'px-3 py-2.5' : 'px-2 py-2.5 justify-center',\n active\n ? 'bg-accent-tint text-accent-tint-dark'\n : 'text-slate-600 hover:bg-slate-200 hover:text-slate-900',\n className\n )\n\n const content = (\n <>\n {Icon && (\n <Icon\n className={cn(\n 'h-5 w-5 flex-shrink-0 transition-colors',\n active ? 'text-primary-500' : 'text-slate-500 group-hover:text-slate-700'\n )}\n />\n )}\n {isOpen && (\n <span\n className={cn(\n 'ml-3 text-sm font-medium truncate',\n active ? 'text-accent-tint-dark' : ''\n )}\n >\n {label}\n </span>\n )}\n {isOpen && badge !== undefined && (\n <span className=\"ml-auto text-xs font-semibold bg-accent-tint text-accent-tint-dark rounded-full px-2 py-0.5\">\n {badge}\n </span>\n )}\n </>\n )\n\n // Use custom link component (e.g. Next.js <Link>)\n if (href && LinkComponent) {\n return (\n <li>\n <LinkComponent href={href} className={itemClasses} title={!isOpen ? label : undefined}>\n {content}\n </LinkComponent>\n </li>\n )\n }\n\n // Plain anchor\n if (href) {\n return (\n <li>\n <a href={href} className={itemClasses} title={!isOpen ? label : undefined} onClick={onClick}>\n {content}\n </a>\n </li>\n )\n }\n\n // Button\n return (\n <li>\n <button\n onClick={onClick}\n className={itemClasses}\n title={!isOpen ? label : undefined}\n >\n {content}\n </button>\n </li>\n )\n}\n\n// ─── SidebarGroup (collapsible sub-menu) ────────────────────────────────────\n\nexport interface SidebarGroupProps {\n /** Group label */\n label: string\n /** Heroicon component */\n icon?: HeroIcon\n /** Whether any child item is active (highlights the group) */\n active?: boolean\n /** Start expanded */\n defaultOpen?: boolean\n children: ReactNode\n className?: string\n}\n\nexport const SidebarGroup = ({\n label,\n icon: Icon,\n active = false,\n defaultOpen = false,\n children,\n className,\n}: SidebarGroupProps) => {\n const { isOpen: sidebarOpen } = useSidebar()\n const [expanded, setExpanded] = useState(defaultOpen)\n\n return (\n <li className={className}>\n <button\n onClick={() => setExpanded(!expanded)}\n className={cn(\n 'flex items-center rounded-lg transition-all duration-200 cursor-pointer group w-full',\n sidebarOpen ? 'px-3 py-2.5' : 'px-2 py-2.5 justify-center',\n active\n ? 'text-accent-tint-dark'\n : 'text-slate-600 hover:bg-slate-200 hover:text-slate-900'\n )}\n title={!sidebarOpen ? label : undefined}\n >\n {Icon && (\n <Icon\n className={cn(\n 'h-5 w-5 flex-shrink-0 transition-colors',\n active ? 'text-primary-500' : 'text-slate-500 group-hover:text-slate-700'\n )}\n />\n )}\n {sidebarOpen && (\n <>\n <span className=\"ml-3 text-sm font-medium truncate\">{label}</span>\n <ChevronRightIcon\n className={cn(\n 'ml-auto h-4 w-4 text-slate-400 transition-transform duration-200',\n expanded && 'rotate-90'\n )}\n />\n </>\n )}\n </button>\n {sidebarOpen && expanded && (\n <ul className=\"mt-1 ml-4 pl-3 border-l border-slate-200 space-y-1\">\n {children}\n </ul>\n )}\n </li>\n )\n}\n\n// ─── SidebarFooter ──────────────────────────────────────────────────────────\n\nexport interface SidebarFooterProps {\n children: ReactNode\n className?: string\n}\n\nexport const SidebarFooter = ({ children, className }: SidebarFooterProps) => (\n <div className={cn('p-3', className)}>\n {children}\n </div>\n)\n\n// ─── SidebarCard ────────────────────────────────────────────────────────────\n\nexport interface SidebarCardProps {\n /** Icon shown in both states */\n icon?: HeroIcon\n /** Title for the card */\n title: string\n /** Description text */\n description?: string\n /** Optional button label */\n buttonLabel?: string\n /** Optional button click handler */\n onAction?: () => void\n /** Custom content (replaces the button when sidebar is open) */\n children?: ReactNode\n className?: string\n}\n\nexport const SidebarCard = ({\n icon: Icon,\n title,\n description,\n buttonLabel,\n onAction,\n children,\n className,\n}: SidebarCardProps) => {\n const { isOpen } = useSidebar()\n\n if (!isOpen) {\n // Collapsed: show icon button if there's an action, otherwise just the icon\n if (onAction) {\n return (\n <button\n onClick={onAction}\n className={cn(\n 'w-full p-2 rounded-lg bg-primary-500 text-white hover:bg-primary-600 transition-colors cursor-pointer flex items-center justify-center',\n className\n )}\n title={title}\n >\n {Icon ? <Icon className=\"h-5 w-5\" /> : <span className=\"text-xs font-bold\">{title.charAt(0)}</span>}\n </button>\n )\n }\n return (\n <div\n className={cn(\n 'w-full p-2 rounded-lg bg-primary-500 text-white flex items-center justify-center',\n className\n )}\n title={title}\n >\n {Icon ? <Icon className=\"h-5 w-5\" /> : <span className=\"text-xs font-bold\">{title.charAt(0)}</span>}\n </div>\n )\n }\n\n const hasBody = children || (buttonLabel && onAction)\n\n return (\n <div className={cn('p-4 rounded-xl bg-gradient-to-br from-primary-500 to-primary-500/80 text-white', className)}>\n <div className={cn('flex items-center gap-2', (description || hasBody) && 'mb-2')}>\n {Icon && <Icon className=\"h-5 w-5\" />}\n <span className=\"font-semibold text-sm\">{title}</span>\n </div>\n {description && (\n <p className={cn('text-xs text-white/90', hasBody && 'mb-3')}>{description}</p>\n )}\n {children ? (\n children\n ) : buttonLabel && onAction ? (\n <button\n onClick={onAction}\n className=\"w-full bg-white text-primary-600 px-3 py-2 rounded-lg font-semibold text-sm hover:bg-white/90 transition-colors cursor-pointer\"\n >\n {buttonLabel}\n </button>\n ) : null}\n </div>\n )\n}\n"],"names":["SidebarContext","createContext","useSidebar","ctx","useContext","Sidebar","children","defaultOpen","open","onOpenChange","inline","className","internalOpen","setInternalOpen","useState","isOpen","setIsOpen","value","toggle","jsx","cn","SidebarHeader","showToggle","jsxs","ChevronLeftIcon","ChevronRightIcon","SidebarNav","SidebarSection","label","SidebarItem","Icon","active","href","onClick","LinkComponent","badge","itemClasses","content","Fragment","SidebarGroup","sidebarOpen","expanded","setExpanded","SidebarFooter","SidebarCard","title","description","buttonLabel","onAction","hasBody"],"mappings":"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"}
package/dist/index60.js CHANGED
@@ -1,105 +1,71 @@
1
- import { jsx as g, jsxs as s } from "react/jsx-runtime";
2
- import { cn as t } from "./index3.js";
3
- const i = {
4
- // Heat levels (lead scoring)
5
- hot: {
6
- color: "bg-red-500",
7
- text: "text-red-600",
8
- label: "Hot"
9
- },
10
- warm: {
11
- color: "bg-orange-500",
12
- text: "text-orange-600",
13
- label: "Warm"
14
- },
15
- neutral: {
16
- color: "bg-emerald-500",
17
- text: "text-emerald-600",
18
- label: "Neutral"
19
- },
20
- cold: {
21
- color: "bg-sky-500",
22
- text: "text-sky-600",
23
- label: "Cold"
24
- },
25
- // Confidence levels
26
- high: {
27
- color: "bg-green-500",
28
- text: "text-green-600",
29
- label: "High"
30
- },
31
- medium: {
32
- color: "bg-amber-500",
33
- text: "text-amber-600",
34
- label: "Medium"
35
- },
36
- low: {
37
- color: "bg-red-500",
38
- text: "text-red-600",
39
- label: "Low"
40
- }
41
- }, m = {
42
- sm: {
43
- dot: "w-1.5 h-1.5",
44
- text: "text-xs",
45
- gap: "gap-1.5"
46
- },
47
- md: {
48
- dot: "w-2 h-2",
49
- text: "text-sm",
50
- gap: "gap-2"
51
- }
52
- }, f = ({
53
- level: r,
54
- label: o,
55
- variant: a = "default",
56
- size: d = "sm",
57
- className: l
58
- }) => {
59
- const e = i[r], n = m[d];
60
- return a === "dot" ? /* @__PURE__ */ g(
1
+ import { jsx as t, jsxs as a } from "react/jsx-runtime";
2
+ import { cn as u } from "./index3.js";
3
+ function c({
4
+ variant: e = "text",
5
+ width: r,
6
+ height: l,
7
+ className: n
8
+ }) {
9
+ const o = {
10
+ width: typeof r == "number" ? `${r}px` : r,
11
+ height: typeof l == "number" ? `${l}px` : l
12
+ };
13
+ return /* @__PURE__ */ t(
61
14
  "div",
62
15
  {
63
- className: t("rounded-full", n.dot, e.color, l),
64
- title: o || e.label
16
+ className: u(
17
+ "animate-pulse bg-slate-200",
18
+ e === "text" && "h-4 rounded",
19
+ e === "circular" && "rounded-full",
20
+ e === "rectangular" && "rounded-lg",
21
+ !r && e === "text" && "w-full",
22
+ !r && e === "circular" && "w-10",
23
+ !l && e === "circular" && "h-10",
24
+ !r && e === "rectangular" && "w-full",
25
+ !l && e === "rectangular" && "h-20",
26
+ n
27
+ ),
28
+ style: o
65
29
  }
66
- ) : /* @__PURE__ */ s("div", { className: t("flex items-center", n.gap, l), children: [
67
- /* @__PURE__ */ g("div", { className: t("rounded-full", n.dot, e.color) }),
68
- /* @__PURE__ */ g("span", { className: t("font-medium", n.text, e.text), children: o || e.label })
69
- ] });
70
- }, x = {
71
- hot: "bg-red-100 text-red-700 ring-1 ring-red-600/20",
72
- warm: "bg-orange-100 text-orange-700 ring-1 ring-orange-600/20",
73
- neutral: "bg-emerald-100 text-emerald-700 ring-1 ring-emerald-600/20",
74
- cold: "bg-sky-100 text-sky-700 ring-1 ring-sky-600/20",
75
- high: "bg-green-100 text-green-700 ring-1 ring-green-600/20",
76
- medium: "bg-amber-100 text-amber-700 ring-1 ring-amber-600/20",
77
- low: "bg-red-100 text-red-700 ring-1 ring-red-600/20"
78
- }, c = {
79
- sm: "px-2 py-0.5 text-xs",
80
- md: "px-2.5 py-1 text-sm"
81
- }, p = ({
82
- level: r,
83
- label: o,
84
- size: a = "sm",
85
- className: d
86
- }) => {
87
- const l = i[r];
88
- return /* @__PURE__ */ g(
89
- "span",
30
+ );
31
+ }
32
+ function d({ lines: e = 3, className: r }) {
33
+ return /* @__PURE__ */ t("div", { className: u("space-y-2", r), children: Array.from({ length: e }).map((l, n) => /* @__PURE__ */ t(
34
+ c,
90
35
  {
91
- className: t(
92
- "inline-flex items-center font-medium rounded-full",
93
- x[r],
94
- c[a],
95
- d
96
- ),
97
- children: o || l.label
36
+ variant: "text",
37
+ width: n === e - 1 ? "60%" : "100%"
38
+ },
39
+ n
40
+ )) });
41
+ }
42
+ function s({ size: e = 40, className: r }) {
43
+ return /* @__PURE__ */ t(
44
+ c,
45
+ {
46
+ variant: "circular",
47
+ width: e,
48
+ height: e,
49
+ className: r
98
50
  }
99
51
  );
100
- };
52
+ }
53
+ function f({ className: e }) {
54
+ return /* @__PURE__ */ a("div", { className: u("p-4 border border-slate-200 rounded-xl", e), children: [
55
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-3 mb-4", children: [
56
+ /* @__PURE__ */ t(s, {}),
57
+ /* @__PURE__ */ a("div", { className: "flex-1 space-y-2", children: [
58
+ /* @__PURE__ */ t(c, { variant: "text", width: "40%" }),
59
+ /* @__PURE__ */ t(c, { variant: "text", width: "20%" })
60
+ ] })
61
+ ] }),
62
+ /* @__PURE__ */ t(d, { lines: 3 })
63
+ ] });
64
+ }
101
65
  export {
102
- p as StatusBadge,
103
- f as StatusIndicator
66
+ c as Skeleton,
67
+ s as SkeletonAvatar,
68
+ f as SkeletonCard,
69
+ d as SkeletonText
104
70
  };
105
71
  //# sourceMappingURL=index60.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index60.js","sources":["../src/components/StatusIndicator/StatusIndicator.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\n\nexport type StatusLevel = 'hot' | 'warm' | 'neutral' | 'cold' | 'high' | 'medium' | 'low'\n\nexport interface StatusIndicatorProps {\n /** The status level */\n level: StatusLevel\n /** Optional custom label (defaults based on level) */\n label?: string\n /** Show as dot + text (default) or just dot */\n variant?: 'default' | 'dot'\n /** Size of the indicator */\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst levelConfig: Record<StatusLevel, { color: string; text: string; label: string }> = {\n // Heat levels (lead scoring)\n hot: {\n color: 'bg-red-500',\n text: 'text-red-600',\n label: 'Hot',\n },\n warm: {\n color: 'bg-orange-500',\n text: 'text-orange-600',\n label: 'Warm',\n },\n neutral: {\n color: 'bg-emerald-500',\n text: 'text-emerald-600',\n label: 'Neutral',\n },\n cold: {\n color: 'bg-sky-500',\n text: 'text-sky-600',\n label: 'Cold',\n },\n // Confidence levels\n high: {\n color: 'bg-green-500',\n text: 'text-green-600',\n label: 'High',\n },\n medium: {\n color: 'bg-amber-500',\n text: 'text-amber-600',\n label: 'Medium',\n },\n low: {\n color: 'bg-red-500',\n text: 'text-red-600',\n label: 'Low',\n },\n}\n\nconst sizeStyles = {\n sm: {\n dot: 'w-1.5 h-1.5',\n text: 'text-xs',\n gap: 'gap-1.5',\n },\n md: {\n dot: 'w-2 h-2',\n text: 'text-sm',\n gap: 'gap-2',\n },\n}\n\nexport const StatusIndicator = ({\n level,\n label,\n variant = 'default',\n size = 'sm',\n className,\n}: StatusIndicatorProps) => {\n const config = levelConfig[level]\n const sizes = sizeStyles[size]\n\n if (variant === 'dot') {\n return (\n <div\n className={cn('rounded-full', sizes.dot, config.color, className)}\n title={label || config.label}\n />\n )\n }\n\n return (\n <div className={cn('flex items-center', sizes.gap, className)}>\n <div className={cn('rounded-full', sizes.dot, config.color)} />\n <span className={cn('font-medium', sizes.text, config.text)}>\n {label || config.label}\n </span>\n </div>\n )\n}\n\n/** Badge variant for use in tables/lists */\nexport interface StatusBadgeProps {\n level: StatusLevel\n label?: string\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst badgeConfig: Record<StatusLevel, string> = {\n hot: 'bg-red-100 text-red-700 ring-1 ring-red-600/20',\n warm: 'bg-orange-100 text-orange-700 ring-1 ring-orange-600/20',\n neutral: 'bg-emerald-100 text-emerald-700 ring-1 ring-emerald-600/20',\n cold: 'bg-sky-100 text-sky-700 ring-1 ring-sky-600/20',\n high: 'bg-green-100 text-green-700 ring-1 ring-green-600/20',\n medium: 'bg-amber-100 text-amber-700 ring-1 ring-amber-600/20',\n low: 'bg-red-100 text-red-700 ring-1 ring-red-600/20',\n}\n\nconst badgeSizeStyles = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n}\n\nexport const StatusBadge = ({\n level,\n label,\n size = 'sm',\n className,\n}: StatusBadgeProps) => {\n const config = levelConfig[level]\n\n return (\n <span\n className={cn(\n 'inline-flex items-center font-medium rounded-full',\n badgeConfig[level],\n badgeSizeStyles[size],\n className\n )}\n >\n {label || config.label}\n </span>\n )\n}\n"],"names":["levelConfig","sizeStyles","StatusIndicator","level","label","variant","size","className","config","sizes","jsx","cn","jsxs","badgeConfig","badgeSizeStyles","StatusBadge"],"mappings":";;AAgBA,MAAMA,IAAmF;AAAA;AAAA,EAEvF,KAAK;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA;AAAA,EAGT,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,KAAK;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAEMC,IAAa;AAAA,EACjB,IAAI;AAAA,IACF,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAET,GAEaC,IAAkB,CAAC;AAAA,EAC9B,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,WAAAC;AACF,MAA4B;AAC1B,QAAMC,IAASR,EAAYG,CAAK,GAC1BM,IAAQR,EAAWK,CAAI;AAE7B,SAAID,MAAY,QAEZ,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,gBAAgBF,EAAM,KAAKD,EAAO,OAAOD,CAAS;AAAA,MAChE,OAAOH,KAASI,EAAO;AAAA,IAAA;AAAA,EAAA,IAM3B,gBAAAI,EAAC,SAAI,WAAWD,EAAG,qBAAqBF,EAAM,KAAKF,CAAS,GAC1D,UAAA;AAAA,IAAA,gBAAAG,EAAC,OAAA,EAAI,WAAWC,EAAG,gBAAgBF,EAAM,KAAKD,EAAO,KAAK,GAAG;AAAA,IAC7D,gBAAAE,EAAC,QAAA,EAAK,WAAWC,EAAG,eAAeF,EAAM,MAAMD,EAAO,IAAI,GACvD,UAAAJ,KAASI,EAAO,MAAA,CACnB;AAAA,EAAA,GACF;AAEJ,GAUMK,IAA2C;AAAA,EAC/C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AACP,GAEMC,IAAkB;AAAA,EACtB,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAc,CAAC;AAAA,EAC1B,OAAAZ;AAAA,EACA,OAAAC;AAAA,EACA,MAAAE,IAAO;AAAA,EACP,WAAAC;AACF,MAAwB;AACtB,QAAMC,IAASR,EAAYG,CAAK;AAEhC,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAE,EAAYV,CAAK;AAAA,QACjBW,EAAgBR,CAAI;AAAA,QACpBC;AAAA,MAAA;AAAA,MAGD,eAASC,EAAO;AAAA,IAAA;AAAA,EAAA;AAGvB;"}
1
+ {"version":3,"file":"index60.js","sources":["../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\n\nexport interface SkeletonProps {\n variant?: 'text' | 'circular' | 'rectangular'\n width?: string | number\n height?: string | number\n className?: string\n}\n\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n className,\n}: SkeletonProps) {\n const style: React.CSSProperties = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n }\n\n return (\n <div\n className={cn(\n 'animate-pulse bg-slate-200',\n variant === 'text' && 'h-4 rounded',\n variant === 'circular' && 'rounded-full',\n variant === 'rectangular' && 'rounded-lg',\n !width && variant === 'text' && 'w-full',\n !width && variant === 'circular' && 'w-10',\n !height && variant === 'circular' && 'h-10',\n !width && variant === 'rectangular' && 'w-full',\n !height && variant === 'rectangular' && 'h-20',\n className\n )}\n style={style}\n />\n )\n}\n\n// Convenience components for common skeleton patterns\nexport function SkeletonText({ lines = 3, className }: { lines?: number; className?: string }) {\n return (\n <div className={cn('space-y-2', className)}>\n {Array.from({ length: lines }).map((_, i) => (\n <Skeleton\n key={i}\n variant=\"text\"\n width={i === lines - 1 ? '60%' : '100%'}\n />\n ))}\n </div>\n )\n}\n\nexport function SkeletonAvatar({ size = 40, className }: { size?: number; className?: string }) {\n return (\n <Skeleton\n variant=\"circular\"\n width={size}\n height={size}\n className={className}\n />\n )\n}\n\nexport function SkeletonCard({ className }: { className?: string }) {\n return (\n <div className={cn('p-4 border border-slate-200 rounded-xl', className)}>\n <div className=\"flex items-center gap-3 mb-4\">\n <SkeletonAvatar />\n <div className=\"flex-1 space-y-2\">\n <Skeleton variant=\"text\" width=\"40%\" />\n <Skeleton variant=\"text\" width=\"20%\" />\n </div>\n </div>\n <SkeletonText lines={3} />\n </div>\n )\n}\n"],"names":["Skeleton","variant","width","height","className","style","jsx","cn","SkeletonText","lines","_","i","SkeletonAvatar","size","SkeletonCard","jsxs"],"mappings":";;AASO,SAASA,EAAS;AAAA,EACvB,SAAAC,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AACF,GAAkB;AAChB,QAAMC,IAA6B;AAAA,IACjC,OAAO,OAAOH,KAAU,WAAW,GAAGA,CAAK,OAAOA;AAAA,IAClD,QAAQ,OAAOC,KAAW,WAAW,GAAGA,CAAM,OAAOA;AAAA,EAAA;AAGvD,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAN,MAAY,UAAU;AAAA,QACtBA,MAAY,cAAc;AAAA,QAC1BA,MAAY,iBAAiB;AAAA,QAC7B,CAACC,KAASD,MAAY,UAAU;AAAA,QAChC,CAACC,KAASD,MAAY,cAAc;AAAA,QACpC,CAACE,KAAUF,MAAY,cAAc;AAAA,QACrC,CAACC,KAASD,MAAY,iBAAiB;AAAA,QACvC,CAACE,KAAUF,MAAY,iBAAiB;AAAA,QACxCG;AAAA,MAAA;AAAA,MAEF,OAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAGO,SAASG,EAAa,EAAE,OAAAC,IAAQ,GAAG,WAAAL,KAAqD;AAC7F,2BACG,OAAA,EAAI,WAAWG,EAAG,aAAaH,CAAS,GACtC,UAAA,MAAM,KAAK,EAAE,QAAQK,EAAA,CAAO,EAAE,IAAI,CAACC,GAAGC,MACrC,gBAAAL;AAAA,IAACN;AAAA,IAAA;AAAA,MAEC,SAAQ;AAAA,MACR,OAAOW,MAAMF,IAAQ,IAAI,QAAQ;AAAA,IAAA;AAAA,IAF5BE;AAAA,EAAA,CAIR,GACH;AAEJ;AAEO,SAASC,EAAe,EAAE,MAAAC,IAAO,IAAI,WAAAT,KAAoD;AAC9F,SACE,gBAAAE;AAAA,IAACN;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAOa;AAAA,MACP,QAAQA;AAAA,MACR,WAAAT;AAAA,IAAA;AAAA,EAAA;AAGN;AAEO,SAASU,EAAa,EAAE,WAAAV,KAAqC;AAClE,2BACG,OAAA,EAAI,WAAWG,EAAG,0CAA0CH,CAAS,GACpE,UAAA;AAAA,IAAA,gBAAAW,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,MAAA,gBAAAT,EAACM,GAAA,EAAe;AAAA,MAChB,gBAAAG,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,QAAA,gBAAAT,EAACN,GAAA,EAAS,SAAQ,QAAO,OAAM,OAAM;AAAA,QACrC,gBAAAM,EAACN,GAAA,EAAS,SAAQ,QAAO,OAAM,MAAA,CAAM;AAAA,MAAA,EAAA,CACvC;AAAA,IAAA,GACF;AAAA,IACA,gBAAAM,EAACE,GAAA,EAAa,OAAO,EAAA,CAAG;AAAA,EAAA,GAC1B;AAEJ;"}
package/dist/index61.js CHANGED
@@ -1,39 +1,239 @@
1
- import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
- import { cn as s } from "./index3.js";
3
- import { CheckIcon as p } from "@heroicons/react/24/outline";
4
- const l = ({
5
- text: a,
6
- isCompleted: t = !1,
7
- isDisabled: e = !1,
8
- height: n = 45,
9
- className: m
10
- }) => /* @__PURE__ */ c(
11
- "div",
12
- {
13
- className: s(
14
- "flex items-center justify-between px-4 rounded-md",
15
- !e && !t && "bg-primary-50",
16
- e && "bg-transparent",
17
- t && "bg-transparent",
18
- m
19
- ),
20
- style: { height: `${n}px` },
21
- children: [
22
- /* @__PURE__ */ r(
23
- "span",
24
- {
25
- className: s(
26
- "text-sm",
27
- e ? "text-slate-500" : "text-primary-500"
1
+ import { jsxs as s, jsx as e } from "react/jsx-runtime";
2
+ import { useState as q } from "react";
3
+ import { ResponsiveContainer as M, BarChart as E, CartesianGrid as w, XAxis as y, YAxis as b, Tooltip as T, Legend as L, Bar as F, Cell as P, LineChart as J, Line as z, ComposedChart as O } from "recharts";
4
+ import { cn as i } from "./index3.js";
5
+ const Q = (a) => a >= 1e6 ? `$${(a / 1e6).toFixed(1)}M` : a >= 1e3 ? `$${(a / 1e3).toFixed(0)}K` : `$${a}`, C = ({
6
+ data: a,
7
+ type: R = "bar",
8
+ height: g = 300,
9
+ primaryColor: v = "var(--color-primary-500, #1DA061)",
10
+ primaryColorHover: j = "var(--color-primary-700, #168a52)",
11
+ secondaryColor: f = "var(--color-primary-300, #6FCF97)",
12
+ showGrid: K = !0,
13
+ showLegend: W = !1,
14
+ showXAxis: N = !0,
15
+ showYAxis: D = !0,
16
+ valueFormatter: h = Q,
17
+ title: o,
18
+ subtitle: x,
19
+ headerColor: n,
20
+ interactive: m = !1,
21
+ onHover: p,
22
+ minimal: t = !1,
23
+ emptyMessage: V = "No data available",
24
+ className: S
25
+ }) => {
26
+ const [$, A] = q(-1), l = a.map((r) => ({
27
+ name: r.label,
28
+ value: r.value,
29
+ secondary: r.secondaryValue
30
+ })), B = (r) => {
31
+ m && r && typeof r.activeTooltipIndex == "number" && r.activeTooltipIndex !== $ && (A(r.activeTooltipIndex), p == null || p(r.activeTooltipIndex, a[r.activeTooltipIndex] || null));
32
+ }, _ = () => {
33
+ m && (A(-1), p == null || p(-1, null));
34
+ }, u = {
35
+ tick: { fontSize: 11, fill: "#64748b" },
36
+ axisLine: { stroke: "#e2e8f0" },
37
+ tickLine: { stroke: "#e2e8f0" }
38
+ }, k = {
39
+ hide: !0
40
+ };
41
+ if (!a || a.length === 0)
42
+ return /* @__PURE__ */ s("div", { className: i("w-full", S), children: [
43
+ (o || n) && /* @__PURE__ */ s(
44
+ "div",
45
+ {
46
+ className: i(
47
+ "px-5 py-4 rounded-t-2xl",
48
+ n ? "text-white" : "bg-slate-100"
49
+ ),
50
+ style: n ? { backgroundColor: n } : void 0,
51
+ children: [
52
+ o && /* @__PURE__ */ e("h3", { className: "text-lg font-bold", children: o }),
53
+ x && /* @__PURE__ */ e("p", { className: i("text-xs", n ? "opacity-80" : "text-slate-500"), children: x })
54
+ ]
55
+ }
56
+ ),
57
+ /* @__PURE__ */ e(
58
+ "div",
59
+ {
60
+ className: i(
61
+ "flex items-center justify-center bg-slate-50 rounded-xl",
62
+ o || n ? "rounded-t-none" : ""
63
+ ),
64
+ style: { height: g },
65
+ children: /* @__PURE__ */ e("p", { className: "text-slate-500 text-sm", children: V })
66
+ }
67
+ )
68
+ ] });
69
+ const I = () => {
70
+ const r = t ? { top: 5, right: 5, left: 5, bottom: 5 } : { top: 20, right: 20, left: 20, bottom: N ? 60 : 20 };
71
+ return R === "bar" ? /* @__PURE__ */ s(
72
+ E,
73
+ {
74
+ data: l,
75
+ margin: r,
76
+ onMouseMove: B,
77
+ onMouseLeave: _,
78
+ children: [
79
+ K && !t && /* @__PURE__ */ e(w, { strokeDasharray: "3 3", stroke: "#f1f5f9" }),
80
+ N && !t && /* @__PURE__ */ e(
81
+ y,
82
+ {
83
+ dataKey: "name",
84
+ ...u,
85
+ angle: -45,
86
+ textAnchor: "end",
87
+ interval: 0
88
+ }
28
89
  ),
29
- children: a
90
+ t && /* @__PURE__ */ e(y, { ...k }),
91
+ D && !t && /* @__PURE__ */ e(b, { ...u, tickFormatter: h }),
92
+ t && /* @__PURE__ */ e(b, { ...k }),
93
+ !t && /* @__PURE__ */ e(
94
+ T,
95
+ {
96
+ formatter: (d) => [h(Number(d) || 0), "Value"],
97
+ contentStyle: {
98
+ backgroundColor: "white",
99
+ border: "1px solid #e2e8f0",
100
+ borderRadius: "8px",
101
+ fontSize: "12px"
102
+ }
103
+ }
104
+ ),
105
+ W && /* @__PURE__ */ e(L, {}),
106
+ /* @__PURE__ */ e(F, { dataKey: "value", radius: [4, 4, 0, 0], children: l.map((d, c) => /* @__PURE__ */ e(
107
+ P,
108
+ {
109
+ fill: m && $ === c ? j : v
110
+ },
111
+ `cell-${c}`
112
+ )) })
113
+ ]
114
+ }
115
+ ) : R === "line" ? /* @__PURE__ */ s(J, { data: l, margin: r, children: [
116
+ K && !t && /* @__PURE__ */ e(w, { strokeDasharray: "3 3", stroke: "#f1f5f9" }),
117
+ N && !t && /* @__PURE__ */ e(
118
+ y,
119
+ {
120
+ dataKey: "name",
121
+ ...u,
122
+ angle: -45,
123
+ textAnchor: "end",
124
+ interval: 0
30
125
  }
31
126
  ),
32
- t && /* @__PURE__ */ r(p, { className: "w-5 h-5 text-slate-900" })
33
- ]
34
- }
35
- );
127
+ t && /* @__PURE__ */ e(y, { ...k }),
128
+ D && !t && /* @__PURE__ */ e(b, { ...u, tickFormatter: h }),
129
+ t && /* @__PURE__ */ e(b, { ...k }),
130
+ !t && /* @__PURE__ */ e(
131
+ T,
132
+ {
133
+ formatter: (d) => [h(Number(d) || 0), "Value"],
134
+ contentStyle: {
135
+ backgroundColor: "white",
136
+ border: "1px solid #e2e8f0",
137
+ borderRadius: "8px",
138
+ fontSize: "12px"
139
+ }
140
+ }
141
+ ),
142
+ W && /* @__PURE__ */ e(L, {}),
143
+ /* @__PURE__ */ e(
144
+ z,
145
+ {
146
+ type: "monotone",
147
+ dataKey: "value",
148
+ stroke: v,
149
+ strokeWidth: 2,
150
+ dot: { fill: v, strokeWidth: 2, r: 4 },
151
+ activeDot: { r: 6, stroke: v, strokeWidth: 2, fill: "#fff" }
152
+ }
153
+ ),
154
+ l.some((d) => d.secondary !== void 0) && /* @__PURE__ */ e(
155
+ z,
156
+ {
157
+ type: "monotone",
158
+ dataKey: "secondary",
159
+ stroke: f,
160
+ strokeWidth: 2,
161
+ dot: { fill: f, strokeWidth: 2, r: 4 },
162
+ activeDot: { r: 6, stroke: f, strokeWidth: 2, fill: "#fff" }
163
+ }
164
+ )
165
+ ] }) : /* @__PURE__ */ s(O, { data: l, margin: r, children: [
166
+ K && !t && /* @__PURE__ */ e(w, { strokeDasharray: "3 3", stroke: "#f1f5f9" }),
167
+ N && !t && /* @__PURE__ */ e(
168
+ y,
169
+ {
170
+ dataKey: "name",
171
+ ...u,
172
+ angle: -45,
173
+ textAnchor: "end",
174
+ interval: 0
175
+ }
176
+ ),
177
+ t && /* @__PURE__ */ e(y, { ...k }),
178
+ D && !t && /* @__PURE__ */ e(b, { ...u, tickFormatter: h }),
179
+ t && /* @__PURE__ */ e(b, { ...k }),
180
+ !t && /* @__PURE__ */ e(
181
+ T,
182
+ {
183
+ formatter: (d, c) => [
184
+ h(Number(d)),
185
+ c === "value" ? "Primary" : "Secondary"
186
+ ],
187
+ contentStyle: {
188
+ backgroundColor: "white",
189
+ border: "1px solid #e2e8f0",
190
+ borderRadius: "8px",
191
+ fontSize: "12px"
192
+ }
193
+ }
194
+ ),
195
+ W && /* @__PURE__ */ e(L, {}),
196
+ /* @__PURE__ */ e(F, { dataKey: "value", radius: [4, 4, 0, 0], children: l.map((d, c) => /* @__PURE__ */ e(
197
+ P,
198
+ {
199
+ fill: m && $ === c ? j : v
200
+ },
201
+ `cell-${c}`
202
+ )) }),
203
+ l.some((d) => d.secondary !== void 0) && /* @__PURE__ */ e(
204
+ z,
205
+ {
206
+ type: "monotone",
207
+ dataKey: "secondary",
208
+ stroke: f,
209
+ strokeWidth: 2,
210
+ dot: { fill: f, strokeWidth: 2, r: 4 },
211
+ activeDot: { r: 6, stroke: f, strokeWidth: 2, fill: "#fff" }
212
+ }
213
+ )
214
+ ] });
215
+ };
216
+ return n ? /* @__PURE__ */ s(
217
+ "div",
218
+ {
219
+ className: i("rounded-2xl overflow-hidden border border-slate-200 shadow-sm", S),
220
+ children: [
221
+ /* @__PURE__ */ s("div", { className: "px-5 py-4", style: { backgroundColor: n }, children: [
222
+ o && /* @__PURE__ */ e("h3", { className: "text-lg font-bold text-white", children: o }),
223
+ x && /* @__PURE__ */ e("p", { className: "text-xs text-white/80", children: x })
224
+ ] }),
225
+ /* @__PURE__ */ e("div", { className: "bg-white p-5", children: /* @__PURE__ */ e("div", { style: { height: g }, children: /* @__PURE__ */ e(M, { width: "100%", height: "100%", children: I() }) }) })
226
+ ]
227
+ }
228
+ ) : o ? /* @__PURE__ */ s("div", { className: i("w-full", S), children: [
229
+ /* @__PURE__ */ s("div", { className: "mb-4", children: [
230
+ /* @__PURE__ */ e("h3", { className: "text-lg font-semibold text-slate-900", children: o }),
231
+ x && /* @__PURE__ */ e("p", { className: "text-sm text-slate-500", children: x })
232
+ ] }),
233
+ /* @__PURE__ */ e("div", { style: { height: g }, children: /* @__PURE__ */ e(M, { width: "100%", height: "100%", children: I() }) })
234
+ ] }) : /* @__PURE__ */ e("div", { className: i("w-full", S), style: { height: g }, children: /* @__PURE__ */ e(M, { width: "100%", height: "100%", children: I() }) });
235
+ };
36
236
  export {
37
- l as StepList
237
+ C as StatisticsChart
38
238
  };
39
239
  //# sourceMappingURL=index61.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index61.js","sources":["../src/components/StepList/StepList.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { CheckIcon } from '@heroicons/react/24/outline'\n\nexport interface StepListProps {\n text: string\n isCompleted?: boolean\n isDisabled?: boolean\n height?: number\n className?: string\n}\n\nexport const StepList = ({\n text,\n isCompleted = false,\n isDisabled = false,\n height = 45,\n className,\n}: StepListProps) => {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 rounded-md',\n !isDisabled && !isCompleted && 'bg-primary-50',\n isDisabled && 'bg-transparent',\n isCompleted && 'bg-transparent',\n className\n )}\n style={{ height: `${height}px` }}\n >\n <span\n className={cn(\n 'text-sm',\n isDisabled ? 'text-slate-500' : 'text-primary-500'\n )}\n >\n {text}\n </span>\n {isCompleted && (\n <CheckIcon className=\"w-5 h-5 text-slate-900\" />\n )}\n </div>\n )\n}\n"],"names":["StepList","text","isCompleted","isDisabled","height","className","jsxs","cn","jsx","CheckIcon"],"mappings":";;;AAWO,MAAMA,IAAW,CAAC;AAAA,EACvB,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,QAAAC,IAAS;AAAA,EACT,WAAAC;AACF,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACA,CAACJ,KAAc,CAACD,KAAe;AAAA,MAC/BC,KAAc;AAAA,MACdD,KAAe;AAAA,MACfG;AAAA,IAAA;AAAA,IAEF,OAAO,EAAE,QAAQ,GAAGD,CAAM,KAAA;AAAA,IAE1B,UAAA;AAAA,MAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD;AAAA,YACT;AAAA,YACAJ,IAAa,mBAAmB;AAAA,UAAA;AAAA,UAGjC,UAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,MAEFC,KACC,gBAAAM,EAACC,GAAA,EAAU,WAAU,yBAAA,CAAyB;AAAA,IAAA;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"index61.js","sources":["../src/components/StatisticsChart/StatisticsChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport {\n BarChart,\n Bar,\n LineChart,\n Line,\n ComposedChart,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n Legend,\n Cell,\n} from 'recharts'\nimport { cn } from '@/lib/utils'\n\nexport interface StatisticsChartDataPoint {\n label: string\n value: number\n secondaryValue?: number\n}\n\nexport interface StatisticsChartProps {\n data: StatisticsChartDataPoint[]\n type?: 'bar' | 'line' | 'composed'\n /** Chart height in pixels */\n height?: number\n /** Primary color for bars/lines */\n primaryColor?: string\n /** Primary color on hover (for interactive mode) */\n primaryColorHover?: string\n /** Secondary color for second data series */\n secondaryColor?: string\n /** Show grid lines */\n showGrid?: boolean\n /** Show legend */\n showLegend?: boolean\n /** Show X axis */\n showXAxis?: boolean\n /** Show Y axis */\n showYAxis?: boolean\n /** Custom value formatter for tooltips and axis */\n valueFormatter?: (value: number) => string\n /** Chart title */\n title?: string\n /** Chart subtitle */\n subtitle?: string\n /** Header background color (creates a colored header block) */\n headerColor?: string\n /** Enable interactive hover mode (highlights bars, can trigger onHover) */\n interactive?: boolean\n /** Callback when hovering over a data point */\n onHover?: (index: number, dataPoint: StatisticsChartDataPoint | null) => void\n /** Minimal mode - no axes, compact display */\n minimal?: boolean\n /** Empty state message */\n emptyMessage?: string\n className?: string\n}\n\nconst defaultFormatter = (value: number) => {\n if (value >= 1000000) {\n return `$${(value / 1000000).toFixed(1)}M`\n } else if (value >= 1000) {\n return `$${(value / 1000).toFixed(0)}K`\n }\n return `$${value}`\n}\n\nexport const StatisticsChart = ({\n data,\n type = 'bar',\n height = 300,\n primaryColor = 'var(--color-primary-500, #1DA061)',\n primaryColorHover = 'var(--color-primary-700, #168a52)',\n secondaryColor = 'var(--color-primary-300, #6FCF97)',\n showGrid = true,\n showLegend = false,\n showXAxis = true,\n showYAxis = true,\n valueFormatter = defaultFormatter,\n title,\n subtitle,\n headerColor,\n interactive = false,\n onHover,\n minimal = false,\n emptyMessage = 'No data available',\n className,\n}: StatisticsChartProps) => {\n const [hoveredIndex, setHoveredIndex] = useState(-1)\n\n const chartData = data.map((item) => ({\n name: item.label,\n value: item.value,\n secondary: item.secondaryValue,\n }))\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleMouseMove = (e: any) => {\n if (interactive && e && typeof e.activeTooltipIndex === 'number') {\n if (e.activeTooltipIndex !== hoveredIndex) {\n setHoveredIndex(e.activeTooltipIndex)\n onHover?.(e.activeTooltipIndex, data[e.activeTooltipIndex] || null)\n }\n }\n }\n\n const handleMouseLeave = () => {\n if (interactive) {\n setHoveredIndex(-1)\n onHover?.(-1, null)\n }\n }\n\n const commonAxisProps = {\n tick: { fontSize: 11, fill: '#64748b' },\n axisLine: { stroke: '#e2e8f0' },\n tickLine: { stroke: '#e2e8f0' },\n }\n\n const minimalAxisProps = {\n hide: true,\n }\n\n // Empty state\n if (!data || data.length === 0) {\n return (\n <div className={cn('w-full', className)}>\n {(title || headerColor) && (\n <div\n className={cn(\n 'px-5 py-4 rounded-t-2xl',\n headerColor ? 'text-white' : 'bg-slate-100'\n )}\n style={headerColor ? { backgroundColor: headerColor } : undefined}\n >\n {title && <h3 className=\"text-lg font-bold\">{title}</h3>}\n {subtitle && (\n <p className={cn('text-xs', headerColor ? 'opacity-80' : 'text-slate-500')}>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <div\n className={cn(\n 'flex items-center justify-center bg-slate-50 rounded-xl',\n title || headerColor ? 'rounded-t-none' : ''\n )}\n style={{ height }}\n >\n <p className=\"text-slate-500 text-sm\">{emptyMessage}</p>\n </div>\n </div>\n )\n }\n\n const renderChart = () => {\n const margin = minimal\n ? { top: 5, right: 5, left: 5, bottom: 5 }\n : { top: 20, right: 20, left: 20, bottom: showXAxis ? 60 : 20 }\n\n if (type === 'bar') {\n return (\n <BarChart\n data={chartData}\n margin={margin}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value) => [valueFormatter(Number(value) || 0), 'Value']}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Bar dataKey=\"value\" radius={[4, 4, 0, 0]}>\n {chartData.map((_, index) => (\n <Cell\n key={`cell-${index}`}\n fill={interactive && hoveredIndex === index ? primaryColorHover : primaryColor}\n />\n ))}\n </Bar>\n </BarChart>\n )\n }\n\n if (type === 'line') {\n return (\n <LineChart data={chartData} margin={margin}>\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value) => [valueFormatter(Number(value) || 0), 'Value']}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={primaryColor}\n strokeWidth={2}\n dot={{ fill: primaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: primaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n {chartData.some((d) => d.secondary !== undefined) && (\n <Line\n type=\"monotone\"\n dataKey=\"secondary\"\n stroke={secondaryColor}\n strokeWidth={2}\n dot={{ fill: secondaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: secondaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n )}\n </LineChart>\n )\n }\n\n // Composed chart (bar + line)\n return (\n <ComposedChart data={chartData} margin={margin}>\n {showGrid && !minimal && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#f1f5f9\" />}\n {showXAxis && !minimal && (\n <XAxis\n dataKey=\"name\"\n {...commonAxisProps}\n angle={-45}\n textAnchor=\"end\"\n interval={0}\n />\n )}\n {minimal && <XAxis {...minimalAxisProps} />}\n {showYAxis && !minimal && (\n <YAxis {...commonAxisProps} tickFormatter={valueFormatter} />\n )}\n {minimal && <YAxis {...minimalAxisProps} />}\n {!minimal && (\n <Tooltip\n formatter={(value, name) => [\n valueFormatter(Number(value)),\n name === 'value' ? 'Primary' : 'Secondary',\n ]}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e2e8f0',\n borderRadius: '8px',\n fontSize: '12px',\n }}\n />\n )}\n {showLegend && <Legend />}\n <Bar dataKey=\"value\" radius={[4, 4, 0, 0]}>\n {chartData.map((_, index) => (\n <Cell\n key={`cell-${index}`}\n fill={interactive && hoveredIndex === index ? primaryColorHover : primaryColor}\n />\n ))}\n </Bar>\n {chartData.some((d) => d.secondary !== undefined) && (\n <Line\n type=\"monotone\"\n dataKey=\"secondary\"\n stroke={secondaryColor}\n strokeWidth={2}\n dot={{ fill: secondaryColor, strokeWidth: 2, r: 4 }}\n activeDot={{ r: 6, stroke: secondaryColor, strokeWidth: 2, fill: '#fff' }}\n />\n )}\n </ComposedChart>\n )\n }\n\n // With colored header\n if (headerColor) {\n return (\n <div\n className={cn('rounded-2xl overflow-hidden border border-slate-200 shadow-sm', className)}\n >\n <div className=\"px-5 py-4\" style={{ backgroundColor: headerColor }}>\n {title && <h3 className=\"text-lg font-bold text-white\">{title}</h3>}\n {subtitle && <p className=\"text-xs text-white/80\">{subtitle}</p>}\n </div>\n <div className=\"bg-white p-5\">\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n </div>\n </div>\n )\n }\n\n // With title (no colored header)\n if (title) {\n return (\n <div className={cn('w-full', className)}>\n <div className=\"mb-4\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n {subtitle && <p className=\"text-sm text-slate-500\">{subtitle}</p>}\n </div>\n <div style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n </div>\n )\n }\n\n // Basic chart only\n return (\n <div className={cn('w-full', className)} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n {renderChart()}\n </ResponsiveContainer>\n </div>\n )\n}\n"],"names":["defaultFormatter","value","StatisticsChart","data","type","height","primaryColor","primaryColorHover","secondaryColor","showGrid","showLegend","showXAxis","showYAxis","valueFormatter","title","subtitle","headerColor","interactive","onHover","minimal","emptyMessage","className","hoveredIndex","setHoveredIndex","useState","chartData","item","handleMouseMove","e","handleMouseLeave","commonAxisProps","minimalAxisProps","cn","jsxs","jsx","renderChart","margin","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Bar","_","index","Cell","LineChart","Line","ComposedChart","name","ResponsiveContainer"],"mappings":"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"}