@parto-system-design/ui 1.1.7 → 1.1.8

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 (122) hide show
  1. package/dist/{chunk-HEYMLQOV.cjs → chunk-2ACKKPWA.cjs} +22 -4
  2. package/dist/chunk-2ACKKPWA.cjs.map +1 -0
  3. package/dist/{chunk-RA5KZNG5.js → chunk-3QYYPPFJ.js} +8 -8
  4. package/dist/chunk-3QYYPPFJ.js.map +1 -0
  5. package/dist/{chunk-OEVMKFFL.cjs → chunk-4WONHORR.cjs} +47 -35
  6. package/dist/chunk-4WONHORR.cjs.map +1 -0
  7. package/dist/{chunk-NEML6RCV.js → chunk-5HCXH6GS.js} +6 -2
  8. package/dist/chunk-5HCXH6GS.js.map +1 -0
  9. package/dist/{chunk-53QY4PD3.js → chunk-GCZ6YATL.js} +38 -6
  10. package/dist/chunk-GCZ6YATL.js.map +1 -0
  11. package/dist/{chunk-GDHRYKVM.js → chunk-GPYJ66CG.js} +4 -4
  12. package/dist/chunk-GPYJ66CG.js.map +1 -0
  13. package/dist/{chunk-SCGW2BH4.cjs → chunk-HS3XI3CC.cjs} +5 -5
  14. package/dist/chunk-HS3XI3CC.cjs.map +1 -0
  15. package/dist/chunk-JCJLN437.js +108 -0
  16. package/dist/chunk-JCJLN437.js.map +1 -0
  17. package/dist/{chunk-MQGQVI3W.cjs → chunk-JMKNNH63.cjs} +39 -7
  18. package/dist/chunk-JMKNNH63.cjs.map +1 -0
  19. package/dist/{chunk-34JUCX2G.cjs → chunk-K6G63EED.cjs} +2 -4
  20. package/dist/chunk-K6G63EED.cjs.map +1 -0
  21. package/dist/{chunk-3AIJKXBV.cjs → chunk-KYM7NIJO.cjs} +200 -9
  22. package/dist/chunk-KYM7NIJO.cjs.map +1 -0
  23. package/dist/{chunk-ZZFNJR2E.js → chunk-MEKWH3GS.js} +22 -4
  24. package/dist/chunk-MEKWH3GS.js.map +1 -0
  25. package/dist/{chunk-YE477L2H.cjs → chunk-MMC6M35Q.cjs} +10 -10
  26. package/dist/chunk-MMC6M35Q.cjs.map +1 -0
  27. package/dist/{chunk-LZMCMZZF.js → chunk-NMH43BDC.js} +44 -32
  28. package/dist/chunk-NMH43BDC.js.map +1 -0
  29. package/dist/chunk-NORDUD2T.cjs +135 -0
  30. package/dist/chunk-NORDUD2T.cjs.map +1 -0
  31. package/dist/{chunk-SCX6AR53.cjs → chunk-OQB6HIUL.cjs} +5 -5
  32. package/dist/{chunk-SCX6AR53.cjs.map → chunk-OQB6HIUL.cjs.map} +1 -1
  33. package/dist/{chunk-IQHKJ4SS.js → chunk-PYURPUTV.js} +195 -6
  34. package/dist/chunk-PYURPUTV.js.map +1 -0
  35. package/dist/{chunk-AXAY64KL.js → chunk-S3T2L6NA.js} +3 -4
  36. package/dist/chunk-S3T2L6NA.js.map +1 -0
  37. package/dist/{chunk-MBCTRNTG.js → chunk-SXWSOU3Y.js} +3 -3
  38. package/dist/{chunk-MBCTRNTG.js.map → chunk-SXWSOU3Y.js.map} +1 -1
  39. package/dist/chunk-TWJXOV4C.js +145 -0
  40. package/dist/chunk-TWJXOV4C.js.map +1 -0
  41. package/dist/{chunk-P5XHPNJG.cjs → chunk-U3ADRIVO.cjs} +6 -2
  42. package/dist/chunk-U3ADRIVO.cjs.map +1 -0
  43. package/dist/chunk-UOZN45G4.cjs +130 -0
  44. package/dist/chunk-UOZN45G4.cjs.map +1 -0
  45. package/dist/chunk-VHLDOG74.cjs +167 -0
  46. package/dist/chunk-VHLDOG74.cjs.map +1 -0
  47. package/dist/{chunk-VO3B75F6.cjs → chunk-YENXXYUV.cjs} +4 -4
  48. package/dist/{chunk-VO3B75F6.cjs.map → chunk-YENXXYUV.cjs.map} +1 -1
  49. package/dist/chunk-YFQWC2PW.js +113 -0
  50. package/dist/chunk-YFQWC2PW.js.map +1 -0
  51. package/dist/{chunk-YAJWTNOX.js → chunk-ZBZDR4ZC.js} +3 -3
  52. package/dist/{chunk-YAJWTNOX.js.map → chunk-ZBZDR4ZC.js.map} +1 -1
  53. package/dist/components/charts/PartoAreaChart.cjs +3 -3
  54. package/dist/components/charts/PartoAreaChart.d.cts +2 -0
  55. package/dist/components/charts/PartoAreaChart.d.ts +2 -0
  56. package/dist/components/charts/PartoAreaChart.js +2 -2
  57. package/dist/components/charts/PartoBarChart.cjs +3 -3
  58. package/dist/components/charts/PartoBarChart.d.cts +6 -0
  59. package/dist/components/charts/PartoBarChart.d.ts +6 -0
  60. package/dist/components/charts/PartoBarChart.js +2 -2
  61. package/dist/components/charts/PartoLineChart.cjs +3 -3
  62. package/dist/components/charts/PartoLineChart.d.cts +8 -0
  63. package/dist/components/charts/PartoLineChart.d.ts +8 -0
  64. package/dist/components/charts/PartoLineChart.js +2 -2
  65. package/dist/components/charts/PartoPieChart.cjs +3 -3
  66. package/dist/components/charts/PartoPieChart.d.cts +8 -0
  67. package/dist/components/charts/PartoPieChart.d.ts +8 -0
  68. package/dist/components/charts/PartoPieChart.js +2 -2
  69. package/dist/components/ui/badge.cjs +3 -3
  70. package/dist/components/ui/badge.js +1 -1
  71. package/dist/components/ui/button.cjs +4 -4
  72. package/dist/components/ui/button.js +2 -2
  73. package/dist/components/ui/calendar.cjs +4 -4
  74. package/dist/components/ui/calendar.js +3 -3
  75. package/dist/components/ui/data-table.cjs +4 -4
  76. package/dist/components/ui/data-table.js +3 -3
  77. package/dist/components/ui/input.cjs +5 -5
  78. package/dist/components/ui/input.js +2 -2
  79. package/dist/components/ui/page-card.cjs +2 -2
  80. package/dist/components/ui/page-card.d.cts +1 -1
  81. package/dist/components/ui/page-card.d.ts +1 -1
  82. package/dist/components/ui/page-card.js +1 -1
  83. package/dist/components/ui/saved-query-card.cjs +4 -4
  84. package/dist/components/ui/saved-query-card.js +3 -3
  85. package/dist/index.cjs +4470 -1927
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.css +333 -34
  88. package/dist/index.d.cts +910 -120
  89. package/dist/index.d.ts +910 -120
  90. package/dist/index.js +4298 -1792
  91. package/dist/index.js.map +1 -1
  92. package/dist/{page-card-DOl50DqJ.d.cts → page-card-CmShVqG-.d.cts} +1 -1
  93. package/dist/{page-card-CO92oXkc.d.ts → page-card-HBn-cy4J.d.ts} +1 -1
  94. package/package.json +1 -1
  95. package/dist/chunk-34JUCX2G.cjs.map +0 -1
  96. package/dist/chunk-3AIJKXBV.cjs.map +0 -1
  97. package/dist/chunk-53QY4PD3.js.map +0 -1
  98. package/dist/chunk-7Y4V3R3Y.cjs +0 -120
  99. package/dist/chunk-7Y4V3R3Y.cjs.map +0 -1
  100. package/dist/chunk-AXAY64KL.js.map +0 -1
  101. package/dist/chunk-D5XCQDFS.js +0 -92
  102. package/dist/chunk-D5XCQDFS.js.map +0 -1
  103. package/dist/chunk-GDHRYKVM.js.map +0 -1
  104. package/dist/chunk-HEYMLQOV.cjs.map +0 -1
  105. package/dist/chunk-IQHKJ4SS.js.map +0 -1
  106. package/dist/chunk-LLJR7FV3.js +0 -135
  107. package/dist/chunk-LLJR7FV3.js.map +0 -1
  108. package/dist/chunk-LZMCMZZF.js.map +0 -1
  109. package/dist/chunk-MKYVQQBV.cjs +0 -114
  110. package/dist/chunk-MKYVQQBV.cjs.map +0 -1
  111. package/dist/chunk-MQGQVI3W.cjs.map +0 -1
  112. package/dist/chunk-NEFZJHE4.cjs +0 -157
  113. package/dist/chunk-NEFZJHE4.cjs.map +0 -1
  114. package/dist/chunk-NEML6RCV.js.map +0 -1
  115. package/dist/chunk-OEVMKFFL.cjs.map +0 -1
  116. package/dist/chunk-P5XHPNJG.cjs.map +0 -1
  117. package/dist/chunk-QJ7UB2ZQ.js +0 -98
  118. package/dist/chunk-QJ7UB2ZQ.js.map +0 -1
  119. package/dist/chunk-RA5KZNG5.js.map +0 -1
  120. package/dist/chunk-SCGW2BH4.cjs.map +0 -1
  121. package/dist/chunk-YE477L2H.cjs.map +0 -1
  122. package/dist/chunk-ZZFNJR2E.js.map +0 -1
@@ -1,157 +0,0 @@
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 PartoBarChart = React__namespace.forwardRef(function PartoBarChart2({
29
- data,
30
- keys,
31
- indexBy,
32
- groupMode = "grouped",
33
- layout = "vertical",
34
- margin = { top: 20, right: 20, bottom: 50, left: 50 },
35
- barCategoryGap = "35%",
36
- barGap = 2,
37
- radius = [6, 6, 0, 0],
38
- enableGridY = true,
39
- enableGridX = false,
40
- enableLabel = false,
41
- axisBottom,
42
- axisLeft,
43
- tooltipFormatter,
44
- locale = "fa",
45
- className,
46
- isLoading = false,
47
- ariaLabel,
48
- chartProps
49
- }, ref) {
50
- const { chartColors, axisTickStyle, gridStyle, tooltipStyle } = chunk3AIJKXBV_cjs.useChartTheme();
51
- const categoryTick = React__namespace.useMemo(() => chunk3AIJKXBV_cjs.localeAwareCategoryTick(locale), [locale]);
52
- const numberTick = React__namespace.useMemo(() => chunk3AIJKXBV_cjs.localeAwareNumberTick(locale), [locale]);
53
- if (isLoading) {
54
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartLoadingSkeleton, { className });
55
- }
56
- const rechartsLayout = layout === "horizontal" ? "vertical" : "horizontal";
57
- const stackId = groupMode === "stacked" ? "stack" : void 0;
58
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartContainer, { ref, className, dataSlot: "bar-chart", ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(
59
- recharts.BarChart,
60
- {
61
- data,
62
- layout: rechartsLayout,
63
- margin,
64
- barCategoryGap,
65
- barGap,
66
- ...chartProps,
67
- children: [
68
- (enableGridX || enableGridY) && /* @__PURE__ */ jsxRuntime.jsx(
69
- recharts.CartesianGrid,
70
- {
71
- horizontal: enableGridY,
72
- vertical: enableGridX,
73
- stroke: gridStyle.stroke,
74
- strokeDasharray: gridStyle.strokeDasharray,
75
- strokeOpacity: gridStyle.strokeOpacity
76
- }
77
- ),
78
- rechartsLayout === "horizontal" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
79
- axisBottom !== null && /* @__PURE__ */ jsxRuntime.jsx(
80
- recharts.XAxis,
81
- {
82
- dataKey: indexBy,
83
- tick: axisTickStyle,
84
- tickLine: false,
85
- axisLine: false,
86
- tickMargin: 12,
87
- tickFormatter: categoryTick,
88
- ...axisBottom
89
- }
90
- ),
91
- axisLeft !== null && /* @__PURE__ */ jsxRuntime.jsx(
92
- recharts.YAxis,
93
- {
94
- tick: axisTickStyle,
95
- tickLine: false,
96
- axisLine: false,
97
- tickMargin: 12,
98
- tickFormatter: numberTick,
99
- ...axisLeft
100
- }
101
- )
102
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
103
- axisLeft !== null && /* @__PURE__ */ jsxRuntime.jsx(
104
- recharts.YAxis,
105
- {
106
- dataKey: indexBy,
107
- type: "category",
108
- tick: axisTickStyle,
109
- tickLine: false,
110
- axisLine: false,
111
- tickMargin: 12,
112
- tickFormatter: categoryTick,
113
- ...axisLeft
114
- }
115
- ),
116
- axisBottom !== null && /* @__PURE__ */ jsxRuntime.jsx(
117
- recharts.XAxis,
118
- {
119
- type: "number",
120
- tick: axisTickStyle,
121
- tickLine: false,
122
- axisLine: false,
123
- tickMargin: 12,
124
- tickFormatter: numberTick,
125
- ...axisBottom
126
- }
127
- )
128
- ] }),
129
- /* @__PURE__ */ jsxRuntime.jsx(
130
- recharts.Tooltip,
131
- {
132
- cursor: { fill: "hsl(0 0% 50% / 0.05)" },
133
- content: /* @__PURE__ */ jsxRuntime.jsx(chunk3AIJKXBV_cjs.ChartTooltip, { tooltipStyle, formatter: tooltipFormatter, locale })
134
- }
135
- ),
136
- keys.map((key, i) => /* @__PURE__ */ jsxRuntime.jsx(
137
- recharts.Bar,
138
- {
139
- dataKey: key,
140
- fill: chartColors[i % chartColors.length],
141
- radius,
142
- stackId,
143
- label: enableLabel ? { position: "top", style: axisTickStyle } : false,
144
- animationDuration: 800,
145
- animationEasing: "ease-out"
146
- },
147
- key
148
- ))
149
- ]
150
- }
151
- ) }) });
152
- });
153
- PartoBarChart.displayName = "PartoBarChart";
154
-
155
- exports.PartoBarChart = PartoBarChart;
156
- //# sourceMappingURL=chunk-NEFZJHE4.cjs.map
157
- //# sourceMappingURL=chunk-NEFZJHE4.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/charts/PartoBarChart.tsx"],"names":["React","PartoBarChart","useChartTheme","localeAwareCategoryTick","localeAwareNumberTick","jsx","ChartLoadingSkeleton","ChartContainer","ResponsiveContainer","jsxs","BarChart","CartesianGrid","Fragment","XAxis","YAxis","Tooltip","ChartTooltip","Bar"],"mappings":"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","file":"chunk-NEFZJHE4.cjs","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { BarChart, Bar, 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 PartoBarChartProps {\n /** Chart data — row-oriented array of objects */\n data: Array<Record<string, any>>\n /** Data keys to render as bars (e.g. ['فروش', 'هزینه']) */\n keys: string[]\n /** Field name used for X axis categories (e.g. 'ماه') */\n indexBy: string\n /** Stacked or grouped layout */\n groupMode?: 'grouped' | 'stacked'\n /** Bar layout direction */\n layout?: 'vertical' | 'horizontal'\n /** Chart margins */\n margin?: { top?: number; right?: number; bottom?: number; left?: number }\n /** Gap between category groups as percentage */\n barCategoryGap?: string | number\n /** Gap between bars within a group */\n barGap?: number\n /** Border radius for bar tops [topLeft, topRight, bottomRight, bottomLeft] */\n radius?: [number, number, number, number]\n /** Show horizontal grid lines */\n enableGridY?: boolean\n /** Show vertical grid lines */\n enableGridX?: boolean\n /** Show labels inside bars */\n enableLabel?: boolean\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 BarChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoBarChart = React.forwardRef<HTMLDivElement, PartoBarChartProps>(function PartoBarChart(\n {\n data,\n keys,\n indexBy,\n groupMode = 'grouped',\n layout = 'vertical',\n margin = { top: 20, right: 20, bottom: 50, left: 50 },\n barCategoryGap = '35%',\n barGap = 2,\n radius = [6, 6, 0, 0],\n enableGridY = true,\n enableGridX = false,\n enableLabel = false,\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 } = useChartTheme()\n const categoryTick = React.useMemo(() => localeAwareCategoryTick(locale), [locale])\n const numberTick = React.useMemo(() => localeAwareNumberTick(locale), [locale])\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} />\n }\n\n // Recharts uses \"horizontal\" for standard vertical bars and \"vertical\" for horizontal bars\n const rechartsLayout = layout === 'horizontal' ? 'vertical' : 'horizontal'\n const stackId = groupMode === 'stacked' ? 'stack' : undefined\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"bar-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n data={data}\n layout={rechartsLayout}\n margin={margin}\n barCategoryGap={barCategoryGap}\n barGap={barGap}\n {...chartProps}\n >\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 {rechartsLayout === 'horizontal' ? (\n <>\n {axisBottom !== null && (\n <XAxis\n dataKey={indexBy}\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={categoryTick}\n {...axisBottom}\n />\n )}\n {axisLeft !== null && (\n <YAxis\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={numberTick}\n {...axisLeft}\n />\n )}\n </>\n ) : (\n <>\n {axisLeft !== null && (\n <YAxis\n dataKey={indexBy}\n type=\"category\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={categoryTick}\n {...axisLeft}\n />\n )}\n {axisBottom !== null && (\n <XAxis\n type=\"number\"\n tick={axisTickStyle}\n tickLine={false}\n axisLine={false}\n tickMargin={12}\n tickFormatter={numberTick}\n {...axisBottom}\n />\n )}\n </>\n )}\n\n <Tooltip\n cursor={{ fill: 'hsl(0 0% 50% / 0.05)' }}\n content={<ChartTooltip tooltipStyle={tooltipStyle} formatter={tooltipFormatter} locale={locale} />}\n />\n\n {keys.map((key, i) => (\n <Bar\n key={key}\n dataKey={key}\n fill={chartColors[i % chartColors.length]}\n radius={radius}\n stackId={stackId}\n label={enableLabel ? { position: 'top', style: axisTickStyle } : false}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoBarChart.displayName = 'PartoBarChart'\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/social-platform-badge.tsx","../src/components/ui/bot-detection-meter.tsx","../src/components/ui/page-card.tsx"],"names":["React2","jsx","jsxs","React3"],"mappings":"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","file":"chunk-NEML6RCV.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nexport type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads'\n\nexport interface SocialPlatformBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The social media platform to display */\n platform: SocialPlatform\n /** Size of the badge */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Show the platform name label */\n showLabel?: boolean\n /** Visual style of the badge */\n variant?: 'flat' | 'badge'\n}\n\nconst PLATFORM_META: Record<\n SocialPlatform,\n { label: string; icon: React.FC<{ className?: string; style?: React.CSSProperties }> }\n> = {\n instagram: {\n label: 'Instagram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\" />\n </svg>\n ),\n },\n twitter: {\n label: 'X',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.737-8.835L1.254 2.25H8.08l4.259 5.63 5.905-5.63zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n ),\n },\n tiktok: {\n label: 'TikTok',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.16 8.16 0 004.77 1.52V6.75a4.85 4.85 0 01-1-.06z\" />\n </svg>\n ),\n },\n youtube: {\n label: 'YouTube',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n ),\n },\n linkedin: {\n label: 'LinkedIn',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n ),\n },\n telegram: {\n label: 'Telegram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M11.944 0A12 12 0 000 12a12 12 0 0012 12 12 12 0 0012-12A12 12 0 0012 0a12 12 0 00-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 01.171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\" />\n </svg>\n ),\n },\n threads: {\n label: 'Threads',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.868 1.205 8.617.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.749-1.752-2.98-.065-1.19.388-2.285 1.277-3.086.84-.754 2.02-1.164 3.43-1.19.954-.018 1.858.09 2.695.322-.082-.858-.372-1.502-.861-1.903-.529-.434-1.32-.658-2.332-.67-.884.01-1.63.23-2.22.65l-1.11-1.75c.97-.625 2.18-.95 3.6-.97h.022c1.63.02 2.976.497 3.898 1.385.955.92 1.444 2.25 1.51 3.95.23.073.46.149.682.232 1.69.64 2.847 1.635 3.406 2.946.859 2.002.86 5.139-1.773 7.674-1.797 1.742-3.993 2.525-6.935 2.545zm.098-10.02c-.745.01-1.377.186-1.882.523-.443.298-.706.733-.67 1.215.03.564.342 1.017.876 1.275.516.25 1.087.299 1.58.127.684-.24 1.34-.93 1.614-2.366a9.68 9.68 0 00-1.518-.774z\" />\n </svg>\n ),\n },\n}\n\nconst socialPlatformBadgeVariants = cva('inline-flex items-center font-medium transition-colors duration-150', {\n variants: {\n size: {\n xs: 'gap-1',\n sm: 'gap-1.5',\n md: 'gap-1.5',\n lg: 'gap-2',\n },\n variant: {\n flat: '',\n badge: 'border border-border bg-surface-100',\n },\n },\n compoundVariants: [\n { variant: 'badge', size: 'xs', className: 'px-1.5 py-0.5 rounded' },\n { variant: 'badge', size: 'sm', className: 'px-2 py-1 rounded' },\n { variant: 'badge', size: 'md', className: 'px-2.5 py-1 rounded-md' },\n { variant: 'badge', size: 'lg', className: 'px-3 py-1.5 rounded-md' },\n ],\n defaultVariants: { size: 'sm', variant: 'flat' },\n})\n\n/** Size-specific classes for child elements (icon, text) */\nconst SIZE_CHILD_CLASSES = {\n xs: { icon: 'size-3', text: 'text-xs' },\n sm: { icon: 'size-4', text: 'text-xs' },\n md: { icon: 'size-5', text: 'text-sm' },\n lg: { icon: 'size-6', text: 'text-base' },\n}\n\nconst SocialPlatformBadge = React.forwardRef<HTMLSpanElement, SocialPlatformBadgeProps>(\n ({ className, platform, size = 'sm', showLabel = false, variant = 'flat', style, ...props }, ref) => {\n const meta = PLATFORM_META[platform]\n const Icon = meta.icon\n const sizeClasses = SIZE_CHILD_CLASSES[size]\n\n return (\n <span\n ref={ref}\n data-slot=\"social-platform-badge\"\n className={cn(socialPlatformBadgeVariants({ size, variant }), className)}\n style={style}\n {...props}\n >\n <Icon className={cn(sizeClasses.icon, 'shrink-0')} style={{ color: `var(--social-platform-${platform})` }} />\n {showLabel && <span className={cn(sizeClasses.text, 'text-foreground-light')}>{meta.label}</span>}\n </span>\n )\n }\n)\n\nSocialPlatformBadge.displayName = 'SocialPlatformBadge'\n\nexport { SocialPlatformBadge, socialPlatformBadgeVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\n\nexport type BotDetectionKey = 'real' | 'suspicious' | 'bot'\n\nexport interface BotDetectionData {\n /** Confirmed real / human accounts */\n real: number\n /** Suspicious — insufficient signal, possibly bot */\n suspicious: number\n /** Confirmed bot / automated */\n bot: number\n}\n\nexport interface BotDetectionMeterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Counts — auto-normalised to percentages that sum to exactly 100 */\n data: BotDetectionData\n /** Display mode @default \"stacked\" */\n variant?: 'stacked' | 'bars' | 'compact'\n /** Show numeric count labels */\n showCounts?: boolean\n /** Show percentage labels @default true */\n showPercent?: boolean\n /** Show the top \"Real-account rate\" summary line (stacked variant only) @default true */\n showSummary?: boolean\n /** Size of the stacked bar or individual bars */\n size?: 'sm' | 'md' | 'lg'\n /** Locale for digits + default labels @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst LABELS: Record<SupportedLocale, Record<BotDetectionKey | 'summary', string>> = {\n fa: { real: 'واقعی', suspicious: 'مشکوک', bot: 'بات', summary: 'نرخ حساب‌های واقعی' },\n ar: { real: 'حقيقي', suspicious: 'مشبوه', bot: 'روبوت', summary: 'معدل الحسابات الحقيقية' },\n en: { real: 'Real', suspicious: 'Suspicious', bot: 'Bot', summary: 'Real-account rate' },\n}\n\nconst SEGMENT_STYLES: Record<BotDetectionKey, { bar: string; text: string; bg: string; dot: string }> = {\n real: {\n bar: 'bg-[hsl(var(--sentiment-positive))]',\n text: 'text-[hsl(var(--sentiment-positive))]',\n bg: 'bg-[hsl(var(--sentiment-positive)/0.12)]',\n dot: 'bg-[hsl(var(--sentiment-positive))]',\n },\n suspicious: {\n bar: 'bg-[hsl(var(--warning-default))]',\n text: 'text-[hsl(var(--warning-default))]',\n bg: 'bg-[hsl(var(--warning-default)/0.12)]',\n dot: 'bg-[hsl(var(--warning-default))]',\n },\n bot: {\n bar: 'bg-[hsl(var(--destructive-default))]',\n text: 'text-[hsl(var(--destructive-default))]',\n bg: 'bg-[hsl(var(--destructive-default)/0.12)]',\n dot: 'bg-[hsl(var(--destructive-default))]',\n },\n}\n\nconst SEGMENT_ORDER: BotDetectionKey[] = ['real', 'suspicious', 'bot']\n\nfunction calcPercents(data: BotDetectionData): Record<BotDetectionKey, number> {\n const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0)\n if (total === 0) return { real: 0, suspicious: 0, bot: 0 }\n\n // Largest remainder method — guarantees percentages sum to exactly 100\n const floats = SEGMENT_ORDER.map((k) => ({ k, v: ((data[k] ?? 0) / total) * 100 }))\n const floors = floats.map(({ k, v }) => ({ k, floor: Math.floor(v), rem: v - Math.floor(v) }))\n const remaining = 100 - floors.reduce((s, f) => s + f.floor, 0)\n const sorted = [...floors].sort((a, b) => b.rem - a.rem)\n sorted.slice(0, remaining).forEach((f) => f.floor++)\n\n const result: Record<BotDetectionKey, number> = { real: 0, suspicious: 0, bot: 0 }\n sorted.forEach(({ k, floor }) => (result[k] = floor))\n return result\n}\n\nconst BAR_HEIGHT: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'h-1.5',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst BotDetectionMeter = React.forwardRef<HTMLDivElement, BotDetectionMeterProps>(\n (\n {\n className,\n data,\n variant = 'stacked',\n showCounts = false,\n showPercent = true,\n showSummary = true,\n size = 'md',\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const labels = LABELS[locale]\n const percents = calcPercents(data)\n const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0)\n\n const fmt = (n: number) => convertToLocalNumbers(n, locale)\n\n if (variant === 'compact') {\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"compact\"\n className={cn('flex items-center gap-2 text-xs', className)}\n {...props}\n >\n {SEGMENT_ORDER.map((k) => {\n const value = showCounts ? (data[k] ?? 0) : percents[k]\n return (\n <span key={k} className=\"inline-flex items-center gap-1\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n <span className=\"text-foreground-lighter\">{labels[k]}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES[k].text)}>\n {fmt(value)}\n {!showCounts && showPercent && '٪'}\n </span>\n </span>\n )\n })}\n </div>\n )\n }\n\n if (variant === 'bars') {\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"bars\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n {SEGMENT_ORDER.map((k) => (\n <div key={k} className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"inline-flex items-center gap-1.5 text-foreground\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n {labels[k]}\n </span>\n <span className=\"tabular-nums text-foreground-lighter\">\n {showCounts && <span className=\"me-2\">{fmt(data[k] ?? 0)}</span>}\n {showPercent && (\n <span className={cn('font-semibold', SEGMENT_STYLES[k].text)}>{fmt(percents[k])}٪</span>\n )}\n </span>\n </div>\n <div className={cn('w-full rounded-full overflow-hidden', SEGMENT_STYLES[k].bg, BAR_HEIGHT[size])}>\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', SEGMENT_STYLES[k].bar)}\n style={{ width: `${percents[k]}%` }}\n role=\"progressbar\"\n aria-valuenow={percents[k]}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${labels[k]}: ${fmt(percents[k])}٪`}\n />\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // stacked (default)\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"stacked\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n {showSummary && (\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-foreground-lighter\">{labels.summary}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES.real.text)}>\n {fmt(percents.real)}٪\n {showCounts && total > 0 && (\n <span className=\"ms-1 font-normal text-foreground-lighter\">\n ({fmt(data.real)} / {fmt(total)})\n </span>\n )}\n </span>\n </div>\n )}\n <div\n className={cn('w-full rounded-full overflow-hidden bg-surface-200 flex', BAR_HEIGHT[size])}\n role=\"group\"\n aria-label={labels.summary}\n >\n {SEGMENT_ORDER.map((k) => {\n if (percents[k] === 0) return null\n return (\n <div\n key={k}\n className={cn('h-full transition-[width] duration-300', SEGMENT_STYLES[k].bar)}\n style={{ width: `${percents[k]}%` }}\n role=\"progressbar\"\n aria-valuenow={percents[k]}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${labels[k]}: ${fmt(percents[k])}٪`}\n />\n )\n })}\n </div>\n <div className=\"flex items-center gap-4 text-xs\">\n {SEGMENT_ORDER.map((k) => (\n <span key={k} className=\"inline-flex items-center gap-1.5\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n <span className=\"text-foreground-lighter\">{labels[k]}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES[k].text)}>\n {showCounts ? fmt(data[k] ?? 0) : `${fmt(percents[k])}٪`}\n </span>\n </span>\n ))}\n </div>\n </div>\n )\n }\n)\nBotDetectionMeter.displayName = 'BotDetectionMeter'\n\nexport { BotDetectionMeter }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { StatusBadge } from './status-badge'\nimport { SocialPlatformBadge, type SocialPlatform } from './social-platform-badge'\nimport { Sparkline } from './sparkline'\nimport { BotDetectionMeter, type BotDetectionData } from './bot-detection-meter'\nimport type { StatusKey } from '@/lib/i18n'\n\n/**\n * PageCard (government-flavor) — tracked-account tile for افکارسنجی pages\n * dashboards. Composes: avatar + handle + platform badge, status (healthy/\n * degrading/at-risk via StatusKey), follower trend sparkline, engagement\n * stats, content-type mix, bot-detection percentages.\n *\n * Distinct from `ProfileCard` which is influencer-flavored (focus on\n * engagement tier, follower count, avatar). PageCard is for **tracked\n * accounts** in monitoring — health and trust signals matter most.\n */\n\nexport interface PageCardContentMix {\n /** Photo posts in window (count or %) */\n photo?: number\n /** Video posts in window */\n video?: number\n /** Carousel posts */\n carousel?: number\n /** Story / reel count */\n story?: number\n}\n\nexport interface PageCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Account handle / display name (e.g., \"@news_agency\") */\n handle: React.ReactNode\n /** Optional secondary subtitle (e.g., page category) */\n subtitle?: React.ReactNode\n /** Avatar URL */\n avatarSrc?: string\n /** Platform — drives the platform badge */\n platform?: SocialPlatform\n /** Operational status (healthy/degrading/at-risk) — uses StatusKey */\n status?: StatusKey\n /** Total followers (current snapshot) */\n followers?: number\n /** Follower-trend sparkline values */\n followerTrend?: number[]\n /** Engagement rate (%) */\n engagementRate?: number\n /** Posts per week (recent average) */\n postsPerWeek?: number\n /** Content-type mix (counts or percents) */\n contentMix?: PageCardContentMix\n /** Bot-detection breakdown (real / suspicious / bot) */\n botDetection?: BotDetectionData\n /** Make the entire card clickable */\n interactive?: boolean\n /** Locale @default 'fa' */\n locale?: SupportedLocale\n}\n\nfunction formatBig(n: number, locale: SupportedLocale): string {\n if (n >= 1_000_000) return `${convertToLocalNumbers((n / 1_000_000).toFixed(1), locale)}M`\n if (n >= 1_000) return `${convertToLocalNumbers((n / 1_000).toFixed(1), locale)}K`\n return convertToLocalNumbers(n, locale)\n}\n\nconst PageCard = React.forwardRef<HTMLDivElement, PageCardProps>(\n (\n {\n className,\n handle,\n subtitle,\n avatarSrc,\n platform,\n status,\n followers,\n followerTrend,\n engagementRate,\n postsPerWeek,\n contentMix,\n botDetection,\n interactive = false,\n locale = 'fa',\n onClick,\n ...props\n },\n ref\n ) => {\n const isClickable = interactive || !!onClick\n const totalContent =\n contentMix &&\n (contentMix.photo ?? 0) + (contentMix.video ?? 0) + (contentMix.carousel ?? 0) + (contentMix.story ?? 0)\n\n return (\n <div\n ref={ref}\n data-slot=\"page-card\"\n data-status={status}\n role={isClickable ? 'button' : 'article'}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n isClickable\n ? (e) => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target === e.currentTarget) {\n e.preventDefault()\n ;(e.currentTarget as HTMLDivElement).click()\n }\n }\n : undefined\n }\n className={cn(\n 'flex flex-col gap-3 rounded-lg border border-border bg-background p-4 transition-colors',\n isClickable &&\n 'cursor-pointer hover:border-strong hover:bg-surface-100/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className\n )}\n {...props}\n >\n {/* Identity row */}\n <div className=\"flex items-center gap-3\">\n {avatarSrc ? (\n <img\n src={avatarSrc}\n alt=\"\"\n className=\"size-10 rounded-full object-cover object-center shrink-0 border border-border\"\n />\n ) : (\n <div className=\"size-10 rounded-full bg-surface-200 shrink-0\" aria-hidden=\"true\" />\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"text-sm font-semibold text-foreground truncate\">{handle}</span>\n {platform && <SocialPlatformBadge platform={platform} size=\"xs\" />}\n {status && <StatusBadge status={status} size=\"sm\" animated locale={locale} />}\n </div>\n {subtitle && <p className=\"text-xs text-foreground-lighter truncate\">{subtitle}</p>}\n </div>\n </div>\n\n {/* Stats row — followers + trend + engagement */}\n {(typeof followers === 'number' || followerTrend || typeof engagementRate === 'number') && (\n <div className=\"grid grid-cols-3 gap-3 text-xs\">\n {typeof followers === 'number' && (\n <div>\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'فالوور' : locale === 'ar' ? 'متابعون' : 'Followers'}\n </div>\n <div className=\"text-base font-semibold tabular-nums text-foreground\">\n {formatBig(followers, locale)}\n </div>\n </div>\n )}\n {followerTrend && followerTrend.length > 0 && (\n <div className=\"flex flex-col\">\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'روند' : locale === 'ar' ? 'الاتجاه' : 'Trend'}\n </div>\n <div className=\"mt-1\">\n <Sparkline data={followerTrend} variant=\"line\" width={80} height={24} />\n </div>\n </div>\n )}\n {typeof engagementRate === 'number' && (\n <div>\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'نرخ تعامل' : locale === 'ar' ? 'معدل التفاعل' : 'Engagement'}\n </div>\n <div className=\"text-base font-semibold tabular-nums text-foreground\">\n {convertToLocalNumbers(engagementRate.toFixed(1), locale)}\n {locale === 'en' ? '%' : '٪'}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Content mix bar (photo/video/carousel/story) */}\n {contentMix && totalContent && totalContent > 0 && (\n <div className=\"space-y-1\">\n <div className=\"text-2xs text-foreground-lighter\">\n {locale === 'fa' ? 'ترکیب محتوا' : locale === 'ar' ? 'مزيج المحتوى' : 'Content mix'}\n </div>\n <div className=\"flex h-1.5 w-full overflow-hidden rounded-full bg-surface-200\">\n {contentMix.photo ? (\n <span\n style={{\n width: `${(contentMix.photo / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-1))',\n }}\n aria-label={`photo ${contentMix.photo}`}\n />\n ) : null}\n {contentMix.video ? (\n <span\n style={{\n width: `${(contentMix.video / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-2))',\n }}\n aria-label={`video ${contentMix.video}`}\n />\n ) : null}\n {contentMix.carousel ? (\n <span\n style={{\n width: `${(contentMix.carousel / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-3))',\n }}\n aria-label={`carousel ${contentMix.carousel}`}\n />\n ) : null}\n {contentMix.story ? (\n <span\n style={{\n width: `${(contentMix.story / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-4))',\n }}\n aria-label={`story ${contentMix.story}`}\n />\n ) : null}\n </div>\n </div>\n )}\n\n {/* Bot detection */}\n {botDetection && (\n <div data-slot=\"page-card-bot\">\n <BotDetectionMeter data={botDetection} variant=\"compact\" size=\"sm\" locale={locale} />\n </div>\n )}\n\n {typeof postsPerWeek === 'number' && (\n <div className=\"text-2xs text-foreground-lighter pt-1 border-t border-border\">\n {locale === 'fa'\n ? `میانگین ${convertToLocalNumbers(postsPerWeek.toFixed(1), 'fa')} پست در هفته`\n : locale === 'ar'\n ? `متوسط ${convertToLocalNumbers(postsPerWeek.toFixed(1), 'ar')} منشور في الأسبوع`\n : `Avg ${postsPerWeek.toFixed(1)} posts/week`}\n </div>\n )}\n </div>\n )\n }\n)\nPageCard.displayName = 'PageCard'\n\nexport { PageCard }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/charts/PartoPieChart.tsx"],"names":["jsx","Sector","CHART_FONT_FAMILY","React","PartoPieChart","useChartTheme","ChartLoadingSkeleton","ChartContainer","ResponsiveContainer","jsxs","PieChart","Pie","Cell","Tooltip","ChartTooltip"],"mappings":"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","file":"chunk-OEVMKFFL.cjs","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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/social-platform-badge.tsx","../src/components/ui/bot-detection-meter.tsx","../src/components/ui/page-card.tsx"],"names":["jsx","cva","React","jsxs","cn","React2","convertToLocalNumbers","React3","StatusBadge","Sparkline"],"mappings":"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","file":"chunk-P5XHPNJG.cjs","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nexport type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads'\n\nexport interface SocialPlatformBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The social media platform to display */\n platform: SocialPlatform\n /** Size of the badge */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Show the platform name label */\n showLabel?: boolean\n /** Visual style of the badge */\n variant?: 'flat' | 'badge'\n}\n\nconst PLATFORM_META: Record<\n SocialPlatform,\n { label: string; icon: React.FC<{ className?: string; style?: React.CSSProperties }> }\n> = {\n instagram: {\n label: 'Instagram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\" />\n </svg>\n ),\n },\n twitter: {\n label: 'X',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.737-8.835L1.254 2.25H8.08l4.259 5.63 5.905-5.63zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n ),\n },\n tiktok: {\n label: 'TikTok',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1V9.01a6.33 6.33 0 00-.79-.05 6.34 6.34 0 00-6.34 6.34 6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.33-6.34V8.69a8.16 8.16 0 004.77 1.52V6.75a4.85 4.85 0 01-1-.06z\" />\n </svg>\n ),\n },\n youtube: {\n label: 'YouTube',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M23.498 6.186a3.016 3.016 0 00-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 00.502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 002.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 002.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n ),\n },\n linkedin: {\n label: 'LinkedIn',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n ),\n },\n telegram: {\n label: 'Telegram',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M11.944 0A12 12 0 000 12a12 12 0 0012 12 12 12 0 0012-12A12 12 0 0012 0a12 12 0 00-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 01.171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\" />\n </svg>\n ),\n },\n threads: {\n label: 'Threads',\n icon: ({ className }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.868 1.205 8.617.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.749-1.752-2.98-.065-1.19.388-2.285 1.277-3.086.84-.754 2.02-1.164 3.43-1.19.954-.018 1.858.09 2.695.322-.082-.858-.372-1.502-.861-1.903-.529-.434-1.32-.658-2.332-.67-.884.01-1.63.23-2.22.65l-1.11-1.75c.97-.625 2.18-.95 3.6-.97h.022c1.63.02 2.976.497 3.898 1.385.955.92 1.444 2.25 1.51 3.95.23.073.46.149.682.232 1.69.64 2.847 1.635 3.406 2.946.859 2.002.86 5.139-1.773 7.674-1.797 1.742-3.993 2.525-6.935 2.545zm.098-10.02c-.745.01-1.377.186-1.882.523-.443.298-.706.733-.67 1.215.03.564.342 1.017.876 1.275.516.25 1.087.299 1.58.127.684-.24 1.34-.93 1.614-2.366a9.68 9.68 0 00-1.518-.774z\" />\n </svg>\n ),\n },\n}\n\nconst socialPlatformBadgeVariants = cva('inline-flex items-center font-medium transition-colors duration-150', {\n variants: {\n size: {\n xs: 'gap-1',\n sm: 'gap-1.5',\n md: 'gap-1.5',\n lg: 'gap-2',\n },\n variant: {\n flat: '',\n badge: 'border border-border bg-surface-100',\n },\n },\n compoundVariants: [\n { variant: 'badge', size: 'xs', className: 'px-1.5 py-0.5 rounded' },\n { variant: 'badge', size: 'sm', className: 'px-2 py-1 rounded' },\n { variant: 'badge', size: 'md', className: 'px-2.5 py-1 rounded-md' },\n { variant: 'badge', size: 'lg', className: 'px-3 py-1.5 rounded-md' },\n ],\n defaultVariants: { size: 'sm', variant: 'flat' },\n})\n\n/** Size-specific classes for child elements (icon, text) */\nconst SIZE_CHILD_CLASSES = {\n xs: { icon: 'size-3', text: 'text-xs' },\n sm: { icon: 'size-4', text: 'text-xs' },\n md: { icon: 'size-5', text: 'text-sm' },\n lg: { icon: 'size-6', text: 'text-base' },\n}\n\nconst SocialPlatformBadge = React.forwardRef<HTMLSpanElement, SocialPlatformBadgeProps>(\n ({ className, platform, size = 'sm', showLabel = false, variant = 'flat', style, ...props }, ref) => {\n const meta = PLATFORM_META[platform]\n const Icon = meta.icon\n const sizeClasses = SIZE_CHILD_CLASSES[size]\n\n return (\n <span\n ref={ref}\n data-slot=\"social-platform-badge\"\n className={cn(socialPlatformBadgeVariants({ size, variant }), className)}\n style={style}\n {...props}\n >\n <Icon className={cn(sizeClasses.icon, 'shrink-0')} style={{ color: `var(--social-platform-${platform})` }} />\n {showLabel && <span className={cn(sizeClasses.text, 'text-foreground-light')}>{meta.label}</span>}\n </span>\n )\n }\n)\n\nSocialPlatformBadge.displayName = 'SocialPlatformBadge'\n\nexport { SocialPlatformBadge, socialPlatformBadgeVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\n\nexport type BotDetectionKey = 'real' | 'suspicious' | 'bot'\n\nexport interface BotDetectionData {\n /** Confirmed real / human accounts */\n real: number\n /** Suspicious — insufficient signal, possibly bot */\n suspicious: number\n /** Confirmed bot / automated */\n bot: number\n}\n\nexport interface BotDetectionMeterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Counts — auto-normalised to percentages that sum to exactly 100 */\n data: BotDetectionData\n /** Display mode @default \"stacked\" */\n variant?: 'stacked' | 'bars' | 'compact'\n /** Show numeric count labels */\n showCounts?: boolean\n /** Show percentage labels @default true */\n showPercent?: boolean\n /** Show the top \"Real-account rate\" summary line (stacked variant only) @default true */\n showSummary?: boolean\n /** Size of the stacked bar or individual bars */\n size?: 'sm' | 'md' | 'lg'\n /** Locale for digits + default labels @default \"fa\" */\n locale?: SupportedLocale\n}\n\nconst LABELS: Record<SupportedLocale, Record<BotDetectionKey | 'summary', string>> = {\n fa: { real: 'واقعی', suspicious: 'مشکوک', bot: 'بات', summary: 'نرخ حساب‌های واقعی' },\n ar: { real: 'حقيقي', suspicious: 'مشبوه', bot: 'روبوت', summary: 'معدل الحسابات الحقيقية' },\n en: { real: 'Real', suspicious: 'Suspicious', bot: 'Bot', summary: 'Real-account rate' },\n}\n\nconst SEGMENT_STYLES: Record<BotDetectionKey, { bar: string; text: string; bg: string; dot: string }> = {\n real: {\n bar: 'bg-[hsl(var(--sentiment-positive))]',\n text: 'text-[hsl(var(--sentiment-positive))]',\n bg: 'bg-[hsl(var(--sentiment-positive)/0.12)]',\n dot: 'bg-[hsl(var(--sentiment-positive))]',\n },\n suspicious: {\n bar: 'bg-[hsl(var(--warning-default))]',\n text: 'text-[hsl(var(--warning-default))]',\n bg: 'bg-[hsl(var(--warning-default)/0.12)]',\n dot: 'bg-[hsl(var(--warning-default))]',\n },\n bot: {\n bar: 'bg-[hsl(var(--destructive-default))]',\n text: 'text-[hsl(var(--destructive-default))]',\n bg: 'bg-[hsl(var(--destructive-default)/0.12)]',\n dot: 'bg-[hsl(var(--destructive-default))]',\n },\n}\n\nconst SEGMENT_ORDER: BotDetectionKey[] = ['real', 'suspicious', 'bot']\n\nfunction calcPercents(data: BotDetectionData): Record<BotDetectionKey, number> {\n const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0)\n if (total === 0) return { real: 0, suspicious: 0, bot: 0 }\n\n // Largest remainder method — guarantees percentages sum to exactly 100\n const floats = SEGMENT_ORDER.map((k) => ({ k, v: ((data[k] ?? 0) / total) * 100 }))\n const floors = floats.map(({ k, v }) => ({ k, floor: Math.floor(v), rem: v - Math.floor(v) }))\n const remaining = 100 - floors.reduce((s, f) => s + f.floor, 0)\n const sorted = [...floors].sort((a, b) => b.rem - a.rem)\n sorted.slice(0, remaining).forEach((f) => f.floor++)\n\n const result: Record<BotDetectionKey, number> = { real: 0, suspicious: 0, bot: 0 }\n sorted.forEach(({ k, floor }) => (result[k] = floor))\n return result\n}\n\nconst BAR_HEIGHT: Record<'sm' | 'md' | 'lg', string> = {\n sm: 'h-1.5',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst BotDetectionMeter = React.forwardRef<HTMLDivElement, BotDetectionMeterProps>(\n (\n {\n className,\n data,\n variant = 'stacked',\n showCounts = false,\n showPercent = true,\n showSummary = true,\n size = 'md',\n locale = 'fa',\n ...props\n },\n ref\n ) => {\n const labels = LABELS[locale]\n const percents = calcPercents(data)\n const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0)\n\n const fmt = (n: number) => convertToLocalNumbers(n, locale)\n\n if (variant === 'compact') {\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"compact\"\n className={cn('flex items-center gap-2 text-xs', className)}\n {...props}\n >\n {SEGMENT_ORDER.map((k) => {\n const value = showCounts ? (data[k] ?? 0) : percents[k]\n return (\n <span key={k} className=\"inline-flex items-center gap-1\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n <span className=\"text-foreground-lighter\">{labels[k]}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES[k].text)}>\n {fmt(value)}\n {!showCounts && showPercent && '٪'}\n </span>\n </span>\n )\n })}\n </div>\n )\n }\n\n if (variant === 'bars') {\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"bars\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n {SEGMENT_ORDER.map((k) => (\n <div key={k} className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"inline-flex items-center gap-1.5 text-foreground\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n {labels[k]}\n </span>\n <span className=\"tabular-nums text-foreground-lighter\">\n {showCounts && <span className=\"me-2\">{fmt(data[k] ?? 0)}</span>}\n {showPercent && (\n <span className={cn('font-semibold', SEGMENT_STYLES[k].text)}>{fmt(percents[k])}٪</span>\n )}\n </span>\n </div>\n <div className={cn('w-full rounded-full overflow-hidden', SEGMENT_STYLES[k].bg, BAR_HEIGHT[size])}>\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', SEGMENT_STYLES[k].bar)}\n style={{ width: `${percents[k]}%` }}\n role=\"progressbar\"\n aria-valuenow={percents[k]}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${labels[k]}: ${fmt(percents[k])}٪`}\n />\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // stacked (default)\n return (\n <div\n ref={ref}\n data-slot=\"bot-detection-meter\"\n data-variant=\"stacked\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n {showSummary && (\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-foreground-lighter\">{labels.summary}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES.real.text)}>\n {fmt(percents.real)}٪\n {showCounts && total > 0 && (\n <span className=\"ms-1 font-normal text-foreground-lighter\">\n ({fmt(data.real)} / {fmt(total)})\n </span>\n )}\n </span>\n </div>\n )}\n <div\n className={cn('w-full rounded-full overflow-hidden bg-surface-200 flex', BAR_HEIGHT[size])}\n role=\"group\"\n aria-label={labels.summary}\n >\n {SEGMENT_ORDER.map((k) => {\n if (percents[k] === 0) return null\n return (\n <div\n key={k}\n className={cn('h-full transition-[width] duration-300', SEGMENT_STYLES[k].bar)}\n style={{ width: `${percents[k]}%` }}\n role=\"progressbar\"\n aria-valuenow={percents[k]}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`${labels[k]}: ${fmt(percents[k])}٪`}\n />\n )\n })}\n </div>\n <div className=\"flex items-center gap-4 text-xs\">\n {SEGMENT_ORDER.map((k) => (\n <span key={k} className=\"inline-flex items-center gap-1.5\">\n <span className={cn('size-2 rounded-full', SEGMENT_STYLES[k].dot)} aria-hidden=\"true\" />\n <span className=\"text-foreground-lighter\">{labels[k]}</span>\n <span className={cn('font-semibold tabular-nums', SEGMENT_STYLES[k].text)}>\n {showCounts ? fmt(data[k] ?? 0) : `${fmt(percents[k])}٪`}\n </span>\n </span>\n ))}\n </div>\n </div>\n )\n }\n)\nBotDetectionMeter.displayName = 'BotDetectionMeter'\n\nexport { BotDetectionMeter }\n","'use client'\n\nimport * as React from 'react'\nimport { cn, convertToLocalNumbers, type SupportedLocale } from '@/lib/utils'\nimport { StatusBadge } from './status-badge'\nimport { SocialPlatformBadge, type SocialPlatform } from './social-platform-badge'\nimport { Sparkline } from './sparkline'\nimport { BotDetectionMeter, type BotDetectionData } from './bot-detection-meter'\nimport type { StatusKey } from '@/lib/i18n'\n\n/**\n * PageCard (government-flavor) — tracked-account tile for افکارسنجی pages\n * dashboards. Composes: avatar + handle + platform badge, status (healthy/\n * degrading/at-risk via StatusKey), follower trend sparkline, engagement\n * stats, content-type mix, bot-detection percentages.\n *\n * Distinct from `ProfileCard` which is influencer-flavored (focus on\n * engagement tier, follower count, avatar). PageCard is for **tracked\n * accounts** in monitoring — health and trust signals matter most.\n */\n\nexport interface PageCardContentMix {\n /** Photo posts in window (count or %) */\n photo?: number\n /** Video posts in window */\n video?: number\n /** Carousel posts */\n carousel?: number\n /** Story / reel count */\n story?: number\n}\n\nexport interface PageCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Account handle / display name (e.g., \"@news_agency\") */\n handle: React.ReactNode\n /** Optional secondary subtitle (e.g., page category) */\n subtitle?: React.ReactNode\n /** Avatar URL */\n avatarSrc?: string\n /** Platform — drives the platform badge */\n platform?: SocialPlatform\n /** Operational status (healthy/degrading/at-risk) — uses StatusKey */\n status?: StatusKey\n /** Total followers (current snapshot) */\n followers?: number\n /** Follower-trend sparkline values */\n followerTrend?: number[]\n /** Engagement rate (%) */\n engagementRate?: number\n /** Posts per week (recent average) */\n postsPerWeek?: number\n /** Content-type mix (counts or percents) */\n contentMix?: PageCardContentMix\n /** Bot-detection breakdown (real / suspicious / bot) */\n botDetection?: BotDetectionData\n /** Make the entire card clickable */\n interactive?: boolean\n /** Locale @default 'fa' */\n locale?: SupportedLocale\n}\n\nfunction formatBig(n: number, locale: SupportedLocale): string {\n if (n >= 1_000_000) return `${convertToLocalNumbers((n / 1_000_000).toFixed(1), locale)}M`\n if (n >= 1_000) return `${convertToLocalNumbers((n / 1_000).toFixed(1), locale)}K`\n return convertToLocalNumbers(n, locale)\n}\n\nconst PageCard = React.forwardRef<HTMLDivElement, PageCardProps>(\n (\n {\n className,\n handle,\n subtitle,\n avatarSrc,\n platform,\n status,\n followers,\n followerTrend,\n engagementRate,\n postsPerWeek,\n contentMix,\n botDetection,\n interactive = false,\n locale = 'fa',\n onClick,\n ...props\n },\n ref\n ) => {\n const isClickable = interactive || !!onClick\n const totalContent =\n contentMix &&\n (contentMix.photo ?? 0) + (contentMix.video ?? 0) + (contentMix.carousel ?? 0) + (contentMix.story ?? 0)\n\n return (\n <div\n ref={ref}\n data-slot=\"page-card\"\n data-status={status}\n role={isClickable ? 'button' : 'article'}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n isClickable\n ? (e) => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target === e.currentTarget) {\n e.preventDefault()\n ;(e.currentTarget as HTMLDivElement).click()\n }\n }\n : undefined\n }\n className={cn(\n 'flex flex-col gap-3 rounded-lg border border-border bg-background p-4 transition-colors',\n isClickable &&\n 'cursor-pointer hover:border-strong hover:bg-surface-100/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className\n )}\n {...props}\n >\n {/* Identity row */}\n <div className=\"flex items-center gap-3\">\n {avatarSrc ? (\n <img\n src={avatarSrc}\n alt=\"\"\n className=\"size-10 rounded-full object-cover object-center shrink-0 border border-border\"\n />\n ) : (\n <div className=\"size-10 rounded-full bg-surface-200 shrink-0\" aria-hidden=\"true\" />\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"text-sm font-semibold text-foreground truncate\">{handle}</span>\n {platform && <SocialPlatformBadge platform={platform} size=\"xs\" />}\n {status && <StatusBadge status={status} size=\"sm\" animated locale={locale} />}\n </div>\n {subtitle && <p className=\"text-xs text-foreground-lighter truncate\">{subtitle}</p>}\n </div>\n </div>\n\n {/* Stats row — followers + trend + engagement */}\n {(typeof followers === 'number' || followerTrend || typeof engagementRate === 'number') && (\n <div className=\"grid grid-cols-3 gap-3 text-xs\">\n {typeof followers === 'number' && (\n <div>\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'فالوور' : locale === 'ar' ? 'متابعون' : 'Followers'}\n </div>\n <div className=\"text-base font-semibold tabular-nums text-foreground\">\n {formatBig(followers, locale)}\n </div>\n </div>\n )}\n {followerTrend && followerTrend.length > 0 && (\n <div className=\"flex flex-col\">\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'روند' : locale === 'ar' ? 'الاتجاه' : 'Trend'}\n </div>\n <div className=\"mt-1\">\n <Sparkline data={followerTrend} variant=\"line\" width={80} height={24} />\n </div>\n </div>\n )}\n {typeof engagementRate === 'number' && (\n <div>\n <div className=\"text-foreground-lighter\">\n {locale === 'fa' ? 'نرخ تعامل' : locale === 'ar' ? 'معدل التفاعل' : 'Engagement'}\n </div>\n <div className=\"text-base font-semibold tabular-nums text-foreground\">\n {convertToLocalNumbers(engagementRate.toFixed(1), locale)}\n {locale === 'en' ? '%' : '٪'}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Content mix bar (photo/video/carousel/story) */}\n {contentMix && totalContent && totalContent > 0 && (\n <div className=\"space-y-1\">\n <div className=\"text-2xs text-foreground-lighter\">\n {locale === 'fa' ? 'ترکیب محتوا' : locale === 'ar' ? 'مزيج المحتوى' : 'Content mix'}\n </div>\n <div className=\"flex h-1.5 w-full overflow-hidden rounded-full bg-surface-200\">\n {contentMix.photo ? (\n <span\n style={{\n width: `${(contentMix.photo / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-1))',\n }}\n aria-label={`photo ${contentMix.photo}`}\n />\n ) : null}\n {contentMix.video ? (\n <span\n style={{\n width: `${(contentMix.video / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-2))',\n }}\n aria-label={`video ${contentMix.video}`}\n />\n ) : null}\n {contentMix.carousel ? (\n <span\n style={{\n width: `${(contentMix.carousel / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-3))',\n }}\n aria-label={`carousel ${contentMix.carousel}`}\n />\n ) : null}\n {contentMix.story ? (\n <span\n style={{\n width: `${(contentMix.story / totalContent) * 100}%`,\n backgroundColor: 'hsl(var(--chart-4))',\n }}\n aria-label={`story ${contentMix.story}`}\n />\n ) : null}\n </div>\n </div>\n )}\n\n {/* Bot detection */}\n {botDetection && (\n <div data-slot=\"page-card-bot\">\n <BotDetectionMeter data={botDetection} variant=\"compact\" size=\"sm\" locale={locale} />\n </div>\n )}\n\n {typeof postsPerWeek === 'number' && (\n <div className=\"text-2xs text-foreground-lighter pt-1 border-t border-border\">\n {locale === 'fa'\n ? `میانگین ${convertToLocalNumbers(postsPerWeek.toFixed(1), 'fa')} پست در هفته`\n : locale === 'ar'\n ? `متوسط ${convertToLocalNumbers(postsPerWeek.toFixed(1), 'ar')} منشور في الأسبوع`\n : `Avg ${postsPerWeek.toFixed(1)} posts/week`}\n </div>\n )}\n </div>\n )\n }\n)\nPageCard.displayName = 'PageCard'\n\nexport { PageCard }\n"]}
@@ -1,98 +0,0 @@
1
- import { useChartTheme, localeAwareCategoryTick, localeAwareNumberTick, ChartLoadingSkeleton, ChartContainer, ChartTooltip } from './chunk-IQHKJ4SS.js';
2
- import * as React from 'react';
3
- import { ResponsiveContainer, AreaChart, CartesianGrid, XAxis, YAxis, Tooltip, Area } from 'recharts';
4
- import { jsx, jsxs } from 'react/jsx-runtime';
5
-
6
- var PartoAreaChart = React.forwardRef(function PartoAreaChart2({
7
- data,
8
- dataKeys,
9
- xAxisKey = "name",
10
- curve = "monotone",
11
- strokeWidth = 2,
12
- fillOpacity = 0.08,
13
- showDots = false,
14
- enableGridY = true,
15
- enableGridX = false,
16
- margin = { top: 20, right: 20, bottom: 50, left: 50 },
17
- axisBottom,
18
- axisLeft,
19
- tooltipFormatter,
20
- locale = "fa",
21
- className,
22
- isLoading = false,
23
- ariaLabel,
24
- chartProps
25
- }, ref) {
26
- const { chartColors, axisTickStyle, gridStyle, tooltipStyle, crosshairStyle } = useChartTheme();
27
- const defaultXTick = React.useMemo(() => localeAwareCategoryTick(locale), [locale]);
28
- const defaultYTick = React.useMemo(() => localeAwareNumberTick(locale), [locale]);
29
- if (isLoading) {
30
- return /* @__PURE__ */ jsx(ChartLoadingSkeleton, { className });
31
- }
32
- return /* @__PURE__ */ jsx(ChartContainer, { ref, className, dataSlot: "area-chart", ariaLabel, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxs(AreaChart, { data, margin, ...chartProps, children: [
33
- /* @__PURE__ */ jsx("defs", { children: dataKeys.map((key, i) => /* @__PURE__ */ jsxs("linearGradient", { id: `area-gradient-${key}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
34
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: chartColors[i % chartColors.length], stopOpacity: fillOpacity }),
35
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: chartColors[i % chartColors.length], stopOpacity: 0 })
36
- ] }, key)) }),
37
- (enableGridX || enableGridY) && /* @__PURE__ */ jsx(
38
- CartesianGrid,
39
- {
40
- horizontal: enableGridY,
41
- vertical: enableGridX,
42
- stroke: gridStyle.stroke,
43
- strokeDasharray: gridStyle.strokeDasharray,
44
- strokeOpacity: gridStyle.strokeOpacity
45
- }
46
- ),
47
- axisBottom !== null && /* @__PURE__ */ jsx(
48
- XAxis,
49
- {
50
- dataKey: xAxisKey,
51
- tick: axisTickStyle,
52
- tickLine: false,
53
- axisLine: false,
54
- tickMargin: 12,
55
- tickFormatter: defaultXTick,
56
- ...axisBottom
57
- }
58
- ),
59
- axisLeft !== null && /* @__PURE__ */ jsx(
60
- YAxis,
61
- {
62
- tick: axisTickStyle,
63
- tickLine: false,
64
- axisLine: false,
65
- tickMargin: 12,
66
- tickFormatter: defaultYTick,
67
- ...axisLeft
68
- }
69
- ),
70
- /* @__PURE__ */ jsx(
71
- Tooltip,
72
- {
73
- cursor: crosshairStyle,
74
- content: /* @__PURE__ */ jsx(ChartTooltip, { tooltipStyle, formatter: tooltipFormatter, locale })
75
- }
76
- ),
77
- dataKeys.map((key, i) => /* @__PURE__ */ jsx(
78
- Area,
79
- {
80
- type: curve,
81
- dataKey: key,
82
- stroke: chartColors[i % chartColors.length],
83
- strokeWidth,
84
- fill: `url(#area-gradient-${key})`,
85
- dot: showDots,
86
- activeDot: { r: 4, strokeWidth: 2 },
87
- animationDuration: 800,
88
- animationEasing: "ease-out"
89
- },
90
- key
91
- ))
92
- ] }) }) });
93
- });
94
- PartoAreaChart.displayName = "PartoAreaChart";
95
-
96
- export { PartoAreaChart };
97
- //# sourceMappingURL=chunk-QJ7UB2ZQ.js.map
98
- //# sourceMappingURL=chunk-QJ7UB2ZQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/charts/PartoAreaChart.tsx"],"names":["PartoAreaChart"],"mappings":"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","file":"chunk-QJ7UB2ZQ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { AreaChart, Area, 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 PartoAreaChartProps {\n /** Row-oriented data: [{ name: \"فروردین\", series1: 50, series2: 30 }] */\n data: Array<Record<string, any>>\n /** Keys for each area 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 /** Area fill opacity */\n fillOpacity?: 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 AreaChart props */\n chartProps?: Record<string, any>\n}\n\nexport const PartoAreaChart = React.forwardRef<HTMLDivElement, PartoAreaChartProps>(function PartoAreaChart(\n {\n data,\n dataKeys,\n xAxisKey = 'name',\n curve = 'monotone',\n strokeWidth = 2,\n fillOpacity = 0.08,\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=\"area-chart\" ariaLabel={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={margin} {...chartProps}>\n <defs>\n {dataKeys.map((key, i) => (\n <linearGradient key={key} id={`area-gradient-${key}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={chartColors[i % chartColors.length]} stopOpacity={fillOpacity} />\n <stop offset=\"100%\" stopColor={chartColors[i % chartColors.length]} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n\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 <Area\n key={key}\n type={curve}\n dataKey={key}\n stroke={chartColors[i % chartColors.length]}\n strokeWidth={strokeWidth}\n fill={`url(#area-gradient-${key})`}\n dot={showDots}\n activeDot={{ r: 4, strokeWidth: 2 }}\n animationDuration={800}\n animationEasing=\"ease-out\"\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n </ChartContainer>\n )\n})\nPartoAreaChart.displayName = 'PartoAreaChart'\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/button.tsx"],"names":[],"mappings":"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","file":"chunk-RA5KZNG5.js","sourcesContent":["'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\nimport { VariantProps, cva } from 'class-variance-authority'\nimport { Loader2 } from 'lucide-react'\nimport { cloneElement, forwardRef, isValidElement } from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT, type SizeWithLegacy } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>\n\nconst DESTRUCTIVE_VARIANT = `\n text-foreground\n bg-destructive-300 dark:bg-destructive-400 hover:bg-destructive-400 dark:hover:bg-destructive-600\n border-destructive-500 hover:border-destructive\n hover:text-hi-contrast\n data-[state=open]:border-destructive\n data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive-600/80\n`\n\nconst buttonVariants = cva(\n `inline-flex items-center justify-center\n relative\n cursor-pointer\n gap-2\n text-center\n font-normal\n ease-out\n duration-200\n rounded-md\n outline-none\n transition-all\n active:scale-[0.98]\n focus-visible:ring-2\n focus-visible:ring-ring\n focus-visible:ring-offset-2\n border\n disabled:pointer-events-none\n disabled:opacity-50\n [&_svg]:pointer-events-none\n [&_svg]:shrink-0\n `,\n {\n variants: {\n variant: {\n primary: `\n bg-brand-400 dark:bg-brand-500\n hover:bg-brand-300 dark:hover:bg-brand-600\n text-foreground\n border-brand-500/75 dark:border-brand/30\n hover:border-brand-600 dark:hover:border-brand-500\n data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-600/80\n `,\n default: `\n text-foreground\n bg-alternative dark:bg-muted hover:bg-selection\n border-strong hover:border-stronger\n data-[state=open]:bg-selection\n data-[state=open]:border-button-hover\n `,\n secondary: `\n bg-foreground\n text-background hover:text-border-stronger\n focus-visible:text-border-control\n border-foreground-light hover:border-foreground-lighter\n data-[state=open]:border-foreground-lighter\n `,\n outline: `\n text-foreground\n bg-transparent\n border-strong hover:border-foreground-muted\n data-[state=open]:border-stronger\n `,\n dashed: `\n text-foreground\n border\n border-dashed\n border-strong hover:border-stronger\n bg-transparent\n data-[state=open]:border-stronger\n `,\n link: `\n text-brand-600\n border\n border-transparent\n hover:bg-brand-400\n border-opacity-0\n bg-opacity-0\n shadow-none\n data-[state=open]:bg-brand-400\n `,\n text: `\n text-foreground\n hover:bg-surface-300\n shadow-none\n data-[state=open]:bg-surface-300\n border-transparent\n `,\n danger: DESTRUCTIVE_VARIANT,\n warning: `\n text-foreground\n bg-warning-300 dark:bg-warning-400 hover:bg-warning-400 dark:hover:bg-warning-600\n border-warning-500 hover:border-warning\n hover:text-hi-contrast\n data-[state=open]:border-warning\n data-[state=open]:bg-warning-400 dark:data-[state=open]:bg-warning-600/80\n `,\n destructive: DESTRUCTIVE_VARIANT,\n ghost: `\n text-foreground\n hover:bg-surface-100 dark:hover:bg-surface-200\n border-transparent\n `,\n },\n block: {\n true: 'w-full flex items-center justify-center',\n },\n size: {\n ...SIZE_VARIANTS,\n default: SIZE_VARIANTS.sm,\n icon: 'size-9',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed pointer-events-none',\n },\n rounded: {\n true: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\nconst IconContainerVariants = cva('inline-flex items-center justify-center', {\n variants: {\n size: {\n xs: '[&_svg]:size-[14px]',\n sm: '[&_svg]:size-[18px]',\n md: '[&_svg]:size-[20px]',\n lg: '[&_svg]:size-[20px]',\n xl: '[&_svg]:size-[24px]',\n /** @deprecated */ tiny: '[&_svg]:size-[14px]',\n /** @deprecated */ small: '[&_svg]:size-[18px]',\n /** @deprecated */ medium: '[&_svg]:size-[20px]',\n /** @deprecated */ large: '[&_svg]:size-[20px]',\n /** @deprecated */ xlarge: '[&_svg]:size-[24px]',\n default: '[&_svg]:size-[18px]',\n icon: '[&_svg]:size-[18px]',\n },\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-lighter',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n },\n})\n\nexport type LoadingVariantProps = VariantProps<typeof loadingVariants>\nconst loadingVariants = cva('', {\n variants: {\n variant: {\n primary: 'text-brand-600',\n default: 'text-foreground-lighter',\n secondary: 'text-border-muted',\n outline: 'text-foreground-lighter',\n dashed: 'text-foreground-lighter',\n link: 'text-brand-600',\n text: 'text-foreground-muted',\n danger: 'text-destructive-600',\n warning: 'text-warning',\n destructive: 'text-destructive-600',\n ghost: 'text-foreground-lighter',\n },\n loading: {\n default: '',\n true: `animate-spin`,\n },\n },\n})\n\nexport interface ButtonProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>,\n Omit<ButtonVariantProps, 'disabled'>,\n Omit<LoadingVariantProps, 'variant'> {\n asChild?: boolean\n type?: ButtonVariantProps['variant'] | React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n htmlType?: React.ButtonHTMLAttributes<HTMLButtonElement>['type']\n icon?: React.ReactNode\n iconStart?: React.ReactNode\n iconEnd?: React.ReactNode\n /** @deprecated Use iconStart instead */\n iconLeft?: React.ReactNode\n /** @deprecated Use iconEnd instead */\n iconRight?: React.ReactNode\n isLoading?: boolean\n /** @deprecated Use `isLoading` instead */\n loading?: boolean\n block?: boolean\n rounded?: boolean\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n asChild = false,\n variant,\n type,\n size = SIZE_VARIANTS_DEFAULT,\n children,\n isLoading,\n loading,\n block,\n icon,\n iconEnd,\n iconStart,\n iconRight,\n iconLeft,\n htmlType = 'button',\n rounded,\n className,\n ...props\n },\n ref\n ) => {\n if (process.env.NODE_ENV !== 'production') {\n const deprecatedSizes = ['tiny', 'small', 'medium', 'large', 'xlarge']\n if (size && deprecatedSizes.includes(size as string)) {\n console.warn(`[Parto UI] Button: size=\"${size}\" is deprecated. Use xs|sm|md|lg|xl instead.`)\n }\n }\n\n const Comp = asChild ? Slot : 'button'\n const { tabIndex } = props\n\n // Support both 'type' (Supabase style) and 'variant' (shadcn style)\n // If type is provided and it's not a button HTML type, use it as variant\n const buttonVariant =\n type && typeof type === 'string' && !['button', 'submit', 'reset'].includes(type)\n ? (type as ButtonVariantProps['variant'])\n : variant || 'default'\n\n const _loading = isLoading ?? loading\n // Support deprecated iconLeft/iconRight alongside new iconStart/iconEnd\n const resolvedIconStart = icon ?? iconStart ?? iconLeft\n const resolvedIconEnd = iconEnd ?? iconRight\n const showIcon = _loading || resolvedIconStart\n const disabled = _loading === true || props.disabled\n\n // Set default tabIndex for proper Safari focus handling\n // - Explicit tabIndex prop takes precedence\n // - If disabled, default to -1 (unless explicitly set)\n // - Otherwise, default to 0 for keyboard accessibility\n const computedTabIndex = tabIndex !== undefined ? tabIndex : disabled ? -1 : 0\n\n // Normalize size for IconContainerVariants\n const iconSize: SizeWithLegacy | 'default' | 'icon' =\n size === 'default' ? 'sm' : size === 'icon' ? 'sm' : (size ?? 'sm')\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-size={size}\n type={htmlType}\n disabled={disabled}\n aria-busy={_loading || undefined}\n tabIndex={computedTabIndex}\n className={cn(buttonVariants({ variant: buttonVariant, size, disabled, block, rounded }), className)}\n onClick={(e) => {\n // Prevents redirecting if Button is used with a link-based child element\n if (disabled) return e.preventDefault()\n else props?.onClick?.(e)\n }}\n {...props}\n >\n {asChild ? (\n isValidElement(children) ? (\n cloneElement(\n children,\n undefined,\n showIcon &&\n (_loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2 className={cn(loadingVariants({ loading: _loading, variant: buttonVariant }))} />\n </div>\n ) : resolvedIconStart ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconStart}\n </div>\n ) : null),\n (children.props as { children?: React.ReactNode })?.children && (\n <span className=\"inline-flex items-center gap-2 truncate\">\n {(children.props as { children?: React.ReactNode }).children}\n </span>\n ),\n resolvedIconEnd && !_loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconEnd}\n </div>\n )\n )\n ) : null\n ) : (\n <>\n {showIcon &&\n (_loading ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n <Loader2\n aria-hidden=\"true\"\n className={cn(loadingVariants({ loading: _loading, variant: buttonVariant }))}\n />\n <span className=\"sr-only\">در حال بارگذاری...</span>\n </div>\n ) : resolvedIconStart ? (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconStart}\n </div>\n ) : null)}\n {children && <span className=\"inline-flex items-center gap-2 truncate\">{children}</span>}\n {resolvedIconEnd && !_loading && (\n <div className={cn(IconContainerVariants({ size: iconSize, variant: buttonVariant }))}>\n {resolvedIconEnd}\n </div>\n )}\n </>\n )}\n </Comp>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/input.tsx"],"names":["cva","cn","SIZE_VARIANTS","SIZE_VARIANTS_DEFAULT","React","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,IAAM,aAAA,GAAgBA,0BAAA;AAAA,EAC3BC,oBAAA;AAAA,IACE,0QAAA;AAAA,IACA,gCAAA;AAAA,IACA,0LAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,GAAGC;AAAA;AACL,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAMC;AAAA;AACR;AAEJ;AAGO,IAAM,aAAA,GAAgB;AAK7B,IAAM,eAAA,uBAAsB,GAAA,CAAI,CAAC,SAAS,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,UAAU,CAAC,CAAA;AAE7E,IAAM,KAAA,GAAcC,gBAAA,CAAA,UAAA,CAAyC,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,IAAA,GAAO,IAAA,EAAM,GAAA,EAAK,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAErH,EAAA,MAAM,cAAc,GAAA,KAAQ,IAAA,IAAQ,gBAAgB,GAAA,CAAI,IAAI,IAAI,KAAA,GAAQ,MAAA,CAAA;AACxE,EAAA,uBACEC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,GAAA,EAAK,WAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MACJ,WAAWJ,oBAAA,CAAG,aAAA,CAAc,EAAE,IAAA,EAAM,GAAG,SAAS;AAAA;AAAA,GAClD;AAEJ,CAAC;AAED,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-SCGW2BH4.cjs","sourcesContent":["'use client'\n\nimport { VariantProps, cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { SIZE_VARIANTS, SIZE_VARIANTS_DEFAULT } from '@/lib/constants'\nimport { cn } from '@/lib/utils'\n\nexport const inputVariants = cva(\n cn(\n 'flex w-full rounded-md border border-control read-only:border-button bg-foreground/[.026] text-sm text-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-foreground-muted read-only:text-foreground-light',\n 'transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-[invalid=true]:bg-destructive-200 dark:aria-[invalid=true]:bg-destructive/5 aria-[invalid=true]:border-destructive-400 dark:aria-[invalid=true]:border-destructive-default aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus-visible:border-destructive'\n ),\n {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: SIZE_VARIANTS_DEFAULT,\n },\n }\n)\n\n/** @deprecated Use inputVariants instead */\nexport const InputVariants = inputVariants\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {}\n\nconst LTR_INPUT_TYPES = new Set(['email', 'url', 'tel', 'number', 'password'])\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type, size = 'sm', dir, ...props }, ref) => {\n // LTR content types: auto-set dir=\"ltr\" unless caller explicitly overrides\n const resolvedDir = dir ?? (type && LTR_INPUT_TYPES.has(type) ? 'ltr' : undefined)\n return (\n <input\n type={type}\n ref={ref}\n data-slot=\"input\"\n dir={resolvedDir}\n {...props}\n className={cn(inputVariants({ size }), className)}\n />\n )\n})\n\nInput.displayName = 'Input'\n\nexport { Input }\n"]}