@parto-system-design/ui 1.1.4 → 1.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.
- package/AGENTS.md +233 -0
- package/LICENSE +21 -0
- package/README.md +96 -43
- package/dist/chunk-2UD3LGVX.cjs +316 -0
- package/dist/chunk-2UD3LGVX.cjs.map +1 -0
- package/dist/chunk-34JUCX2G.cjs +43 -0
- package/dist/chunk-34JUCX2G.cjs.map +1 -0
- package/dist/chunk-3AIJKXBV.cjs +242 -0
- package/dist/chunk-3AIJKXBV.cjs.map +1 -0
- package/dist/chunk-4SVQNEVH.js +173 -0
- package/dist/chunk-4SVQNEVH.js.map +1 -0
- package/dist/chunk-53QY4PD3.js +908 -0
- package/dist/chunk-53QY4PD3.js.map +1 -0
- package/dist/chunk-5JJSRGJD.js +31 -0
- package/dist/chunk-5JJSRGJD.js.map +1 -0
- package/dist/chunk-5K6E4ZSW.cjs +77 -0
- package/dist/chunk-5K6E4ZSW.cjs.map +1 -0
- package/dist/chunk-5NY26ULO.js +89 -0
- package/dist/chunk-5NY26ULO.js.map +1 -0
- package/dist/chunk-7RVPG3LE.cjs +231 -0
- package/dist/chunk-7RVPG3LE.cjs.map +1 -0
- package/dist/chunk-7Y4V3R3Y.cjs +120 -0
- package/dist/chunk-7Y4V3R3Y.cjs.map +1 -0
- package/dist/chunk-AXAY64KL.js +39 -0
- package/dist/chunk-AXAY64KL.js.map +1 -0
- package/dist/chunk-AYEK3WOM.js +207 -0
- package/dist/chunk-AYEK3WOM.js.map +1 -0
- package/dist/chunk-BRMBLIQG.js +53 -0
- package/dist/chunk-BRMBLIQG.js.map +1 -0
- package/dist/chunk-CAJKSTXX.cjs +54 -0
- package/dist/chunk-CAJKSTXX.cjs.map +1 -0
- package/dist/chunk-CKFWMHQU.js +401 -0
- package/dist/chunk-CKFWMHQU.js.map +1 -0
- package/dist/chunk-CV3N3HVK.js +672 -0
- package/dist/chunk-CV3N3HVK.js.map +1 -0
- package/dist/chunk-D2EBLE2B.cjs +220 -0
- package/dist/chunk-D2EBLE2B.cjs.map +1 -0
- package/dist/chunk-D5XCQDFS.js +92 -0
- package/dist/chunk-D5XCQDFS.js.map +1 -0
- package/dist/chunk-GDHRYKVM.js +45 -0
- package/dist/chunk-GDHRYKVM.js.map +1 -0
- package/dist/chunk-GKRAZGDI.cjs +84 -0
- package/dist/chunk-GKRAZGDI.cjs.map +1 -0
- package/dist/chunk-HEYMLQOV.cjs +94 -0
- package/dist/chunk-HEYMLQOV.cjs.map +1 -0
- package/dist/chunk-HF6XU5NI.js +84 -0
- package/dist/chunk-HF6XU5NI.js.map +1 -0
- package/dist/chunk-HJPDZOMJ.cjs +87 -0
- package/dist/chunk-HJPDZOMJ.cjs.map +1 -0
- package/dist/chunk-HUCC3QH5.cjs +53 -0
- package/dist/chunk-HUCC3QH5.cjs.map +1 -0
- package/dist/chunk-HYZ6BQPS.cjs +425 -0
- package/dist/chunk-HYZ6BQPS.cjs.map +1 -0
- package/dist/chunk-IQHKJ4SS.js +213 -0
- package/dist/chunk-IQHKJ4SS.js.map +1 -0
- package/dist/chunk-ISCSZMYW.cjs +106 -0
- package/dist/chunk-ISCSZMYW.cjs.map +1 -0
- package/dist/chunk-IXFEFIDO.js +82 -0
- package/dist/chunk-IXFEFIDO.js.map +1 -0
- package/dist/chunk-JUBHQAA2.js +53 -0
- package/dist/chunk-JUBHQAA2.js.map +1 -0
- package/dist/chunk-KCWRCSI7.js +62 -0
- package/dist/chunk-KCWRCSI7.js.map +1 -0
- package/dist/chunk-L2L5CKC2.js +291 -0
- package/dist/chunk-L2L5CKC2.js.map +1 -0
- package/dist/chunk-LLJR7FV3.js +135 -0
- package/dist/chunk-LLJR7FV3.js.map +1 -0
- package/dist/chunk-LZMCMZZF.js +118 -0
- package/dist/chunk-LZMCMZZF.js.map +1 -0
- package/dist/chunk-M5CHZ5BA.js +124 -0
- package/dist/chunk-M5CHZ5BA.js.map +1 -0
- package/dist/chunk-MBCTRNTG.js +89 -0
- package/dist/chunk-MBCTRNTG.js.map +1 -0
- package/dist/chunk-MEK4RSGC.js +65 -0
- package/dist/chunk-MEK4RSGC.js.map +1 -0
- package/dist/chunk-MFTX2DDQ.js +27 -0
- package/dist/chunk-MFTX2DDQ.js.map +1 -0
- package/dist/chunk-MKYVQQBV.cjs +114 -0
- package/dist/chunk-MKYVQQBV.cjs.map +1 -0
- package/dist/chunk-MQGQVI3W.cjs +950 -0
- package/dist/chunk-MQGQVI3W.cjs.map +1 -0
- package/dist/chunk-NEFZJHE4.cjs +157 -0
- package/dist/chunk-NEFZJHE4.cjs.map +1 -0
- package/dist/chunk-NEML6RCV.js +405 -0
- package/dist/chunk-NEML6RCV.js.map +1 -0
- package/dist/chunk-NV4JOKWL.cjs +197 -0
- package/dist/chunk-NV4JOKWL.cjs.map +1 -0
- package/dist/chunk-O2JG7WY5.cjs +121 -0
- package/dist/chunk-O2JG7WY5.cjs.map +1 -0
- package/dist/chunk-OEVMKFFL.cjs +140 -0
- package/dist/chunk-OEVMKFFL.cjs.map +1 -0
- package/dist/chunk-ONO2FTV4.cjs +68 -0
- package/dist/chunk-ONO2FTV4.cjs.map +1 -0
- package/dist/chunk-OS6CMYAS.cjs +79 -0
- package/dist/chunk-OS6CMYAS.cjs.map +1 -0
- package/dist/chunk-P5XHPNJG.cjs +430 -0
- package/dist/chunk-P5XHPNJG.cjs.map +1 -0
- package/dist/chunk-QJ7UB2ZQ.js +98 -0
- package/dist/chunk-QJ7UB2ZQ.js.map +1 -0
- package/dist/chunk-RA5KZNG5.js +269 -0
- package/dist/chunk-RA5KZNG5.js.map +1 -0
- package/dist/chunk-RJ3HYZ7S.js +44 -0
- package/dist/chunk-RJ3HYZ7S.js.map +1 -0
- package/dist/chunk-RZNRIOLT.js +128 -0
- package/dist/chunk-RZNRIOLT.js.map +1 -0
- package/dist/chunk-S5IPJQZ3.cjs +161 -0
- package/dist/chunk-S5IPJQZ3.cjs.map +1 -0
- package/dist/chunk-SB5DSYR5.js +211 -0
- package/dist/chunk-SB5DSYR5.js.map +1 -0
- package/dist/chunk-SCGW2BH4.cjs +69 -0
- package/dist/chunk-SCGW2BH4.cjs.map +1 -0
- package/dist/chunk-SCX6AR53.cjs +108 -0
- package/dist/chunk-SCX6AR53.cjs.map +1 -0
- package/dist/chunk-SFXV2DUH.js +106 -0
- package/dist/chunk-SFXV2DUH.js.map +1 -0
- package/dist/chunk-SXEPGD4Z.cjs +152 -0
- package/dist/chunk-SXEPGD4Z.cjs.map +1 -0
- package/dist/chunk-SZMVOHT7.cjs +107 -0
- package/dist/chunk-SZMVOHT7.cjs.map +1 -0
- package/dist/chunk-U5FLLCGC.cjs +151 -0
- package/dist/chunk-U5FLLCGC.cjs.map +1 -0
- package/dist/chunk-VO3B75F6.cjs +111 -0
- package/dist/chunk-VO3B75F6.cjs.map +1 -0
- package/dist/chunk-YAJWTNOX.js +106 -0
- package/dist/chunk-YAJWTNOX.js.map +1 -0
- package/dist/chunk-YC5KLN6I.js +139 -0
- package/dist/chunk-YC5KLN6I.js.map +1 -0
- package/dist/chunk-YE477L2H.cjs +272 -0
- package/dist/chunk-YE477L2H.cjs.map +1 -0
- package/dist/chunk-Z2TY4A75.cjs +700 -0
- package/dist/chunk-Z2TY4A75.cjs.map +1 -0
- package/dist/chunk-Z56O7UEU.cjs +136 -0
- package/dist/chunk-Z56O7UEU.cjs.map +1 -0
- package/dist/chunk-ZZFNJR2E.js +71 -0
- package/dist/chunk-ZZFNJR2E.js.map +1 -0
- package/dist/components/charts/PartoAreaChart.cjs +15 -0
- package/dist/components/charts/PartoAreaChart.cjs.map +1 -0
- package/dist/components/charts/PartoAreaChart.d.cts +51 -0
- package/dist/components/charts/PartoAreaChart.d.ts +51 -0
- package/dist/components/charts/PartoAreaChart.js +6 -0
- package/dist/components/charts/PartoAreaChart.js.map +1 -0
- package/dist/components/charts/PartoBarChart.cjs +15 -0
- package/dist/components/charts/PartoBarChart.cjs.map +1 -0
- package/dist/components/charts/PartoBarChart.d.cts +55 -0
- package/dist/components/charts/PartoBarChart.d.ts +55 -0
- package/dist/components/charts/PartoBarChart.js +6 -0
- package/dist/components/charts/PartoBarChart.js.map +1 -0
- package/dist/components/charts/PartoLineChart.cjs +15 -0
- package/dist/components/charts/PartoLineChart.cjs.map +1 -0
- package/dist/components/charts/PartoLineChart.d.cts +49 -0
- package/dist/components/charts/PartoLineChart.d.ts +49 -0
- package/dist/components/charts/PartoLineChart.js +6 -0
- package/dist/components/charts/PartoLineChart.js.map +1 -0
- package/dist/components/charts/PartoPieChart.cjs +15 -0
- package/dist/components/charts/PartoPieChart.cjs.map +1 -0
- package/dist/components/charts/PartoPieChart.d.cts +44 -0
- package/dist/components/charts/PartoPieChart.d.ts +44 -0
- package/dist/components/charts/PartoPieChart.js +6 -0
- package/dist/components/charts/PartoPieChart.js.map +1 -0
- package/dist/components/ui/alert-rule-card.cjs +15 -0
- package/dist/components/ui/alert-rule-card.cjs.map +1 -0
- package/dist/components/ui/alert-rule-card.d.cts +38 -0
- package/dist/components/ui/alert-rule-card.d.ts +38 -0
- package/dist/components/ui/alert-rule-card.js +6 -0
- package/dist/components/ui/alert-rule-card.js.map +1 -0
- package/dist/components/ui/avatar.cjs +21 -0
- package/dist/components/ui/avatar.cjs.map +1 -0
- package/dist/components/ui/avatar.d.cts +18 -0
- package/dist/components/ui/avatar.d.ts +18 -0
- package/dist/components/ui/avatar.js +4 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.cjs +17 -0
- package/dist/components/ui/badge.cjs.map +1 -0
- package/dist/components/ui/badge.d.cts +16 -0
- package/dist/components/ui/badge.d.ts +16 -0
- package/dist/components/ui/badge.js +4 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.cjs +18 -0
- package/dist/components/ui/button.cjs.map +1 -0
- package/dist/components/ui/button.d.cts +37 -0
- package/dist/components/ui/button.d.ts +37 -0
- package/dist/components/ui/button.js +5 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.cjs +15 -0
- package/dist/components/ui/calendar.cjs.map +1 -0
- package/dist/components/ui/calendar.d.cts +17 -0
- package/dist/components/ui/calendar.d.ts +17 -0
- package/dist/components/ui/calendar.js +6 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.cjs +37 -0
- package/dist/components/ui/card.cjs.map +1 -0
- package/dist/components/ui/card.d.cts +18 -0
- package/dist/components/ui/card.d.ts +18 -0
- package/dist/components/ui/card.js +4 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/concept-card.cjs +18 -0
- package/dist/components/ui/concept-card.cjs.map +1 -0
- package/dist/components/ui/concept-card.d.cts +5 -0
- package/dist/components/ui/concept-card.d.ts +5 -0
- package/dist/components/ui/concept-card.js +9 -0
- package/dist/components/ui/concept-card.js.map +1 -0
- package/dist/components/ui/data-table.cjs +18 -0
- package/dist/components/ui/data-table.cjs.map +1 -0
- package/dist/components/ui/data-table.d.cts +181 -0
- package/dist/components/ui/data-table.d.ts +181 -0
- package/dist/components/ui/data-table.js +9 -0
- package/dist/components/ui/data-table.js.map +1 -0
- package/dist/components/ui/dialog.cjs +49 -0
- package/dist/components/ui/dialog.cjs.map +1 -0
- package/dist/components/ui/dialog.d.cts +22 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +4 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/filter-provider.cjs +20 -0
- package/dist/components/ui/filter-provider.cjs.map +1 -0
- package/dist/components/ui/filter-provider.d.cts +49 -0
- package/dist/components/ui/filter-provider.d.ts +49 -0
- package/dist/components/ui/filter-provider.js +3 -0
- package/dist/components/ui/filter-provider.js.map +1 -0
- package/dist/components/ui/input.cjs +22 -0
- package/dist/components/ui/input.cjs.map +1 -0
- package/dist/components/ui/input.d.cts +16 -0
- package/dist/components/ui/input.d.ts +16 -0
- package/dist/components/ui/input.js +5 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/iran-province-heat.cjs +13 -0
- package/dist/components/ui/iran-province-heat.cjs.map +1 -0
- package/dist/components/ui/iran-province-heat.d.cts +64 -0
- package/dist/components/ui/iran-province-heat.d.ts +64 -0
- package/dist/components/ui/iran-province-heat.js +4 -0
- package/dist/components/ui/iran-province-heat.js.map +1 -0
- package/dist/components/ui/page-card.cjs +16 -0
- package/dist/components/ui/page-card.cjs.map +1 -0
- package/dist/components/ui/page-card.d.cts +6 -0
- package/dist/components/ui/page-card.d.ts +6 -0
- package/dist/components/ui/page-card.js +7 -0
- package/dist/components/ui/page-card.js.map +1 -0
- package/dist/components/ui/popover.cjs +25 -0
- package/dist/components/ui/popover.cjs.map +1 -0
- package/dist/components/ui/popover.d.cts +9 -0
- package/dist/components/ui/popover.d.ts +9 -0
- package/dist/components/ui/popover.js +4 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/saved-query-card.cjs +15 -0
- package/dist/components/ui/saved-query-card.cjs.map +1 -0
- package/dist/components/ui/saved-query-card.d.cts +41 -0
- package/dist/components/ui/saved-query-card.d.ts +41 -0
- package/dist/components/ui/saved-query-card.js +6 -0
- package/dist/components/ui/saved-query-card.js.map +1 -0
- package/dist/components/ui/separator.cjs +13 -0
- package/dist/components/ui/separator.cjs.map +1 -0
- package/dist/components/ui/separator.d.cts +9 -0
- package/dist/components/ui/separator.d.ts +9 -0
- package/dist/components/ui/separator.js +4 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.cjs +45 -0
- package/dist/components/ui/sheet.cjs.map +1 -0
- package/dist/components/ui/sheet.d.cts +44 -0
- package/dist/components/ui/sheet.d.ts +44 -0
- package/dist/components/ui/sheet.js +4 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sparkline.cjs +13 -0
- package/dist/components/ui/sparkline.cjs.map +1 -0
- package/dist/components/ui/sparkline.d.cts +36 -0
- package/dist/components/ui/sparkline.d.ts +36 -0
- package/dist/components/ui/sparkline.js +4 -0
- package/dist/components/ui/sparkline.js.map +1 -0
- package/dist/components/ui/tooltip.cjs +25 -0
- package/dist/components/ui/tooltip.cjs.map +1 -0
- package/dist/components/ui/tooltip.d.cts +17 -0
- package/dist/components/ui/tooltip.d.ts +17 -0
- package/dist/components/ui/tooltip.js +4 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/concept-card-CcOBb2Nz.d.ts +83 -0
- package/dist/concept-card-RwPbqJ06.d.cts +83 -0
- package/dist/hooks/use-hotkey-registry.cjs +21 -0
- package/dist/hooks/use-hotkey-registry.cjs.map +1 -0
- package/dist/hooks/use-hotkey-registry.d.cts +65 -0
- package/dist/hooks/use-hotkey-registry.d.ts +65 -0
- package/dist/hooks/use-hotkey-registry.js +4 -0
- package/dist/hooks/use-hotkey-registry.js.map +1 -0
- package/dist/hooks/use-hotkeys.cjs +16 -0
- package/dist/hooks/use-hotkeys.cjs.map +1 -0
- package/dist/hooks/use-hotkeys.d.cts +66 -0
- package/dist/hooks/use-hotkeys.d.ts +66 -0
- package/dist/hooks/use-hotkeys.js +3 -0
- package/dist/hooks/use-hotkeys.js.map +1 -0
- package/dist/i18n-ArS3mqj0.d.ts +344 -0
- package/dist/i18n-CAd9wGOr.d.cts +344 -0
- package/dist/index.cjs +16630 -10326
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +910 -119
- package/dist/index.d.cts +3177 -844
- package/dist/index.d.ts +3177 -844
- package/dist/index.js +14211 -8649
- package/dist/index.js.map +1 -1
- package/dist/page-card-CO92oXkc.d.ts +100 -0
- package/dist/page-card-DOl50DqJ.d.cts +100 -0
- package/dist/utils-DlXWmDZ-.d.cts +35 -0
- package/dist/utils-DlXWmDZ-.d.ts +35 -0
- package/package.json +160 -4
- package/tailwind.config.ts +61 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/charts/PartoPieChart.tsx"],"names":["PartoPieChart"],"mappings":"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","file":"chunk-LZMCMZZF.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer, Sector } from 'recharts'\n\nimport { useChartTheme, CHART_FONT_FAMILY } from '@/hooks/use-chart-theme'\nimport { type SupportedLocale } from '@/lib/utils'\nimport { ChartContainer, ChartLoadingSkeleton, ChartTooltip } from './chart-utils'\n\nexport interface PartoPieChartProps {\n /** Data: [{ name: \"محصول A\", value: 40 }] */\n data: Array<{ name: string; value: number; [key: string]: any }>\n /** Inner radius — 0 for full pie, \"60%\" for donut */\n innerRadius?: number | string\n /** Outer radius */\n outerRadius?: number | string\n /** Angle between slices in degrees */\n paddingAngle?: number\n /** Corner radius of arc segments */\n cornerRadius?: number\n /** Show arc link labels (lines from slices to text) */\n showLabels?: boolean\n /** Skip labels for slices smaller than this angle */\n labelSkipAngle?: number\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n /**\n * Locale for digit formatting in tooltips. fa/ar render Persian/Arabic digits;\n * en uses Latin. Default: 'fa'.\n */\n locale?: SupportedLocale\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n}\n\n// Active shape with expanded radius for hover effect\nfunction renderActiveShape(props: any) {\n const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, fill, cornerRadius } = props\n\n return (\n <Sector\n cx={cx}\n cy={cy}\n innerRadius={innerRadius - 3}\n outerRadius={outerRadius + 5}\n startAngle={startAngle}\n endAngle={endAngle}\n fill={fill}\n cornerRadius={cornerRadius}\n forceCornerRadius\n />\n )\n}\n\n// Custom label renderer with arc link lines\nfunction renderArcLinkLabel(props: any, labelSkipAngle: number, textColor: string) {\n const { cx, cy, midAngle, outerRadius, name, percent } = props\n\n // Skip labels for small slices\n const angle = percent * 360\n if (angle < labelSkipAngle) return null\n\n const RADIAN = Math.PI / 180\n const sin = Math.sin(-RADIAN * midAngle)\n const cos = Math.cos(-RADIAN * midAngle)\n\n // Point on arc edge\n const arcX = cx + (outerRadius + 4) * cos\n const arcY = cy + (outerRadius + 4) * sin\n\n // Diagonal endpoint\n const diagLen = 10\n const diagX = arcX + diagLen * cos\n const diagY = arcY + diagLen * sin\n\n // Horizontal endpoint\n const straightLen = 14\n const endX = diagX + (cos >= 0 ? straightLen : -straightLen)\n const endY = diagY\n\n const textAnchor = cos >= 0 ? 'start' : 'end'\n const textX = endX + (cos >= 0 ? 4 : -4)\n\n return (\n <g>\n <path\n d={`M ${arcX},${arcY} L ${diagX},${diagY} L ${endX},${endY}`}\n fill=\"none\"\n stroke={textColor}\n strokeWidth={1}\n strokeOpacity={0.4}\n />\n <text\n x={textX}\n y={endY}\n textAnchor={textAnchor}\n dominantBaseline=\"central\"\n fill={textColor}\n fontFamily={CHART_FONT_FAMILY}\n fontSize={11}\n >\n {name}\n </text>\n </g>\n )\n}\n\nexport const PartoPieChart = React.forwardRef<HTMLDivElement, PartoPieChartProps>(function PartoPieChart(\n {\n data,\n innerRadius = '60%',\n outerRadius = '80%',\n paddingAngle = 1.2,\n cornerRadius = 4,\n showLabels = true,\n labelSkipAngle = 14,\n margin = { top: 20, right: 20, bottom: 20, left: 20 },\n tooltipFormatter,\n locale = 'fa',\n className,\n isLoading = false,\n ariaLabel,\n },\n ref\n) {\n const { chartColors, tooltipStyle, axisTickStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} shape=\"circle\" />\n }\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"pie-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart margin={margin}>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n paddingAngle={paddingAngle}\n cornerRadius={cornerRadius}\n activeShape={renderActiveShape as any}\n label={showLabels ? (props: any) => renderArcLinkLabel(props, labelSkipAngle, axisTickStyle.fill) : false}\n labelLine={false}\n animationDuration={800}\n animationEasing=\"ease-out\"\n >\n {data.map((_, i) => (\n <Cell key={i} fill={chartColors[i % chartColors.length]} stroke=\"none\" />\n ))}\n </Pie>\n\n <Tooltip\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} locale={locale} />}\n />\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoPieChart.displayName = 'PartoPieChart'\n"]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { cn } from './chunk-4SVQNEVH.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var cardVariants = cva(
|
|
7
|
+
// A Card is a visual container, not a focusable surface. Do not apply
|
|
8
|
+
// focus-within rings to the base — that bleeds the ring of whatever
|
|
9
|
+
// input/button inside has focus onto the whole card. The `interactive`
|
|
10
|
+
// variant below opts into focus-visible explicitly because it IS clickable.
|
|
11
|
+
"overflow-hidden rounded-lg text-card-foreground transition-all duration-200",
|
|
12
|
+
{
|
|
13
|
+
variants: {
|
|
14
|
+
variant: {
|
|
15
|
+
default: "border bg-surface-100 shadow-sm",
|
|
16
|
+
outlined: "border-2 border-border bg-transparent",
|
|
17
|
+
elevated: "bg-surface-100 shadow-card hover:shadow-lg",
|
|
18
|
+
interactive: "border bg-surface-100 shadow-sm hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0 active:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
19
|
+
glass: "border border-border/50 bg-background/80 backdrop-blur-sm shadow-sm"
|
|
20
|
+
},
|
|
21
|
+
size: {
|
|
22
|
+
sm: "",
|
|
23
|
+
md: "",
|
|
24
|
+
lg: ""
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: {
|
|
28
|
+
variant: "default",
|
|
29
|
+
size: "md"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
var Card = React.forwardRef(({ className, variant, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
ref,
|
|
37
|
+
"data-slot": "card",
|
|
38
|
+
"data-size": size,
|
|
39
|
+
className: cn(cardVariants({ variant, size }), className),
|
|
40
|
+
...props
|
|
41
|
+
}
|
|
42
|
+
));
|
|
43
|
+
Card.displayName = "Card";
|
|
44
|
+
var CardHeader = React.forwardRef(
|
|
45
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
ref,
|
|
49
|
+
"data-slot": "card-header",
|
|
50
|
+
className: cn(
|
|
51
|
+
"flex flex-col space-y-1.5 border-b",
|
|
52
|
+
// Size variants inherited from Card
|
|
53
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
54
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
55
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
56
|
+
className
|
|
57
|
+
),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
CardHeader.displayName = "CardHeader";
|
|
63
|
+
var CardTitle = React.forwardRef(
|
|
64
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
65
|
+
"h3",
|
|
66
|
+
{
|
|
67
|
+
ref,
|
|
68
|
+
"data-slot": "card-title",
|
|
69
|
+
className: cn(
|
|
70
|
+
"font-semibold leading-tight tracking-tight",
|
|
71
|
+
"[[data-size=sm]_&]:text-sm",
|
|
72
|
+
"[[data-size=md]_&]:text-base",
|
|
73
|
+
"[[data-size=lg]_&]:text-lg",
|
|
74
|
+
className
|
|
75
|
+
),
|
|
76
|
+
...props
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
CardTitle.displayName = "CardTitle";
|
|
81
|
+
var CardDescription = React.forwardRef(
|
|
82
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", { ref, "data-slot": "card-description", className: cn("text-sm text-foreground-muted", className), ...props })
|
|
83
|
+
);
|
|
84
|
+
CardDescription.displayName = "CardDescription";
|
|
85
|
+
var CardContent = React.forwardRef(
|
|
86
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
ref,
|
|
90
|
+
"data-slot": "card-content",
|
|
91
|
+
className: cn(
|
|
92
|
+
"border-b last:border-none",
|
|
93
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
94
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
95
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
96
|
+
className
|
|
97
|
+
),
|
|
98
|
+
...props
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
);
|
|
102
|
+
CardContent.displayName = "CardContent";
|
|
103
|
+
var CardFooter = React.forwardRef(
|
|
104
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
ref,
|
|
108
|
+
"data-slot": "card-footer",
|
|
109
|
+
className: cn(
|
|
110
|
+
"flex items-center",
|
|
111
|
+
"[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4",
|
|
112
|
+
"[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6",
|
|
113
|
+
"[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8",
|
|
114
|
+
className
|
|
115
|
+
),
|
|
116
|
+
...props
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
);
|
|
120
|
+
CardFooter.displayName = "CardFooter";
|
|
121
|
+
|
|
122
|
+
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardVariants };
|
|
123
|
+
//# sourceMappingURL=chunk-M5CHZ5BA.js.map
|
|
124
|
+
//# sourceMappingURL=chunk-M5CHZ5BA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/card.tsx"],"names":[],"mappings":"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","file":"chunk-M5CHZ5BA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\n/* -------------------------------------------------------------------------- */\n/* Card */\n/* -------------------------------------------------------------------------- */\n\nconst cardVariants = cva(\n // A Card is a visual container, not a focusable surface. Do not apply\n // focus-within rings to the base — that bleeds the ring of whatever\n // input/button inside has focus onto the whole card. The `interactive`\n // variant below opts into focus-visible explicitly because it IS clickable.\n 'overflow-hidden rounded-lg text-card-foreground transition-all duration-200',\n {\n variants: {\n variant: {\n default: 'border bg-surface-100 shadow-sm',\n outlined: 'border-2 border-border bg-transparent',\n elevated: 'bg-surface-100 shadow-card hover:shadow-lg',\n interactive:\n 'border bg-surface-100 shadow-sm hover:-translate-y-0.5 hover:shadow-lg active:translate-y-0 active:shadow-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n glass: 'border border-border/50 bg-background/80 backdrop-blur-sm shadow-sm',\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n)\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, variant, size = 'md', ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n data-size={size}\n className={cn(cardVariants({ variant, size }), className)}\n {...props}\n />\n))\nCard.displayName = 'Card'\n\n/* -------------------------------------------------------------------------- */\n/* CardHeader */\n/* -------------------------------------------------------------------------- */\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\n 'flex flex-col space-y-1.5 border-b',\n // Size variants inherited from Card\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\n/* -------------------------------------------------------------------------- */\n/* CardTitle */\n/* -------------------------------------------------------------------------- */\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n 'font-semibold leading-tight tracking-tight',\n '[[data-size=sm]_&]:text-sm',\n '[[data-size=md]_&]:text-base',\n '[[data-size=lg]_&]:text-lg',\n className\n )}\n {...props}\n />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\n/* -------------------------------------------------------------------------- */\n/* CardDescription */\n/* -------------------------------------------------------------------------- */\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} data-slot=\"card-description\" className={cn('text-sm text-foreground-muted', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\n/* -------------------------------------------------------------------------- */\n/* CardContent */\n/* -------------------------------------------------------------------------- */\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn(\n 'border-b last:border-none',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardContent.displayName = 'CardContent'\n\n/* -------------------------------------------------------------------------- */\n/* CardFooter */\n/* -------------------------------------------------------------------------- */\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\n 'flex items-center',\n '[[data-size=sm]_&]:py-3 [[data-size=sm]_&]:px-4',\n '[[data-size=md]_&]:py-4 [[data-size=md]_&]:px-6',\n '[[data-size=lg]_&]:py-5 [[data-size=lg]_&]:px-8',\n className\n )}\n {...props}\n />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, cardVariants, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\nexport type { CardProps }\n"]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Button } from './chunk-RA5KZNG5.js';
|
|
2
|
+
import { cn, convertToLocalNumbers } from './chunk-4SVQNEVH.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Search, Star, Clock, Play } from 'lucide-react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var STRINGS = {
|
|
8
|
+
fa: { run: "\u0627\u062C\u0631\u0627", runs: "\u0627\u062C\u0631\u0627", star: "\u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC", unstar: "\u062D\u0630\u0641 \u0627\u0632 \u0639\u0644\u0627\u0642\u0647\u200C\u0645\u0646\u062F\u06CC\u200C\u0647\u0627" },
|
|
9
|
+
ar: { run: "\u062A\u0634\u063A\u064A\u0644", runs: "\u062A\u0634\u063A\u064A\u0644", star: "\u0645\u0641\u0636\u0644\u0629", unstar: "\u0625\u0632\u0627\u0644\u0629 \u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644\u0629" },
|
|
10
|
+
en: { run: "Run", runs: "runs", star: "Favorite", unstar: "Unfavorite" }
|
|
11
|
+
};
|
|
12
|
+
var SavedQueryCard = React.forwardRef(
|
|
13
|
+
({ className, name, description, filters, runCount, lastRun, onRun, runLabel, favorite, locale = "fa", ...props }, ref) => {
|
|
14
|
+
const t = STRINGS[locale] ?? STRINGS.fa;
|
|
15
|
+
return /* @__PURE__ */ jsxs(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
ref,
|
|
19
|
+
"data-slot": "saved-query-card",
|
|
20
|
+
className: cn("flex flex-col gap-3 rounded-lg border border-border bg-background p-4", className),
|
|
21
|
+
...props,
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Search, { className: "size-4 mt-0.5 shrink-0 text-foreground-lighter", "aria-hidden": "true" }),
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground truncate", children: name }),
|
|
27
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-foreground-lighter line-clamp-2", children: description })
|
|
28
|
+
] }),
|
|
29
|
+
favorite && /* @__PURE__ */ jsx(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: "button",
|
|
33
|
+
onClick: () => favorite.onChange(!favorite.starred),
|
|
34
|
+
className: "shrink-0 inline-flex size-7 items-center justify-center rounded text-foreground-lighter hover:bg-surface-100 hover:text-foreground transition-colors",
|
|
35
|
+
"aria-label": favorite.starred ? t.unstar : t.star,
|
|
36
|
+
"aria-pressed": favorite.starred,
|
|
37
|
+
"data-slot": "saved-query-card-favorite",
|
|
38
|
+
children: /* @__PURE__ */ jsx(
|
|
39
|
+
Star,
|
|
40
|
+
{
|
|
41
|
+
className: cn("size-4", favorite.starred && "fill-warning-default text-warning-default"),
|
|
42
|
+
"aria-hidden": "true"
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
] }),
|
|
48
|
+
filters && filters.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: filters.map((f, i) => /* @__PURE__ */ jsxs(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
className: "inline-flex items-center gap-1 rounded-md border border-border bg-background-muted/40 px-2 py-0.5 text-2xs",
|
|
52
|
+
"data-slot": "saved-query-card-filter",
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ jsxs("span", { className: "text-foreground-lighter", children: [
|
|
55
|
+
f.label,
|
|
56
|
+
":"
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground font-medium", children: f.value })
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
i
|
|
62
|
+
)) }),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 pt-2 border-t border-border", children: [
|
|
64
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 text-2xs text-foreground-lighter", children: [
|
|
65
|
+
typeof runCount === "number" && /* @__PURE__ */ jsxs("span", { className: "tabular-nums", children: [
|
|
66
|
+
convertToLocalNumbers(runCount, locale),
|
|
67
|
+
" ",
|
|
68
|
+
t.runs
|
|
69
|
+
] }),
|
|
70
|
+
lastRun && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
71
|
+
/* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
|
|
72
|
+
lastRun
|
|
73
|
+
] })
|
|
74
|
+
] }),
|
|
75
|
+
onRun && /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "outline", onClick: onRun, className: "gap-1.5", "data-slot": "saved-query-card-run", children: [
|
|
76
|
+
/* @__PURE__ */ jsx(Play, { className: "size-3", "aria-hidden": "true" }),
|
|
77
|
+
runLabel ?? t.run
|
|
78
|
+
] })
|
|
79
|
+
] })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
SavedQueryCard.displayName = "SavedQueryCard";
|
|
86
|
+
|
|
87
|
+
export { SavedQueryCard };
|
|
88
|
+
//# sourceMappingURL=chunk-MBCTRNTG.js.map
|
|
89
|
+
//# sourceMappingURL=chunk-MBCTRNTG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/saved-query-card.tsx"],"names":[],"mappings":"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","file":"chunk-MBCTRNTG.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Search, Play, Star, Clock } from 'lucide-react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { Button } from './button'\n\n/**\n * SavedQueryCard — saved-search tile for analyst dashboards. Shows query\n * description + filter summary chips, run count, last-run timestamp, and a\n * one-click \"run again\" action button. Optional star/favorite toggle.\n */\n\nexport interface SavedQueryFilter {\n /** Filter label (e.g., \"احساس\") */\n label: React.ReactNode\n /** Filter value (e.g., \"منفی\") */\n value: React.ReactNode\n}\n\nexport interface SavedQueryCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Saved query name */\n name: React.ReactNode\n /** Optional 1-line description */\n description?: React.ReactNode\n /** Filter chips (label + value pairs) */\n filters?: SavedQueryFilter[]\n /** Total run count */\n runCount?: number\n /** Last-run display (e.g., \"۲ روز پیش\") */\n lastRun?: React.ReactNode\n /** Run-now callback */\n onRun?: () => void\n /** Run button label override */\n runLabel?: React.ReactNode\n /** Favorite/star state. When set, renders the star toggle */\n favorite?: {\n starred: boolean\n onChange: (next: boolean) => void\n }\n /** Locale @default 'fa' */\n locale?: SupportedLocale\n}\n\nconst STRINGS: Record<SupportedLocale, { run: string; runs: string; star: string; unstar: string }> = {\n fa: { run: 'اجرا', runs: 'اجرا', star: 'علاقهمندی', unstar: 'حذف از علاقهمندیها' },\n ar: { run: 'تشغيل', runs: 'تشغيل', star: 'مفضلة', unstar: 'إزالة من المفضلة' },\n en: { run: 'Run', runs: 'runs', star: 'Favorite', unstar: 'Unfavorite' },\n}\n\nconst SavedQueryCard = React.forwardRef<HTMLDivElement, SavedQueryCardProps>(\n (\n { className, name, description, filters, runCount, lastRun, onRun, runLabel, favorite, locale = 'fa', ...props },\n ref\n ) => {\n const t = STRINGS[locale] ?? STRINGS.fa\n return (\n <div\n ref={ref}\n data-slot=\"saved-query-card\"\n className={cn('flex flex-col gap-3 rounded-lg border border-border bg-background p-4', className)}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-start gap-3\">\n <Search className=\"size-4 mt-0.5 shrink-0 text-foreground-lighter\" aria-hidden=\"true\" />\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-foreground truncate\">{name}</h3>\n {description && <p className=\"mt-0.5 text-xs text-foreground-lighter line-clamp-2\">{description}</p>}\n </div>\n {favorite && (\n <button\n type=\"button\"\n onClick={() => favorite.onChange(!favorite.starred)}\n className=\"shrink-0 inline-flex size-7 items-center justify-center rounded text-foreground-lighter hover:bg-surface-100 hover:text-foreground transition-colors\"\n aria-label={favorite.starred ? t.unstar : t.star}\n aria-pressed={favorite.starred}\n data-slot=\"saved-query-card-favorite\"\n >\n <Star\n className={cn('size-4', favorite.starred && 'fill-warning-default text-warning-default')}\n aria-hidden=\"true\"\n />\n </button>\n )}\n </div>\n\n {/* Filter chips */}\n {filters && filters.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {filters.map((f, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1 rounded-md border border-border bg-background-muted/40 px-2 py-0.5 text-2xs\"\n data-slot=\"saved-query-card-filter\"\n >\n <span className=\"text-foreground-lighter\">{f.label}:</span>\n <span className=\"text-foreground font-medium\">{f.value}</span>\n </span>\n ))}\n </div>\n )}\n\n {/* Footer — meta + run button */}\n <div className=\"flex items-center justify-between gap-2 pt-2 border-t border-border\">\n <div className=\"flex items-center gap-3 text-2xs text-foreground-lighter\">\n {typeof runCount === 'number' && (\n <span className=\"tabular-nums\">\n {convertToLocalNumbers(runCount, locale)} {t.runs}\n </span>\n )}\n {lastRun && (\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"size-3\" aria-hidden=\"true\" />\n {lastRun}\n </span>\n )}\n </div>\n {onRun && (\n <Button size=\"sm\" variant=\"outline\" onClick={onRun} className=\"gap-1.5\" data-slot=\"saved-query-card-run\">\n <Play className=\"size-3\" aria-hidden=\"true\" />\n {runLabel ?? t.run}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\nSavedQueryCard.displayName = 'SavedQueryCard'\n\nexport { SavedQueryCard }\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { statusLabels } from './chunk-CV3N3HVK.js';
|
|
2
|
+
import { cn } from './chunk-4SVQNEVH.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var SIZE_CLASSES = {
|
|
7
|
+
sm: { badge: "h-6 text-xs px-2 gap-1.5", dot: "size-1.5" },
|
|
8
|
+
md: { badge: "h-7 text-sm px-2.5 gap-2", dot: "size-2" }
|
|
9
|
+
};
|
|
10
|
+
function tokenVar(status) {
|
|
11
|
+
return `--status-${status}`;
|
|
12
|
+
}
|
|
13
|
+
var StatusBadge = React.forwardRef(
|
|
14
|
+
({ className, status, size = "md", showLabel = true, locale = "fa", animated, ...props }, ref) => {
|
|
15
|
+
const label = statusLabels[locale]?.[status] ?? statusLabels.fa[status];
|
|
16
|
+
const shouldPulse = animated ?? status === "critical";
|
|
17
|
+
const token = tokenVar(status);
|
|
18
|
+
return /* @__PURE__ */ jsxs(
|
|
19
|
+
"span",
|
|
20
|
+
{
|
|
21
|
+
ref,
|
|
22
|
+
"data-slot": "status-badge",
|
|
23
|
+
"data-status": status,
|
|
24
|
+
"aria-label": showLabel ? void 0 : label,
|
|
25
|
+
className: cn(
|
|
26
|
+
"inline-flex items-center rounded-full border font-medium transition-colors duration-150",
|
|
27
|
+
SIZE_CLASSES[size].badge,
|
|
28
|
+
className
|
|
29
|
+
),
|
|
30
|
+
style: {
|
|
31
|
+
backgroundColor: `hsl(var(${token}) / 0.1)`,
|
|
32
|
+
borderColor: `hsl(var(${token}) / 0.3)`,
|
|
33
|
+
color: `hsl(var(${token}))`
|
|
34
|
+
},
|
|
35
|
+
...props,
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
|
|
38
|
+
shouldPulse && /* @__PURE__ */ jsx(
|
|
39
|
+
"span",
|
|
40
|
+
{
|
|
41
|
+
className: "absolute inset-0 rounded-full animate-pulse-subtle",
|
|
42
|
+
style: { backgroundColor: `hsl(var(${token}) / 0.5)` },
|
|
43
|
+
"aria-hidden": "true"
|
|
44
|
+
}
|
|
45
|
+
),
|
|
46
|
+
/* @__PURE__ */ jsx(
|
|
47
|
+
"span",
|
|
48
|
+
{
|
|
49
|
+
className: cn("relative inline-block rounded-full", SIZE_CLASSES[size].dot),
|
|
50
|
+
style: { backgroundColor: `hsl(var(${token}))` },
|
|
51
|
+
"aria-hidden": "true"
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
] }),
|
|
55
|
+
showLabel && /* @__PURE__ */ jsx("span", { children: label })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
StatusBadge.displayName = "StatusBadge";
|
|
62
|
+
|
|
63
|
+
export { StatusBadge };
|
|
64
|
+
//# sourceMappingURL=chunk-MEK4RSGC.js.map
|
|
65
|
+
//# sourceMappingURL=chunk-MEK4RSGC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/status-badge.tsx"],"names":[],"mappings":";;;;;AAuBA,IAAM,YAAA,GAAe;AAAA,EACnB,EAAA,EAAI,EAAE,KAAA,EAAO,0BAAA,EAA4B,KAAK,UAAA,EAAW;AAAA,EACzD,EAAA,EAAI,EAAE,KAAA,EAAO,0BAAA,EAA4B,KAAK,QAAA;AAChD,CAAA;AAEA,SAAS,SAAS,MAAA,EAA2B;AAC3C,EAAA,OAAO,YAAY,MAAM,CAAA,CAAA;AAC3B;AAEA,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,OAAO,IAAA,EAAM,SAAA,GAAY,IAAA,EAAM,MAAA,GAAS,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChG,IAAA,MAAM,KAAA,GAAQ,aAAa,MAAM,CAAA,GAAI,MAAM,CAAA,IAAK,YAAA,CAAa,GAAG,MAAM,CAAA;AACtE,IAAA,MAAM,WAAA,GAAc,YAAY,MAAA,KAAW,UAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAE7B,IAAA,uBACE,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAa,MAAA;AAAA,QACb,YAAA,EAAY,YAAY,MAAA,GAAY,KAAA;AAAA,QACpC,SAAA,EAAW,EAAA;AAAA,UACT,yFAAA;AAAA,UACA,YAAA,CAAa,IAAI,CAAA,CAAE,KAAA;AAAA,UACnB;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,eAAA,EAAiB,WAAW,KAAK,CAAA,QAAA,CAAA;AAAA,UACjC,WAAA,EAAa,WAAW,KAAK,CAAA,QAAA,CAAA;AAAA,UAC7B,KAAA,EAAO,WAAW,KAAK,CAAA,EAAA;AAAA,SACzB;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sBAAA,EACb,QAAA,EAAA;AAAA,YAAA,WAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,oDAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,QAAA,EAAW,KAAK,CAAA,QAAA,CAAA,EAAW;AAAA,gBACrD,aAAA,EAAY;AAAA;AAAA,aACd;AAAA,4BAEF,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,WAAW,EAAA,CAAG,oCAAA,EAAsC,YAAA,CAAa,IAAI,EAAE,GAAG,CAAA;AAAA,gBAC1E,KAAA,EAAO,EAAE,eAAA,EAAiB,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,CAAA,EAAK;AAAA,gBAC/C,aAAA,EAAY;AAAA;AAAA;AACd,WAAA,EACF,CAAA;AAAA,UACC,SAAA,oBAAa,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KAC7B;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-MEK4RSGC.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn, type SupportedLocale } from '@/lib/utils'\nimport { statusLabels, type StatusKey } from '@/lib/i18n'\n\nexport interface StatusBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Operational status */\n status: StatusKey\n /** Size */\n size?: 'sm' | 'md'\n /** Show text label (keeps aria-label when false) */\n showLabel?: boolean\n /** Locale */\n locale?: SupportedLocale\n /**\n * Explicitly enable/disable the pulse animation on the indicator dot.\n * Default: animated only for `status=\"critical\"`. Pair with\n * `prefers-reduced-motion` (already honoured globally in globals.css).\n */\n animated?: boolean\n}\n\nconst SIZE_CLASSES = {\n sm: { badge: 'h-6 text-xs px-2 gap-1.5', dot: 'size-1.5' },\n md: { badge: 'h-7 text-sm px-2.5 gap-2', dot: 'size-2' },\n} as const\n\nfunction tokenVar(status: StatusKey): string {\n return `--status-${status}`\n}\n\nconst StatusBadge = React.forwardRef<HTMLSpanElement, StatusBadgeProps>(\n ({ className, status, size = 'md', showLabel = true, locale = 'fa', animated, ...props }, ref) => {\n const label = statusLabels[locale]?.[status] ?? statusLabels.fa[status]\n const shouldPulse = animated ?? status === 'critical'\n const token = tokenVar(status)\n\n return (\n <span\n ref={ref}\n data-slot=\"status-badge\"\n data-status={status}\n aria-label={showLabel ? undefined : label}\n className={cn(\n 'inline-flex items-center rounded-full border font-medium transition-colors duration-150',\n SIZE_CLASSES[size].badge,\n className\n )}\n style={{\n backgroundColor: `hsl(var(${token}) / 0.1)`,\n borderColor: `hsl(var(${token}) / 0.3)`,\n color: `hsl(var(${token}))`,\n }}\n {...props}\n >\n <span className=\"relative inline-flex\">\n {shouldPulse && (\n <span\n className=\"absolute inset-0 rounded-full animate-pulse-subtle\"\n style={{ backgroundColor: `hsl(var(${token}) / 0.5)` }}\n aria-hidden=\"true\"\n />\n )}\n <span\n className={cn('relative inline-block rounded-full', SIZE_CLASSES[size].dot)}\n style={{ backgroundColor: `hsl(var(${token}))` }}\n aria-hidden=\"true\"\n />\n </span>\n {showLabel && <span>{label}</span>}\n </span>\n )\n }\n)\n\nStatusBadge.displayName = 'StatusBadge'\n\nexport { StatusBadge }\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from './chunk-4SVQNEVH.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Popover = PopoverPrimitive.Root;
|
|
7
|
+
var PopoverTrigger = PopoverPrimitive.Trigger;
|
|
8
|
+
var PopoverAnchor = PopoverPrimitive.Anchor;
|
|
9
|
+
var PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
10
|
+
PopoverPrimitive.Content,
|
|
11
|
+
{
|
|
12
|
+
ref,
|
|
13
|
+
"data-slot": "popover-content",
|
|
14
|
+
align,
|
|
15
|
+
sideOffset,
|
|
16
|
+
className: cn(
|
|
17
|
+
"z-50 rounded-md border border-overlay bg-overlay p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
|
|
18
|
+
className
|
|
19
|
+
),
|
|
20
|
+
...props
|
|
21
|
+
}
|
|
22
|
+
) }));
|
|
23
|
+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
24
|
+
|
|
25
|
+
export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
|
|
26
|
+
//# sourceMappingURL=chunk-MFTX2DDQ.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-MFTX2DDQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/popover.tsx"],"names":[],"mappings":";;;;;AAOA,IAAM,OAAA,GAA2B,gBAAA,CAAA;AAEjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAExC,IAAM,aAAA,GAAiC,gBAAA,CAAA;AAEvC,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,WAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC5D,GAAA,CAAkB,yBAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,WAAA,EAAU,iBAAA;AAAA,IACV,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,geAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA","file":"chunk-MFTX2DDQ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cn } from '@/lib/utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 rounded-md border border-overlay bg-overlay p-4 text-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n"]}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3AIJKXBV_cjs = require('./chunk-3AIJKXBV.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var recharts = require('recharts');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule) return e;
|
|
10
|
+
var n = Object.create(null);
|
|
11
|
+
if (e) {
|
|
12
|
+
Object.keys(e).forEach(function (k) {
|
|
13
|
+
if (k !== 'default') {
|
|
14
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return e[k]; }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
27
|
+
|
|
28
|
+
var PartoLineChart = React__namespace.forwardRef(function PartoLineChart2({
|
|
29
|
+
data,
|
|
30
|
+
dataKeys,
|
|
31
|
+
xAxisKey = "name",
|
|
32
|
+
curve = "monotone",
|
|
33
|
+
strokeWidth = 2.5,
|
|
34
|
+
showDots = false,
|
|
35
|
+
enableGridY = true,
|
|
36
|
+
enableGridX = false,
|
|
37
|
+
margin = { top: 20, right: 20, bottom: 50, left: 50 },
|
|
38
|
+
axisBottom,
|
|
39
|
+
axisLeft,
|
|
40
|
+
tooltipFormatter,
|
|
41
|
+
locale = "fa",
|
|
42
|
+
className,
|
|
43
|
+
isLoading = false,
|
|
44
|
+
ariaLabel,
|
|
45
|
+
chartProps
|
|
46
|
+
}, ref) {
|
|
47
|
+
const { chartColors, axisTickStyle, gridStyle, tooltipStyle, crosshairStyle } = chunk3AIJKXBV_cjs.useChartTheme();
|
|
48
|
+
const defaultXTick = React__namespace.useMemo(() => chunk3AIJKXBV_cjs.localeAwareCategoryTick(locale), [locale]);
|
|
49
|
+
const defaultYTick = React__namespace.useMemo(() => chunk3AIJKXBV_cjs.localeAwareNumberTick(locale), [locale]);
|
|
50
|
+
if (isLoading) {
|
|
51
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartLoadingSkeleton, { className });
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartContainer, { ref, className, dataSlot: "line-chart", ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.LineChart, { data, margin, ...chartProps, children: [
|
|
54
|
+
(enableGridX || enableGridY) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
55
|
+
recharts.CartesianGrid,
|
|
56
|
+
{
|
|
57
|
+
horizontal: enableGridY,
|
|
58
|
+
vertical: enableGridX,
|
|
59
|
+
stroke: gridStyle.stroke,
|
|
60
|
+
strokeDasharray: gridStyle.strokeDasharray,
|
|
61
|
+
strokeOpacity: gridStyle.strokeOpacity
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
axisBottom !== null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
+
recharts.XAxis,
|
|
66
|
+
{
|
|
67
|
+
dataKey: xAxisKey,
|
|
68
|
+
tick: axisTickStyle,
|
|
69
|
+
tickLine: false,
|
|
70
|
+
axisLine: false,
|
|
71
|
+
tickMargin: 12,
|
|
72
|
+
tickFormatter: defaultXTick,
|
|
73
|
+
...axisBottom
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
axisLeft !== null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
recharts.YAxis,
|
|
78
|
+
{
|
|
79
|
+
tick: axisTickStyle,
|
|
80
|
+
tickLine: false,
|
|
81
|
+
axisLine: false,
|
|
82
|
+
tickMargin: 12,
|
|
83
|
+
tickFormatter: defaultYTick,
|
|
84
|
+
...axisLeft
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
88
|
+
recharts.Tooltip,
|
|
89
|
+
{
|
|
90
|
+
cursor: crosshairStyle,
|
|
91
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartTooltip, { tooltipStyle, formatter: tooltipFormatter, locale })
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
dataKeys.map((key, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
95
|
+
recharts.Line,
|
|
96
|
+
{
|
|
97
|
+
type: curve,
|
|
98
|
+
dataKey: key,
|
|
99
|
+
stroke: chartColors[i % chartColors.length],
|
|
100
|
+
strokeWidth,
|
|
101
|
+
dot: showDots,
|
|
102
|
+
activeDot: { r: 4, strokeWidth: 2 },
|
|
103
|
+
animationDuration: 800,
|
|
104
|
+
animationEasing: "ease-out"
|
|
105
|
+
},
|
|
106
|
+
key
|
|
107
|
+
))
|
|
108
|
+
] }) }) });
|
|
109
|
+
});
|
|
110
|
+
PartoLineChart.displayName = "PartoLineChart";
|
|
111
|
+
|
|
112
|
+
exports.PartoLineChart = PartoLineChart;
|
|
113
|
+
//# sourceMappingURL=chunk-MKYVQQBV.cjs.map
|
|
114
|
+
//# sourceMappingURL=chunk-MKYVQQBV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/charts/PartoLineChart.tsx"],"names":["React","PartoLineChart","useChartTheme","localeAwareCategoryTick","localeAwareNumberTick","jsx","ChartLoadingSkeleton","ChartContainer","ResponsiveContainer","jsxs","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","ChartTooltip","Line"],"mappings":"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","file":"chunk-MKYVQQBV.cjs","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'\n\nimport { useChartTheme } from '@/hooks/use-chart-theme'\nimport { type SupportedLocale } from '@/lib/utils'\nimport {\n ChartContainer,\n ChartLoadingSkeleton,\n ChartTooltip,\n localeAwareCategoryTick,\n localeAwareNumberTick,\n} from './chart-utils'\n\nexport interface PartoLineChartProps {\n /** Row-oriented data: [{ name: \"فروردین\", series1: 50, series2: 30 }] */\n data: Array<Record<string, any>>\n /** Keys for each line series (e.g. ['فروش', 'سود']) */\n dataKeys: string[]\n /** Field name for X axis (default: 'name') */\n xAxisKey?: string\n /** Curve type */\n curve?: 'monotone' | 'linear' | 'natural' | 'step'\n /** Line width */\n strokeWidth?: number\n /** Show dots on data points */\n showDots?: boolean\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Custom X axis config */\n axisBottom?: Record<string, any> | null\n /** Custom Y axis config */\n axisLeft?: Record<string, any> | null\n /** Custom tooltip formatter */\n tooltipFormatter?: (name: string, value: number) => React.ReactNode\n /**\n * Locale for digit formatting in tooltips and axis ticks. fa/ar render\n * Persian/Arabic digits with locale suffixes; en uses Latin K/M/B.\n * Default: 'fa'.\n */\n locale?: SupportedLocale\n className?: string\n isLoading?: boolean\n ariaLabel?: string\n /** Additional Recharts LineChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoLineChart = React.forwardRef<HTMLDivElement, PartoLineChartProps>(function PartoLineChart(\n {\n data,\n dataKeys,\n xAxisKey = 'name',\n curve = 'monotone',\n strokeWidth = 2.5,\n showDots = false,\n enableGridY = true,\n enableGridX = false,\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n axisBottom,\n axisLeft,\n tooltipFormatter,\n locale = 'fa',\n className,\n isLoading = false,\n ariaLabel,\n chartProps,\n },\n ref\n) {\n const { chartColors, axisTickStyle, gridStyle, tooltipStyle, crosshairStyle } = useChartTheme()\n const defaultXTick = React.useMemo(() => localeAwareCategoryTick(locale), [locale])\n const defaultYTick = React.useMemo(() => localeAwareNumberTick(locale), [locale])\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"line-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={margin} {...chartProps}>\n {(enableGridX || enableGridY) && (\n <CartesianGrid\n horizontal={enableGridY}\n vertical={enableGridX}\n stroke={gridStyle.stroke}\n strokeDasharray={gridStyle.strokeDasharray}\n strokeOpacity={gridStyle.strokeOpacity}\n />\n )}\n\n {axisBottom !== null && (\n <XAxis\n dataKey={xAxisKey}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={defaultXTick}\n {...axisBottom}\n />\n )}\n\n {axisLeft !== null && (\n <YAxis\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={defaultYTick}\n {...axisLeft}\n />\n )}\n\n <Tooltip\n cursor={crosshairStyle}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} locale={locale} />}\n />\n\n {dataKeys.map((key, i) => (\n <Line\n key={key}\n type={curve}\n dataKey={key}\n stroke={chartColors[i % chartColors.length]}\n strokeWidth={strokeWidth}\n dot={showDots}\n activeDot={{ r: 4, strokeWidth: 2 }}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoLineChart.displayName = 'PartoLineChart'\n"]}
|