@parto-system-design/ui 1.1.9 → 1.1.16

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 (411) hide show
  1. package/dist/components/brand/parto-logo.cjs +130 -0
  2. package/dist/components/brand/parto-logo.cjs.map +1 -0
  3. package/dist/components/brand/parto-logo.d.cts +38 -0
  4. package/dist/components/brand/parto-logo.d.ts +38 -0
  5. package/dist/components/brand/parto-logo.js +108 -0
  6. package/dist/components/brand/parto-logo.js.map +1 -0
  7. package/dist/components/charts/PartoAreaChart.cjs +579 -7
  8. package/dist/components/charts/PartoAreaChart.cjs.map +1 -1
  9. package/dist/components/charts/PartoAreaChart.js +564 -4
  10. package/dist/components/charts/PartoAreaChart.js.map +1 -1
  11. package/dist/components/charts/PartoBarChart.cjs +616 -7
  12. package/dist/components/charts/PartoBarChart.cjs.map +1 -1
  13. package/dist/components/charts/PartoBarChart.js +601 -4
  14. package/dist/components/charts/PartoBarChart.js.map +1 -1
  15. package/dist/components/charts/PartoLineChart.cjs +584 -7
  16. package/dist/components/charts/PartoLineChart.cjs.map +1 -1
  17. package/dist/components/charts/PartoLineChart.js +569 -4
  18. package/dist/components/charts/PartoLineChart.js.map +1 -1
  19. package/dist/components/charts/PartoPieChart.cjs +566 -7
  20. package/dist/components/charts/PartoPieChart.cjs.map +1 -1
  21. package/dist/components/charts/PartoPieChart.js +551 -4
  22. package/dist/components/charts/PartoPieChart.js.map +1 -1
  23. package/dist/components/ui/accordion.cjs +97 -0
  24. package/dist/components/ui/accordion.cjs.map +1 -0
  25. package/dist/components/ui/accordion.d.cts +22 -0
  26. package/dist/components/ui/accordion.d.ts +22 -0
  27. package/dist/components/ui/accordion.js +72 -0
  28. package/dist/components/ui/accordion.js.map +1 -0
  29. package/dist/{chunk-MMC6M35Q.cjs → components/ui/alert-dialog.cjs} +216 -22
  30. package/dist/components/ui/alert-dialog.cjs.map +1 -0
  31. package/dist/components/ui/alert-dialog.d.cts +17 -0
  32. package/dist/components/ui/alert-dialog.d.ts +17 -0
  33. package/dist/{chunk-3QYYPPFJ.js → components/ui/alert-dialog.js} +175 -10
  34. package/dist/components/ui/alert-dialog.js.map +1 -0
  35. package/dist/components/ui/alert-rule-card.cjs +289 -8
  36. package/dist/components/ui/alert-rule-card.cjs.map +1 -1
  37. package/dist/components/ui/alert-rule-card.d.cts +1 -1
  38. package/dist/components/ui/alert-rule-card.d.ts +1 -1
  39. package/dist/components/ui/alert-rule-card.js +271 -4
  40. package/dist/components/ui/alert-rule-card.js.map +1 -1
  41. package/dist/components/ui/alert.cjs +81 -0
  42. package/dist/components/ui/alert.cjs.map +1 -0
  43. package/dist/components/ui/alert.d.cts +11 -0
  44. package/dist/components/ui/alert.d.ts +11 -0
  45. package/dist/components/ui/alert.js +57 -0
  46. package/dist/components/ui/alert.js.map +1 -0
  47. package/dist/components/ui/app-bar.cjs +67 -0
  48. package/dist/components/ui/app-bar.cjs.map +1 -0
  49. package/dist/components/ui/app-bar.d.cts +22 -0
  50. package/dist/components/ui/app-bar.d.ts +22 -0
  51. package/dist/components/ui/app-bar.js +44 -0
  52. package/dist/components/ui/app-bar.js.map +1 -0
  53. package/dist/components/ui/avatar.cjs +66 -14
  54. package/dist/components/ui/avatar.cjs.map +1 -1
  55. package/dist/components/ui/avatar.js +47 -2
  56. package/dist/components/ui/avatar.js.map +1 -1
  57. package/dist/components/ui/badge.cjs +113 -9
  58. package/dist/components/ui/badge.cjs.map +1 -1
  59. package/dist/components/ui/badge.d.cts +1 -1
  60. package/dist/components/ui/badge.d.ts +1 -1
  61. package/dist/components/ui/badge.js +96 -2
  62. package/dist/components/ui/badge.js.map +1 -1
  63. package/dist/components/ui/breadcrumb.cjs +100 -0
  64. package/dist/components/ui/breadcrumb.cjs.map +1 -0
  65. package/dist/components/ui/breadcrumb.d.cts +35 -0
  66. package/dist/components/ui/breadcrumb.d.ts +35 -0
  67. package/dist/components/ui/breadcrumb.js +92 -0
  68. package/dist/components/ui/breadcrumb.js.map +1 -0
  69. package/dist/components/ui/button.cjs +304 -11
  70. package/dist/components/ui/button.cjs.map +1 -1
  71. package/dist/components/ui/button.d.cts +3 -3
  72. package/dist/components/ui/button.d.ts +3 -3
  73. package/dist/components/ui/button.js +306 -3
  74. package/dist/components/ui/button.js.map +1 -1
  75. package/dist/components/ui/calendar.cjs +401 -8
  76. package/dist/components/ui/calendar.cjs.map +1 -1
  77. package/dist/components/ui/calendar.js +404 -4
  78. package/dist/components/ui/calendar.js.map +1 -1
  79. package/dist/components/ui/card.cjs +154 -30
  80. package/dist/components/ui/card.cjs.map +1 -1
  81. package/dist/components/ui/card.js +131 -2
  82. package/dist/components/ui/card.js.map +1 -1
  83. package/dist/{chunk-CAJKSTXX.cjs → components/ui/checkbox.cjs} +10 -5
  84. package/dist/components/ui/checkbox.cjs.map +1 -0
  85. package/dist/components/ui/checkbox.d.cts +6 -0
  86. package/dist/components/ui/checkbox.d.ts +6 -0
  87. package/dist/{chunk-5JJSRGJD.js → components/ui/checkbox.js} +9 -4
  88. package/dist/components/ui/checkbox.js.map +1 -0
  89. package/dist/components/ui/concept-card.cjs +728 -11
  90. package/dist/components/ui/concept-card.cjs.map +1 -1
  91. package/dist/components/ui/concept-card.d.cts +2 -2
  92. package/dist/components/ui/concept-card.d.ts +2 -2
  93. package/dist/components/ui/concept-card.js +710 -7
  94. package/dist/components/ui/concept-card.js.map +1 -1
  95. package/dist/components/ui/data-table.cjs +1553 -10
  96. package/dist/components/ui/data-table.cjs.map +1 -1
  97. package/dist/components/ui/data-table.js +1537 -7
  98. package/dist/components/ui/data-table.js.map +1 -1
  99. package/dist/components/ui/dialog.cjs +119 -42
  100. package/dist/components/ui/dialog.cjs.map +1 -1
  101. package/dist/components/ui/dialog.js +92 -2
  102. package/dist/components/ui/dialog.js.map +1 -1
  103. package/dist/components/ui/dropdown-menu.cjs +268 -0
  104. package/dist/components/ui/dropdown-menu.cjs.map +1 -0
  105. package/dist/components/ui/dropdown-menu.d.cts +73 -0
  106. package/dist/components/ui/dropdown-menu.d.ts +73 -0
  107. package/dist/components/ui/dropdown-menu.js +232 -0
  108. package/dist/components/ui/dropdown-menu.js.map +1 -0
  109. package/dist/components/ui/filter-provider.cjs +70 -13
  110. package/dist/components/ui/filter-provider.cjs.map +1 -1
  111. package/dist/components/ui/filter-provider.js +51 -1
  112. package/dist/components/ui/filter-provider.js.map +1 -1
  113. package/dist/components/ui/form.cjs +169 -0
  114. package/dist/components/ui/form.cjs.map +1 -0
  115. package/dist/components/ui/form.d.cts +46 -0
  116. package/dist/components/ui/form.d.ts +46 -0
  117. package/dist/components/ui/form.js +139 -0
  118. package/dist/components/ui/form.js.map +1 -0
  119. package/dist/components/ui/input.cjs +135 -15
  120. package/dist/components/ui/input.cjs.map +1 -1
  121. package/dist/components/ui/input.d.cts +15 -0
  122. package/dist/components/ui/input.d.ts +15 -0
  123. package/dist/components/ui/input.js +116 -3
  124. package/dist/components/ui/input.js.map +1 -1
  125. package/dist/components/ui/iran-province-heat.cjs +328 -5
  126. package/dist/components/ui/iran-province-heat.cjs.map +1 -1
  127. package/dist/components/ui/iran-province-heat.js +312 -2
  128. package/dist/components/ui/iran-province-heat.js.map +1 -1
  129. package/dist/components/ui/label.cjs +52 -0
  130. package/dist/components/ui/label.cjs.map +1 -0
  131. package/dist/components/ui/label.d.cts +10 -0
  132. package/dist/components/ui/label.d.ts +10 -0
  133. package/dist/components/ui/label.js +30 -0
  134. package/dist/components/ui/label.js.map +1 -0
  135. package/dist/components/ui/page-card.cjs +627 -8
  136. package/dist/components/ui/page-card.cjs.map +1 -1
  137. package/dist/components/ui/page-card.d.cts +3 -2
  138. package/dist/components/ui/page-card.d.ts +3 -2
  139. package/dist/components/ui/page-card.js +611 -5
  140. package/dist/components/ui/page-card.js.map +1 -1
  141. package/dist/components/ui/page-header.cjs +299 -0
  142. package/dist/components/ui/page-header.cjs.map +1 -0
  143. package/dist/components/ui/page-header.d.cts +21 -0
  144. package/dist/components/ui/page-header.d.ts +21 -0
  145. package/dist/components/ui/page-header.js +277 -0
  146. package/dist/components/ui/page-header.js.map +1 -0
  147. package/dist/components/ui/password-input.cjs +168 -0
  148. package/dist/components/ui/password-input.cjs.map +1 -0
  149. package/dist/components/ui/password-input.d.cts +48 -0
  150. package/dist/components/ui/password-input.d.ts +48 -0
  151. package/dist/components/ui/password-input.js +146 -0
  152. package/dist/components/ui/password-input.js.map +1 -0
  153. package/dist/components/ui/popover.cjs +51 -18
  154. package/dist/components/ui/popover.cjs.map +1 -1
  155. package/dist/components/ui/popover.js +30 -2
  156. package/dist/components/ui/popover.js.map +1 -1
  157. package/dist/components/ui/progress.cjs +95 -0
  158. package/dist/components/ui/progress.cjs.map +1 -0
  159. package/dist/components/ui/progress.d.cts +18 -0
  160. package/dist/components/ui/progress.d.ts +18 -0
  161. package/dist/components/ui/progress.js +72 -0
  162. package/dist/components/ui/progress.js.map +1 -0
  163. package/dist/components/ui/radio-card.cjs +84 -0
  164. package/dist/components/ui/radio-card.cjs.map +1 -0
  165. package/dist/components/ui/radio-card.d.cts +12 -0
  166. package/dist/components/ui/radio-card.d.ts +12 -0
  167. package/dist/components/ui/radio-card.js +58 -0
  168. package/dist/components/ui/radio-card.js.map +1 -0
  169. package/dist/components/ui/radio-group.cjs +62 -0
  170. package/dist/components/ui/radio-group.cjs.map +1 -0
  171. package/dist/components/ui/radio-group.d.cts +7 -0
  172. package/dist/components/ui/radio-group.d.ts +7 -0
  173. package/dist/components/ui/radio-group.js +38 -0
  174. package/dist/components/ui/radio-group.js.map +1 -0
  175. package/dist/components/ui/saved-query-card.cjs +409 -7
  176. package/dist/components/ui/saved-query-card.cjs.map +1 -1
  177. package/dist/components/ui/saved-query-card.js +394 -4
  178. package/dist/components/ui/saved-query-card.js.map +1 -1
  179. package/dist/components/ui/scroll-area.cjs +79 -0
  180. package/dist/components/ui/scroll-area.cjs.map +1 -0
  181. package/dist/components/ui/scroll-area.d.cts +14 -0
  182. package/dist/components/ui/scroll-area.d.ts +14 -0
  183. package/dist/components/ui/scroll-area.js +56 -0
  184. package/dist/components/ui/scroll-area.js.map +1 -0
  185. package/dist/components/ui/select.cjs +242 -0
  186. package/dist/components/ui/select.cjs.map +1 -0
  187. package/dist/components/ui/select.d.cts +29 -0
  188. package/dist/components/ui/select.d.ts +29 -0
  189. package/dist/components/ui/select.js +210 -0
  190. package/dist/components/ui/select.js.map +1 -0
  191. package/dist/components/ui/separator.cjs +105 -6
  192. package/dist/components/ui/separator.cjs.map +1 -1
  193. package/dist/components/ui/separator.js +87 -2
  194. package/dist/components/ui/separator.js.map +1 -1
  195. package/dist/components/ui/sheet.cjs +134 -38
  196. package/dist/components/ui/sheet.cjs.map +1 -1
  197. package/dist/components/ui/sheet.js +109 -2
  198. package/dist/components/ui/sheet.js.map +1 -1
  199. package/dist/{chunk-D2EBLE2B.cjs → components/ui/skeleton.cjs} +21 -16
  200. package/dist/components/ui/skeleton.cjs.map +1 -0
  201. package/dist/components/ui/skeleton.d.cts +90 -0
  202. package/dist/components/ui/skeleton.d.ts +90 -0
  203. package/dist/{chunk-SB5DSYR5.js → components/ui/skeleton.js} +8 -3
  204. package/dist/components/ui/skeleton.js.map +1 -0
  205. package/dist/components/ui/slider.cjs +129 -0
  206. package/dist/components/ui/slider.cjs.map +1 -0
  207. package/dist/components/ui/slider.d.cts +10 -0
  208. package/dist/components/ui/slider.d.ts +10 -0
  209. package/dist/components/ui/slider.js +107 -0
  210. package/dist/components/ui/slider.js.map +1 -0
  211. package/dist/components/ui/social-platform-badge.cjs +120 -0
  212. package/dist/components/ui/social-platform-badge.cjs.map +1 -0
  213. package/dist/components/ui/social-platform-badge.d.cts +21 -0
  214. package/dist/components/ui/social-platform-badge.d.ts +21 -0
  215. package/dist/components/ui/social-platform-badge.js +97 -0
  216. package/dist/components/ui/social-platform-badge.js.map +1 -0
  217. package/dist/components/ui/sonner.cjs +51 -0
  218. package/dist/components/ui/sonner.cjs.map +1 -0
  219. package/dist/components/ui/sonner.d.cts +13 -0
  220. package/dist/components/ui/sonner.d.ts +13 -0
  221. package/dist/components/ui/sonner.js +45 -0
  222. package/dist/components/ui/sonner.js.map +1 -0
  223. package/dist/components/ui/sparkline.cjs +159 -6
  224. package/dist/components/ui/sparkline.cjs.map +1 -1
  225. package/dist/components/ui/sparkline.js +142 -2
  226. package/dist/components/ui/sparkline.js.map +1 -1
  227. package/dist/components/ui/switch.cjs +96 -0
  228. package/dist/components/ui/switch.cjs.map +1 -0
  229. package/dist/components/ui/switch.d.cts +13 -0
  230. package/dist/components/ui/switch.d.ts +13 -0
  231. package/dist/components/ui/switch.js +73 -0
  232. package/dist/components/ui/switch.js.map +1 -0
  233. package/dist/components/ui/table.cjs +188 -0
  234. package/dist/components/ui/table.cjs.map +1 -0
  235. package/dist/components/ui/table.d.cts +59 -0
  236. package/dist/components/ui/table.d.ts +59 -0
  237. package/dist/components/ui/table.js +178 -0
  238. package/dist/components/ui/table.js.map +1 -0
  239. package/dist/components/ui/tabs.cjs +140 -0
  240. package/dist/components/ui/tabs.cjs.map +1 -0
  241. package/dist/components/ui/tabs.d.cts +21 -0
  242. package/dist/components/ui/tabs.d.ts +21 -0
  243. package/dist/components/ui/tabs.js +115 -0
  244. package/dist/components/ui/tabs.js.map +1 -0
  245. package/dist/components/ui/textarea.cjs +56 -0
  246. package/dist/components/ui/textarea.cjs.map +1 -0
  247. package/dist/components/ui/textarea.d.cts +5 -0
  248. package/dist/components/ui/textarea.d.ts +5 -0
  249. package/dist/components/ui/textarea.js +34 -0
  250. package/dist/components/ui/textarea.js.map +1 -0
  251. package/dist/components/ui/toggle-group.cjs +123 -0
  252. package/dist/components/ui/toggle-group.cjs.map +1 -0
  253. package/dist/components/ui/toggle-group.d.cts +7 -0
  254. package/dist/components/ui/toggle-group.d.ts +7 -0
  255. package/dist/components/ui/toggle-group.js +99 -0
  256. package/dist/components/ui/toggle-group.js.map +1 -0
  257. package/dist/components/ui/tooltip.cjs +77 -18
  258. package/dist/components/ui/tooltip.cjs.map +1 -1
  259. package/dist/components/ui/tooltip.js +56 -2
  260. package/dist/components/ui/tooltip.js.map +1 -1
  261. package/dist/{concept-card-RwPbqJ06.d.cts → concept-card-BXra9mr0.d.cts} +2 -2
  262. package/dist/{concept-card-CcOBb2Nz.d.ts → concept-card-BoJ5gIJD.d.ts} +2 -2
  263. package/dist/hooks/use-hotkey-registry.cjs +201 -14
  264. package/dist/hooks/use-hotkey-registry.cjs.map +1 -1
  265. package/dist/hooks/use-hotkey-registry.js +182 -2
  266. package/dist/hooks/use-hotkey-registry.js.map +1 -1
  267. package/dist/hooks/use-hotkeys.cjs +144 -9
  268. package/dist/hooks/use-hotkeys.cjs.map +1 -1
  269. package/dist/hooks/use-hotkeys.js +126 -1
  270. package/dist/hooks/use-hotkeys.js.map +1 -1
  271. package/dist/{i18n-CAd9wGOr.d.cts → i18n-BfRhV5aw.d.cts} +5 -3
  272. package/dist/{i18n-ArS3mqj0.d.ts → i18n-ewyqbKM-.d.ts} +5 -3
  273. package/dist/index.cjs +20940 -15745
  274. package/dist/index.cjs.map +1 -1
  275. package/dist/index.css +396 -69
  276. package/dist/index.d.cts +60 -503
  277. package/dist/index.d.ts +60 -503
  278. package/dist/index.js +7716 -2049
  279. package/dist/index.js.map +1 -1
  280. package/dist/{page-card-CmShVqG-.d.cts → page-card-C9XXXOVr.d.cts} +3 -20
  281. package/dist/{page-card-HBn-cy4J.d.ts → page-card-DAnbez_f.d.ts} +3 -20
  282. package/dist/toggle-group-B8r4LOQw.d.cts +26 -0
  283. package/dist/toggle-group-B8r4LOQw.d.ts +26 -0
  284. package/package.json +132 -2
  285. package/tailwind.config.ts +45 -0
  286. package/dist/chunk-2ACKKPWA.cjs +0 -112
  287. package/dist/chunk-2ACKKPWA.cjs.map +0 -1
  288. package/dist/chunk-2UD3LGVX.cjs +0 -316
  289. package/dist/chunk-2UD3LGVX.cjs.map +0 -1
  290. package/dist/chunk-3QYYPPFJ.js.map +0 -1
  291. package/dist/chunk-4SVQNEVH.js +0 -173
  292. package/dist/chunk-4SVQNEVH.js.map +0 -1
  293. package/dist/chunk-4WONHORR.cjs +0 -152
  294. package/dist/chunk-4WONHORR.cjs.map +0 -1
  295. package/dist/chunk-5HCXH6GS.js +0 -409
  296. package/dist/chunk-5HCXH6GS.js.map +0 -1
  297. package/dist/chunk-5JJSRGJD.js.map +0 -1
  298. package/dist/chunk-5K6E4ZSW.cjs +0 -77
  299. package/dist/chunk-5K6E4ZSW.cjs.map +0 -1
  300. package/dist/chunk-5NY26ULO.js +0 -89
  301. package/dist/chunk-5NY26ULO.js.map +0 -1
  302. package/dist/chunk-7RVPG3LE.cjs +0 -231
  303. package/dist/chunk-7RVPG3LE.cjs.map +0 -1
  304. package/dist/chunk-AYEK3WOM.js +0 -207
  305. package/dist/chunk-AYEK3WOM.js.map +0 -1
  306. package/dist/chunk-BRMBLIQG.js +0 -53
  307. package/dist/chunk-BRMBLIQG.js.map +0 -1
  308. package/dist/chunk-CAJKSTXX.cjs.map +0 -1
  309. package/dist/chunk-CKFWMHQU.js +0 -401
  310. package/dist/chunk-CKFWMHQU.js.map +0 -1
  311. package/dist/chunk-CV3N3HVK.js +0 -672
  312. package/dist/chunk-CV3N3HVK.js.map +0 -1
  313. package/dist/chunk-D2EBLE2B.cjs.map +0 -1
  314. package/dist/chunk-GCZ6YATL.js +0 -940
  315. package/dist/chunk-GCZ6YATL.js.map +0 -1
  316. package/dist/chunk-GKRAZGDI.cjs +0 -84
  317. package/dist/chunk-GKRAZGDI.cjs.map +0 -1
  318. package/dist/chunk-GPYJ66CG.js +0 -45
  319. package/dist/chunk-GPYJ66CG.js.map +0 -1
  320. package/dist/chunk-HF6XU5NI.js +0 -84
  321. package/dist/chunk-HF6XU5NI.js.map +0 -1
  322. package/dist/chunk-HJPDZOMJ.cjs +0 -87
  323. package/dist/chunk-HJPDZOMJ.cjs.map +0 -1
  324. package/dist/chunk-HS3XI3CC.cjs +0 -69
  325. package/dist/chunk-HS3XI3CC.cjs.map +0 -1
  326. package/dist/chunk-HUCC3QH5.cjs +0 -53
  327. package/dist/chunk-HUCC3QH5.cjs.map +0 -1
  328. package/dist/chunk-HYZ6BQPS.cjs +0 -425
  329. package/dist/chunk-HYZ6BQPS.cjs.map +0 -1
  330. package/dist/chunk-ISCSZMYW.cjs +0 -106
  331. package/dist/chunk-ISCSZMYW.cjs.map +0 -1
  332. package/dist/chunk-IXFEFIDO.js +0 -82
  333. package/dist/chunk-IXFEFIDO.js.map +0 -1
  334. package/dist/chunk-JCJLN437.js +0 -108
  335. package/dist/chunk-JCJLN437.js.map +0 -1
  336. package/dist/chunk-JMKNNH63.cjs +0 -982
  337. package/dist/chunk-JMKNNH63.cjs.map +0 -1
  338. package/dist/chunk-JUBHQAA2.js +0 -53
  339. package/dist/chunk-JUBHQAA2.js.map +0 -1
  340. package/dist/chunk-K6G63EED.cjs +0 -41
  341. package/dist/chunk-K6G63EED.cjs.map +0 -1
  342. package/dist/chunk-KCWRCSI7.js +0 -62
  343. package/dist/chunk-KCWRCSI7.js.map +0 -1
  344. package/dist/chunk-KYM7NIJO.cjs +0 -433
  345. package/dist/chunk-KYM7NIJO.cjs.map +0 -1
  346. package/dist/chunk-L2L5CKC2.js +0 -291
  347. package/dist/chunk-L2L5CKC2.js.map +0 -1
  348. package/dist/chunk-M5CHZ5BA.js +0 -124
  349. package/dist/chunk-M5CHZ5BA.js.map +0 -1
  350. package/dist/chunk-MEK4RSGC.js +0 -65
  351. package/dist/chunk-MEK4RSGC.js.map +0 -1
  352. package/dist/chunk-MEKWH3GS.js +0 -89
  353. package/dist/chunk-MEKWH3GS.js.map +0 -1
  354. package/dist/chunk-MFTX2DDQ.js +0 -27
  355. package/dist/chunk-MFTX2DDQ.js.map +0 -1
  356. package/dist/chunk-MMC6M35Q.cjs.map +0 -1
  357. package/dist/chunk-NMH43BDC.js +0 -130
  358. package/dist/chunk-NMH43BDC.js.map +0 -1
  359. package/dist/chunk-NORDUD2T.cjs +0 -135
  360. package/dist/chunk-NORDUD2T.cjs.map +0 -1
  361. package/dist/chunk-NV4JOKWL.cjs +0 -197
  362. package/dist/chunk-NV4JOKWL.cjs.map +0 -1
  363. package/dist/chunk-O2JG7WY5.cjs +0 -121
  364. package/dist/chunk-O2JG7WY5.cjs.map +0 -1
  365. package/dist/chunk-ONO2FTV4.cjs +0 -68
  366. package/dist/chunk-ONO2FTV4.cjs.map +0 -1
  367. package/dist/chunk-OQB6HIUL.cjs +0 -108
  368. package/dist/chunk-OQB6HIUL.cjs.map +0 -1
  369. package/dist/chunk-OS6CMYAS.cjs +0 -79
  370. package/dist/chunk-OS6CMYAS.cjs.map +0 -1
  371. package/dist/chunk-PYURPUTV.js +0 -402
  372. package/dist/chunk-PYURPUTV.js.map +0 -1
  373. package/dist/chunk-RJ3HYZ7S.js +0 -44
  374. package/dist/chunk-RJ3HYZ7S.js.map +0 -1
  375. package/dist/chunk-RZNRIOLT.js +0 -128
  376. package/dist/chunk-RZNRIOLT.js.map +0 -1
  377. package/dist/chunk-S3T2L6NA.js +0 -38
  378. package/dist/chunk-S3T2L6NA.js.map +0 -1
  379. package/dist/chunk-S5IPJQZ3.cjs +0 -161
  380. package/dist/chunk-S5IPJQZ3.cjs.map +0 -1
  381. package/dist/chunk-SB5DSYR5.js.map +0 -1
  382. package/dist/chunk-SFXV2DUH.js +0 -106
  383. package/dist/chunk-SFXV2DUH.js.map +0 -1
  384. package/dist/chunk-SXEPGD4Z.cjs +0 -152
  385. package/dist/chunk-SXEPGD4Z.cjs.map +0 -1
  386. package/dist/chunk-SXWSOU3Y.js +0 -89
  387. package/dist/chunk-SXWSOU3Y.js.map +0 -1
  388. package/dist/chunk-SZMVOHT7.cjs +0 -107
  389. package/dist/chunk-SZMVOHT7.cjs.map +0 -1
  390. package/dist/chunk-TWJXOV4C.js +0 -145
  391. package/dist/chunk-TWJXOV4C.js.map +0 -1
  392. package/dist/chunk-U3ADRIVO.cjs +0 -434
  393. package/dist/chunk-U3ADRIVO.cjs.map +0 -1
  394. package/dist/chunk-U5FLLCGC.cjs +0 -151
  395. package/dist/chunk-U5FLLCGC.cjs.map +0 -1
  396. package/dist/chunk-UOZN45G4.cjs +0 -130
  397. package/dist/chunk-UOZN45G4.cjs.map +0 -1
  398. package/dist/chunk-VHLDOG74.cjs +0 -167
  399. package/dist/chunk-VHLDOG74.cjs.map +0 -1
  400. package/dist/chunk-YC5KLN6I.js +0 -139
  401. package/dist/chunk-YC5KLN6I.js.map +0 -1
  402. package/dist/chunk-YENXXYUV.cjs +0 -111
  403. package/dist/chunk-YENXXYUV.cjs.map +0 -1
  404. package/dist/chunk-YFQWC2PW.js +0 -113
  405. package/dist/chunk-YFQWC2PW.js.map +0 -1
  406. package/dist/chunk-Z2TY4A75.cjs +0 -700
  407. package/dist/chunk-Z2TY4A75.cjs.map +0 -1
  408. package/dist/chunk-Z56O7UEU.cjs +0 -136
  409. package/dist/chunk-Z56O7UEU.cjs.map +0 -1
  410. package/dist/chunk-ZBZDR4ZC.js +0 -106
  411. package/dist/chunk-ZBZDR4ZC.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/jalali-utils.ts","../src/lib/utils.ts"],"names":["format"],"mappings":"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","file":"chunk-4SVQNEVH.js","sourcesContent":["/**\n * Persian (Jalali / Solar Hijri) calendar utilities.\n *\n * Backed by **date-fns-jalali** — a Jalali-native fork of date-fns v4.\n * Chosen over moment-jalaali (unmaintained since 2019) because:\n * • Tree-shakeable, zero dependencies\n * • Built-in TypeScript types\n * • Tracks upstream date-fns releases\n * • Built-in fa-IR locale with month/weekday names\n * • ~5-10KB gzipped for typical usage\n *\n * DO NOT replace this library again. This decision was made after\n * evaluating date-fns-jalali, jalaali-js, jalaliday (dayjs), moment-jalaali,\n * and persian-date in April 2026. date-fns-jalali is the clear winner\n * for a design system that needs formatting, parsing, and locale support.\n */\n\nimport { format, getMonth, getDate, getYear, parse } from 'date-fns-jalali'\nimport { faIR } from 'date-fns-jalali/locale'\n\n/**\n * Persian/Farsi month names\n */\nexport const PERSIAN_MONTHS = [\n 'فروردین',\n 'اردیبهشت',\n 'خرداد',\n 'تیر',\n 'مرداد',\n 'شهریور',\n 'مهر',\n 'آبان',\n 'آذر',\n 'دی',\n 'بهمن',\n 'اسفند',\n]\n\n/**\n * Persian/Farsi short month names\n */\nexport const PERSIAN_MONTHS_SHORT = ['فرو', 'ارد', 'خرد', 'تیر', 'مرد', 'شهر', 'مهر', 'آبا', 'آذر', 'دی', 'بهم', 'اسف']\n\n/**\n * Persian/Farsi weekday names\n */\nexport const PERSIAN_WEEKDAYS = ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنج‌شنبه', 'جمعه', 'شنبه']\n\n/**\n * Persian/Farsi short weekday names\n */\nexport const PERSIAN_WEEKDAYS_SHORT = ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش']\n\n/**\n * Convert English digits to Persian/Farsi digits\n */\nexport function toPersianDigits(num: number | string): string {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n return String(num).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n}\n\n/**\n * Convert Persian/Farsi digits to English digits\n */\nexport function toEnglishDigits(str: string): string {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n const arabicDigits = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']\n\n return str\n .replace(/[۰-۹]/g, (digit) => String(persianDigits.indexOf(digit)))\n .replace(/[٠-٩]/g, (digit) => String(arabicDigits.indexOf(digit)))\n}\n\n/**\n * Format a Date object to Persian/Jalali date string.\n *\n * Uses date-fns-jalali format tokens:\n * yyyy = Jalali year, MM = month (01-12), dd = day (01-31)\n * MMMM = full month name, EEEE = full weekday name\n * HH:mm = 24h time, hh:mm a = 12h time\n */\nexport function formatJalaliDate(date: Date, formatStr: string = 'yyyy/MM/dd'): string {\n return format(date, formatStr, { locale: faIR })\n}\n\n/**\n * Get Persian month name from a Date object\n */\nexport function getPersianMonthName(date: Date): string {\n const monthIndex = getMonth(date)\n return PERSIAN_MONTHS[monthIndex]\n}\n\n/**\n * Get Persian short month name from a Date object\n */\nexport function getPersianMonthNameShort(date: Date): string {\n const monthIndex = getMonth(date)\n return PERSIAN_MONTHS_SHORT[monthIndex]\n}\n\n/**\n * Get Persian weekday name from a Date object\n */\nexport function getPersianWeekdayName(date: Date, short: boolean = false): string {\n if (short) return format(date, 'EEEEE', { locale: faIR })\n return format(date, 'EEEE', { locale: faIR })\n}\n\n/**\n * Get Persian year from a Date object\n */\nexport function getPersianYear(date: Date): number {\n return getYear(date)\n}\n\n/**\n * Get Persian month (0-11) from a Date object\n */\nexport function getPersianMonth(date: Date): number {\n return getMonth(date)\n}\n\n/**\n * Get Persian day from a Date object\n */\nexport function getPersianDay(date: Date): number {\n return getDate(date)\n}\n\n/**\n * Create a Date object from Persian/Jalali date\n */\nexport function jalaliToGregorian(year: number, month: number, day: number): Date {\n const dateStr = `${year}/${month + 1}/${day}`\n return parse(dateStr, 'yyyy/M/d', new Date(), { locale: faIR })\n}\n\n/**\n * Format date range in Persian\n */\nexport function formatPersianDateRange(from: Date, to: Date): string {\n const fromYear = getYear(from)\n const toYear = getYear(to)\n const fromMonth = getMonth(from)\n const toMonth = getMonth(to)\n const fromDay = getDate(from)\n const toDay = getDate(to)\n\n // Same day\n if (fromYear === toYear && fromMonth === toMonth && fromDay === toDay) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same month and year\n if (fromYear === toYear && fromMonth === toMonth) {\n return `${toPersianDigits(fromDay)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Same year\n if (fromYear === toYear) {\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(fromYear)}`\n }\n\n // Different years\n return `${toPersianDigits(fromDay)} ${PERSIAN_MONTHS[fromMonth]} ${toPersianDigits(fromYear)} - ${toPersianDigits(toDay)} ${PERSIAN_MONTHS[toMonth]} ${toPersianDigits(toYear)}`\n}\n\n/**\n * Get all months for a dropdown (returns array of {value, label})\n */\nexport function getPersianMonthsForDropdown(): Array<{\n value: number\n label: string\n}> {\n return PERSIAN_MONTHS.map((month, index) => ({\n value: index,\n label: month,\n }))\n}\n\n/**\n * Get years range for a dropdown\n */\nexport function getPersianYearsForDropdown(fromYear: number, toYear: number): Array<{ value: number; label: string }> {\n const years: Array<{ value: number; label: string }> = []\n for (let year = fromYear; year <= toYear; year++) {\n years.push({\n value: year,\n label: toPersianDigits(year),\n })\n }\n return years\n}\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { formatJalaliDate } from '@/lib/jalali-utils'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport type SupportedLocale = 'fa' | 'ar' | 'en'\n\n/**\n * Convert digits in a string to Persian/Arabic numerals based on locale.\n * @example convertToLocalNumbers('123', 'fa') => '۱۲۳'\n * @example convertToLocalNumbers('123', 'en') => '123'\n */\nexport function convertToLocalNumbers(text: string | number, locale: SupportedLocale): string {\n if (locale === 'fa' || locale === 'ar') {\n const persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']\n return String(text).replace(/\\d/g, (digit) => persianDigits[parseInt(digit)])\n }\n return String(text)\n}\n\n/**\n * Format large numbers with locale-aware suffixes (K/M/B).\n * @example formatLargeNumber(1500, 'fa') => '۱.۵ هزار'\n * @example formatLargeNumber(1500, 'en') => '1.5K'\n */\nexport function formatLargeNumber(num: number, locale: SupportedLocale): string {\n if (num >= 1_000_000_000) {\n const formatted = (num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'B' : ' میلیارد')\n }\n if (num >= 1_000_000) {\n const formatted = (num / 1_000_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'M' : ' میلیون')\n }\n if (num >= 1_000) {\n const formatted = (num / 1_000).toFixed(1).replace(/\\.0$/, '')\n return convertToLocalNumbers(formatted, locale) + (locale === 'en' ? 'K' : ' هزار')\n }\n return convertToLocalNumbers(num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','), locale)\n}\n\n/**\n * Format number to Instagram-style short format (English only).\n * @example formatNumber(123456, 'short') => '123K'\n * @example formatNumber(123456, 'exact') => '123,456'\n */\nexport function formatNumber(num: number | undefined, format: 'exact' | 'short' = 'exact'): string {\n if (num === undefined || num === null) return '0'\n\n if (format === 'exact') {\n return num.toLocaleString('en-US')\n }\n\n // Short format (Instagram style)\n if (num >= 1_000_000_000) {\n return `${(num / 1_000_000_000).toFixed(1).replace(/\\.0$/, '')}B`\n }\n if (num >= 1_000_000) {\n return `${(num / 1_000_000).toFixed(1).replace(/\\.0$/, '')}M`\n }\n if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1).replace(/\\.0$/, '')}K`\n }\n return num.toString()\n}\n\n/**\n * Format date to relative time with absolute on hover (Persian)\n * @example formatRelativeTime(new Date()) => '۲ ساعت پیش'\n */\nexport function formatRelativeTime(date: Date | string | number): string {\n const now = new Date()\n const then = new Date(date)\n const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1000)\n\n if (diffInSeconds < 60) {\n return 'همین الان'\n }\n\n const diffInMinutes = Math.floor(diffInSeconds / 60)\n if (diffInMinutes < 60) {\n return `${convertToLocalNumbers(diffInMinutes, 'fa')} دقیقه پیش`\n }\n\n const diffInHours = Math.floor(diffInMinutes / 60)\n if (diffInHours < 24) {\n return `${convertToLocalNumbers(diffInHours, 'fa')} ساعت پیش`\n }\n\n const diffInDays = Math.floor(diffInHours / 24)\n if (diffInDays < 7) {\n return `${convertToLocalNumbers(diffInDays, 'fa')} روز پیش`\n }\n\n const diffInWeeks = Math.floor(diffInDays / 7)\n if (diffInWeeks < 4) {\n return `${convertToLocalNumbers(diffInWeeks, 'fa')} هفته پیش`\n }\n\n const diffInMonths = Math.floor(diffInDays / 30)\n if (diffInMonths < 12) {\n return `${convertToLocalNumbers(diffInMonths, 'fa')} ماه پیش`\n }\n\n const diffInYears = Math.floor(diffInDays / 365)\n return `${convertToLocalNumbers(diffInYears, 'fa')} سال پیش`\n}\n\n/**\n * Format date to absolute format (Persian / Jalali)\n * Uses date-fns-jalali for accurate Jalali conversion.\n * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'\n */\nexport function formatAbsoluteTime(date: Date | string | number): string {\n const d = new Date(date)\n return formatJalaliDate(d, 'd MMMM yyyy، HH:mm')\n}\n"]}
@@ -1,152 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkKYM7NIJO_cjs = require('./chunk-KYM7NIJO.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
- function renderActiveShape(props) {
29
- const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, fill, cornerRadius } = props;
30
- return /* @__PURE__ */ jsxRuntime.jsx(
31
- recharts.Sector,
32
- {
33
- cx,
34
- cy,
35
- innerRadius: innerRadius - 3,
36
- outerRadius: outerRadius + 5,
37
- startAngle,
38
- endAngle,
39
- fill,
40
- cornerRadius,
41
- forceCornerRadius: true
42
- }
43
- );
44
- }
45
- function renderArcLinkLabel(props, labelSkipAngle, textColor) {
46
- const { cx, cy, midAngle, outerRadius, name, percent } = props;
47
- const angle = percent * 360;
48
- if (angle < labelSkipAngle) return null;
49
- const RADIAN = Math.PI / 180;
50
- const sin = Math.sin(-RADIAN * midAngle);
51
- const cos = Math.cos(-RADIAN * midAngle);
52
- const arcX = cx + (outerRadius + 4) * cos;
53
- const arcY = cy + (outerRadius + 4) * sin;
54
- const diagLen = 10;
55
- const diagX = arcX + diagLen * cos;
56
- const diagY = arcY + diagLen * sin;
57
- const straightLen = 14;
58
- const endX = diagX + (cos >= 0 ? straightLen : -straightLen);
59
- const endY = diagY;
60
- const textAnchor = cos >= 0 ? "start" : "end";
61
- const textX = endX + (cos >= 0 ? 4 : -4);
62
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
63
- /* @__PURE__ */ jsxRuntime.jsx(
64
- "path",
65
- {
66
- d: `M ${arcX},${arcY} L ${diagX},${diagY} L ${endX},${endY}`,
67
- fill: "none",
68
- stroke: textColor,
69
- strokeWidth: 1,
70
- strokeOpacity: 0.4
71
- }
72
- ),
73
- /* @__PURE__ */ jsxRuntime.jsx(
74
- "text",
75
- {
76
- x: textX,
77
- y: endY,
78
- textAnchor,
79
- dominantBaseline: "central",
80
- fill: textColor,
81
- fontFamily: chunkKYM7NIJO_cjs.CHART_FONT_FAMILY,
82
- fontSize: 11,
83
- children: name
84
- }
85
- )
86
- ] });
87
- }
88
- var PartoPieChart = React__namespace.forwardRef(function PartoPieChart2({
89
- data,
90
- innerRadius = "60%",
91
- outerRadius = "80%",
92
- paddingAngle = 1.2,
93
- cornerRadius = 4,
94
- showLabels = true,
95
- labelSkipAngle = 14,
96
- margin = { top: 20, right: 20, bottom: 20, left: 20 },
97
- tooltipFormatter,
98
- locale = "fa",
99
- className,
100
- isLoading = false,
101
- ariaLabel,
102
- legend = false,
103
- legendValues = true
104
- }, ref) {
105
- const { chartColors, tooltipStyle, axisTickStyle } = chunkKYM7NIJO_cjs.useChartTheme();
106
- if (isLoading) {
107
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKYM7NIJO_cjs.ChartLoadingSkeleton, { className, shape: "circle" });
108
- }
109
- const legendItems = legend ? data.map((row, i) => ({
110
- key: String(row.name),
111
- label: row.name,
112
- color: chartColors[i % chartColors.length],
113
- shape: "dot",
114
- value: legendValues ? row.value : void 0
115
- })) : [];
116
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKYM7NIJO_cjs.ChartContainer, { ref, className, dataSlot: "pie-chart", ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", width: "100%", height: "100%" }, children: [
117
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1, minHeight: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.PieChart, { margin, children: [
118
- /* @__PURE__ */ jsxRuntime.jsx(
119
- recharts.Pie,
120
- {
121
- data,
122
- dataKey: "value",
123
- nameKey: "name",
124
- cx: "50%",
125
- cy: "50%",
126
- innerRadius,
127
- outerRadius,
128
- paddingAngle,
129
- cornerRadius,
130
- activeShape: renderActiveShape,
131
- label: showLabels ? (props) => renderArcLinkLabel(props, labelSkipAngle, axisTickStyle.fill) : false,
132
- labelLine: false,
133
- animationDuration: 800,
134
- animationEasing: "ease-out",
135
- children: data.map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(recharts.Cell, { fill: chartColors[i % chartColors.length], stroke: "none" }, i))
136
- }
137
- ),
138
- /* @__PURE__ */ jsxRuntime.jsx(
139
- recharts.Tooltip,
140
- {
141
- content: /* @__PURE__ */ jsxRuntime.jsx(chunkKYM7NIJO_cjs.ChartTooltip, { tooltipStyle, formatter: tooltipFormatter, locale })
142
- }
143
- )
144
- ] }) }) }),
145
- legend && /* @__PURE__ */ jsxRuntime.jsx(chunkKYM7NIJO_cjs.ChartLegend, { items: legendItems, style: { paddingTop: 12 } })
146
- ] }) });
147
- });
148
- PartoPieChart.displayName = "PartoPieChart";
149
-
150
- exports.PartoPieChart = PartoPieChart;
151
- //# sourceMappingURL=chunk-4WONHORR.cjs.map
152
- //# sourceMappingURL=chunk-4WONHORR.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/charts/PartoPieChart.tsx"],"names":["jsx","Sector","CHART_FONT_FAMILY","React","PartoPieChart","useChartTheme","ChartLoadingSkeleton","ChartContainer","jsxs","ResponsiveContainer","PieChart","Pie","Cell","Tooltip","ChartTooltip","ChartLegend"],"mappings":"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","file":"chunk-4WONHORR.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, ChartLegend, ChartLoadingSkeleton, ChartTooltip, type ChartLegendItem } 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 * Render a legend listing each slice with its color and (optionally)\n * its value. Recommended for pies with many slices where arc-link\n * labels get suppressed by `labelSkipAngle`. @default `false`\n */\n legend?: boolean\n /** Show each slice's value in the legend. @default `true` when legend is on */\n legendValues?: boolean\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 legend = false,\n legendValues = true,\n },\n ref\n) {\n const { chartColors, tooltipStyle, axisTickStyle } = useChartTheme()\n\n if (isLoading) {\n return <ChartLoadingSkeleton className={className} shape=\"circle\" />\n }\n\n const legendItems: ChartLegendItem[] = legend\n ? data.map((row, i) => ({\n key: String(row.name),\n label: row.name,\n color: chartColors[i % chartColors.length],\n shape: 'dot',\n value: legendValues ? row.value : undefined,\n }))\n : []\n\n return (\n <ChartContainer ref={ref} className={className} dataSlot=\"pie-chart\" ariaLabel={ariaLabel}>\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%', height: '100%' }}>\n <div style={{ flex: 1, minHeight: 0 }}>\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={\n showLabels ? (props: any) => renderArcLinkLabel(props, labelSkipAngle, axisTickStyle.fill) : false\n }\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 </div>\n {legend && <ChartLegend items={legendItems} style={{ paddingTop: 12 }} />}\n </div>\n </ChartContainer>\n )\n})\nPartoPieChart.displayName = 'PartoPieChart'\n"]}
@@ -1,409 +0,0 @@
1
- import { StatusBadge } from './chunk-MEK4RSGC.js';
2
- import { Sparkline } from './chunk-YC5KLN6I.js';
3
- import { cn, convertToLocalNumbers } from './chunk-4SVQNEVH.js';
4
- import * as React from 'react';
5
- import { cva } from 'class-variance-authority';
6
- import { jsx, jsxs } from 'react/jsx-runtime';
7
-
8
- var PLATFORM_META = {
9
- instagram: {
10
- label: "Instagram",
11
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
12
- },
13
- twitter: {
14
- label: "X",
15
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
16
- },
17
- tiktok: {
18
- label: "TikTok",
19
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
20
- },
21
- youtube: {
22
- label: "YouTube",
23
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
24
- },
25
- linkedin: {
26
- label: "LinkedIn",
27
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
28
- },
29
- telegram: {
30
- label: "Telegram",
31
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
32
- },
33
- threads: {
34
- label: "Threads",
35
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("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" }) })
36
- },
37
- facebook: {
38
- label: "Facebook",
39
- icon: ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.875v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" }) })
40
- }
41
- };
42
- var socialPlatformBadgeVariants = cva("inline-flex items-center font-medium transition-colors duration-150", {
43
- variants: {
44
- size: {
45
- xs: "gap-1",
46
- sm: "gap-1.5",
47
- md: "gap-1.5",
48
- lg: "gap-2"
49
- },
50
- variant: {
51
- flat: "",
52
- badge: "border border-border bg-surface-100"
53
- }
54
- },
55
- compoundVariants: [
56
- { variant: "badge", size: "xs", className: "px-1.5 py-0.5 rounded" },
57
- { variant: "badge", size: "sm", className: "px-2 py-1 rounded" },
58
- { variant: "badge", size: "md", className: "px-2.5 py-1 rounded-md" },
59
- { variant: "badge", size: "lg", className: "px-3 py-1.5 rounded-md" }
60
- ],
61
- defaultVariants: { size: "sm", variant: "flat" }
62
- });
63
- var SIZE_CHILD_CLASSES = {
64
- xs: { icon: "size-3", text: "text-xs" },
65
- sm: { icon: "size-4", text: "text-xs" },
66
- md: { icon: "size-5", text: "text-sm" },
67
- lg: { icon: "size-6", text: "text-base" }
68
- };
69
- var SocialPlatformBadge = React.forwardRef(
70
- ({ className, platform, size = "sm", showLabel = false, variant = "flat", style, ...props }, ref) => {
71
- const meta = PLATFORM_META[platform];
72
- const Icon = meta.icon;
73
- const sizeClasses = SIZE_CHILD_CLASSES[size];
74
- return /* @__PURE__ */ jsxs(
75
- "span",
76
- {
77
- ref,
78
- "data-slot": "social-platform-badge",
79
- className: cn(socialPlatformBadgeVariants({ size, variant }), className),
80
- style,
81
- ...props,
82
- children: [
83
- /* @__PURE__ */ jsx(Icon, { className: cn(sizeClasses.icon, "shrink-0"), style: { color: `var(--social-platform-${platform})` } }),
84
- showLabel && /* @__PURE__ */ jsx("span", { className: cn(sizeClasses.text, "text-foreground-light"), children: meta.label })
85
- ]
86
- }
87
- );
88
- }
89
- );
90
- SocialPlatformBadge.displayName = "SocialPlatformBadge";
91
- var LABELS = {
92
- fa: { real: "\u0648\u0627\u0642\u0639\u06CC", suspicious: "\u0645\u0634\u06A9\u0648\u06A9", bot: "\u0628\u0627\u062A", summary: "\u0646\u0631\u062E \u062D\u0633\u0627\u0628\u200C\u0647\u0627\u06CC \u0648\u0627\u0642\u0639\u06CC" },
93
- ar: { real: "\u062D\u0642\u064A\u0642\u064A", suspicious: "\u0645\u0634\u0628\u0648\u0647", bot: "\u0631\u0648\u0628\u0648\u062A", summary: "\u0645\u0639\u062F\u0644 \u0627\u0644\u062D\u0633\u0627\u0628\u0627\u062A \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629" },
94
- en: { real: "Real", suspicious: "Suspicious", bot: "Bot", summary: "Real-account rate" }
95
- };
96
- var SEGMENT_STYLES = {
97
- real: {
98
- bar: "bg-[hsl(var(--sentiment-positive))]",
99
- text: "text-[hsl(var(--sentiment-positive))]",
100
- bg: "bg-[hsl(var(--sentiment-positive)/0.12)]",
101
- dot: "bg-[hsl(var(--sentiment-positive))]"
102
- },
103
- suspicious: {
104
- bar: "bg-[hsl(var(--warning-default))]",
105
- text: "text-[hsl(var(--warning-default))]",
106
- bg: "bg-[hsl(var(--warning-default)/0.12)]",
107
- dot: "bg-[hsl(var(--warning-default))]"
108
- },
109
- bot: {
110
- bar: "bg-[hsl(var(--destructive-default))]",
111
- text: "text-[hsl(var(--destructive-default))]",
112
- bg: "bg-[hsl(var(--destructive-default)/0.12)]",
113
- dot: "bg-[hsl(var(--destructive-default))]"
114
- }
115
- };
116
- var SEGMENT_ORDER = ["real", "suspicious", "bot"];
117
- function calcPercents(data) {
118
- const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0);
119
- if (total === 0) return { real: 0, suspicious: 0, bot: 0 };
120
- const floats = SEGMENT_ORDER.map((k) => ({ k, v: (data[k] ?? 0) / total * 100 }));
121
- const floors = floats.map(({ k, v }) => ({ k, floor: Math.floor(v), rem: v - Math.floor(v) }));
122
- const remaining = 100 - floors.reduce((s, f) => s + f.floor, 0);
123
- const sorted = [...floors].sort((a, b) => b.rem - a.rem);
124
- sorted.slice(0, remaining).forEach((f) => f.floor++);
125
- const result = { real: 0, suspicious: 0, bot: 0 };
126
- sorted.forEach(({ k, floor }) => result[k] = floor);
127
- return result;
128
- }
129
- var BAR_HEIGHT = {
130
- sm: "h-1.5",
131
- md: "h-2",
132
- lg: "h-3"
133
- };
134
- var BotDetectionMeter = React.forwardRef(
135
- ({
136
- className,
137
- data,
138
- variant = "stacked",
139
- showCounts = false,
140
- showPercent = true,
141
- showSummary = true,
142
- size = "md",
143
- locale = "fa",
144
- ...props
145
- }, ref) => {
146
- const labels = LABELS[locale];
147
- const percents = calcPercents(data);
148
- const total = SEGMENT_ORDER.reduce((sum, k) => sum + (data[k] ?? 0), 0);
149
- const fmt = (n) => convertToLocalNumbers(n, locale);
150
- if (variant === "compact") {
151
- return /* @__PURE__ */ jsx(
152
- "div",
153
- {
154
- ref,
155
- "data-slot": "bot-detection-meter",
156
- "data-variant": "compact",
157
- className: cn("flex items-center gap-2 text-xs", className),
158
- ...props,
159
- children: SEGMENT_ORDER.map((k) => {
160
- const value = showCounts ? data[k] ?? 0 : percents[k];
161
- return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
162
- /* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full", SEGMENT_STYLES[k].dot), "aria-hidden": "true" }),
163
- /* @__PURE__ */ jsx("span", { className: "text-foreground-lighter", children: labels[k] }),
164
- /* @__PURE__ */ jsxs("span", { className: cn("font-semibold tabular-nums", SEGMENT_STYLES[k].text), children: [
165
- fmt(value),
166
- !showCounts && showPercent && "\u066A"
167
- ] })
168
- ] }, k);
169
- })
170
- }
171
- );
172
- }
173
- if (variant === "bars") {
174
- return /* @__PURE__ */ jsx(
175
- "div",
176
- {
177
- ref,
178
- "data-slot": "bot-detection-meter",
179
- "data-variant": "bars",
180
- className: cn("flex flex-col gap-2", className),
181
- ...props,
182
- children: SEGMENT_ORDER.map((k) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
183
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs", children: [
184
- /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-foreground", children: [
185
- /* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full", SEGMENT_STYLES[k].dot), "aria-hidden": "true" }),
186
- labels[k]
187
- ] }),
188
- /* @__PURE__ */ jsxs("span", { className: "tabular-nums text-foreground-lighter", children: [
189
- showCounts && /* @__PURE__ */ jsx("span", { className: "me-2", children: fmt(data[k] ?? 0) }),
190
- showPercent && /* @__PURE__ */ jsxs("span", { className: cn("font-semibold", SEGMENT_STYLES[k].text), children: [
191
- fmt(percents[k]),
192
- "\u066A"
193
- ] })
194
- ] })
195
- ] }),
196
- /* @__PURE__ */ jsx("div", { className: cn("w-full rounded-full overflow-hidden", SEGMENT_STYLES[k].bg, BAR_HEIGHT[size]), children: /* @__PURE__ */ jsx(
197
- "div",
198
- {
199
- className: cn("h-full rounded-full transition-[width] duration-300", SEGMENT_STYLES[k].bar),
200
- style: { width: `${percents[k]}%` },
201
- role: "progressbar",
202
- "aria-valuenow": percents[k],
203
- "aria-valuemin": 0,
204
- "aria-valuemax": 100,
205
- "aria-label": `${labels[k]}: ${fmt(percents[k])}\u066A`
206
- }
207
- ) })
208
- ] }, k))
209
- }
210
- );
211
- }
212
- return /* @__PURE__ */ jsxs(
213
- "div",
214
- {
215
- ref,
216
- "data-slot": "bot-detection-meter",
217
- "data-variant": "stacked",
218
- className: cn("flex flex-col gap-2", className),
219
- ...props,
220
- children: [
221
- showSummary && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs", children: [
222
- /* @__PURE__ */ jsx("span", { className: "text-foreground-lighter", children: labels.summary }),
223
- /* @__PURE__ */ jsxs("span", { className: cn("font-semibold tabular-nums", SEGMENT_STYLES.real.text), children: [
224
- fmt(percents.real),
225
- "\u066A",
226
- showCounts && total > 0 && /* @__PURE__ */ jsxs("span", { className: "ms-1 font-normal text-foreground-lighter", children: [
227
- "(",
228
- fmt(data.real),
229
- " / ",
230
- fmt(total),
231
- ")"
232
- ] })
233
- ] })
234
- ] }),
235
- /* @__PURE__ */ jsx(
236
- "div",
237
- {
238
- className: cn("w-full rounded-full overflow-hidden bg-surface-200 flex", BAR_HEIGHT[size]),
239
- role: "group",
240
- "aria-label": labels.summary,
241
- children: SEGMENT_ORDER.map((k) => {
242
- if (percents[k] === 0) return null;
243
- return /* @__PURE__ */ jsx(
244
- "div",
245
- {
246
- className: cn("h-full transition-[width] duration-300", SEGMENT_STYLES[k].bar),
247
- style: { width: `${percents[k]}%` },
248
- role: "progressbar",
249
- "aria-valuenow": percents[k],
250
- "aria-valuemin": 0,
251
- "aria-valuemax": 100,
252
- "aria-label": `${labels[k]}: ${fmt(percents[k])}\u066A`
253
- },
254
- k
255
- );
256
- })
257
- }
258
- ),
259
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4 text-xs", children: SEGMENT_ORDER.map((k) => /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
260
- /* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full", SEGMENT_STYLES[k].dot), "aria-hidden": "true" }),
261
- /* @__PURE__ */ jsx("span", { className: "text-foreground-lighter", children: labels[k] }),
262
- /* @__PURE__ */ jsx("span", { className: cn("font-semibold tabular-nums", SEGMENT_STYLES[k].text), children: showCounts ? fmt(data[k] ?? 0) : `${fmt(percents[k])}\u066A` })
263
- ] }, k)) })
264
- ]
265
- }
266
- );
267
- }
268
- );
269
- BotDetectionMeter.displayName = "BotDetectionMeter";
270
- function formatBig(n, locale) {
271
- if (n >= 1e6) return `${convertToLocalNumbers((n / 1e6).toFixed(1), locale)}M`;
272
- if (n >= 1e3) return `${convertToLocalNumbers((n / 1e3).toFixed(1), locale)}K`;
273
- return convertToLocalNumbers(n, locale);
274
- }
275
- var PageCard = React.forwardRef(
276
- ({
277
- className,
278
- handle,
279
- subtitle,
280
- avatarSrc,
281
- platform,
282
- status,
283
- followers,
284
- followerTrend,
285
- engagementRate,
286
- postsPerWeek,
287
- contentMix,
288
- botDetection,
289
- interactive = false,
290
- locale = "fa",
291
- onClick,
292
- ...props
293
- }, ref) => {
294
- const isClickable = interactive || !!onClick;
295
- const totalContent = contentMix && (contentMix.photo ?? 0) + (contentMix.video ?? 0) + (contentMix.carousel ?? 0) + (contentMix.story ?? 0);
296
- return /* @__PURE__ */ jsxs(
297
- "div",
298
- {
299
- ref,
300
- "data-slot": "page-card",
301
- "data-status": status,
302
- role: isClickable ? "button" : "article",
303
- tabIndex: isClickable ? 0 : void 0,
304
- onClick,
305
- onKeyDown: isClickable ? (e) => {
306
- if ((e.key === "Enter" || e.key === " ") && e.target === e.currentTarget) {
307
- e.preventDefault();
308
- e.currentTarget.click();
309
- }
310
- } : void 0,
311
- className: cn(
312
- "flex flex-col gap-3 rounded-lg border border-border bg-background p-4 transition-colors",
313
- isClickable && "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",
314
- className
315
- ),
316
- ...props,
317
- children: [
318
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
319
- avatarSrc ? /* @__PURE__ */ jsx(
320
- "img",
321
- {
322
- src: avatarSrc,
323
- alt: "",
324
- className: "size-10 rounded-full object-cover object-center shrink-0 border border-border"
325
- }
326
- ) : /* @__PURE__ */ jsx("div", { className: "size-10 rounded-full bg-surface-200 shrink-0", "aria-hidden": "true" }),
327
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
328
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
329
- /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground truncate", children: handle }),
330
- platform && /* @__PURE__ */ jsx(SocialPlatformBadge, { platform, size: "xs" }),
331
- status && /* @__PURE__ */ jsx(StatusBadge, { status, size: "sm", animated: true, locale })
332
- ] }),
333
- subtitle && /* @__PURE__ */ jsx("p", { className: "text-xs text-foreground-lighter truncate", children: subtitle })
334
- ] })
335
- ] }),
336
- (typeof followers === "number" || followerTrend || typeof engagementRate === "number") && /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-3 text-xs", children: [
337
- typeof followers === "number" && /* @__PURE__ */ jsxs("div", { children: [
338
- /* @__PURE__ */ jsx("div", { className: "text-foreground-lighter", children: locale === "fa" ? "\u0641\u0627\u0644\u0648\u0648\u0631" : locale === "ar" ? "\u0645\u062A\u0627\u0628\u0639\u0648\u0646" : "Followers" }),
339
- /* @__PURE__ */ jsx("div", { className: "text-base font-semibold tabular-nums text-foreground", children: formatBig(followers, locale) })
340
- ] }),
341
- followerTrend && followerTrend.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
342
- /* @__PURE__ */ jsx("div", { className: "text-foreground-lighter", children: locale === "fa" ? "\u0631\u0648\u0646\u062F" : locale === "ar" ? "\u0627\u0644\u0627\u062A\u062C\u0627\u0647" : "Trend" }),
343
- /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(Sparkline, { data: followerTrend, variant: "line", width: 80, height: 24 }) })
344
- ] }),
345
- typeof engagementRate === "number" && /* @__PURE__ */ jsxs("div", { children: [
346
- /* @__PURE__ */ jsx("div", { className: "text-foreground-lighter", children: locale === "fa" ? "\u0646\u0631\u062E \u062A\u0639\u0627\u0645\u0644" : locale === "ar" ? "\u0645\u0639\u062F\u0644 \u0627\u0644\u062A\u0641\u0627\u0639\u0644" : "Engagement" }),
347
- /* @__PURE__ */ jsxs("div", { className: "text-base font-semibold tabular-nums text-foreground", children: [
348
- convertToLocalNumbers(engagementRate.toFixed(1), locale),
349
- locale === "en" ? "%" : "\u066A"
350
- ] })
351
- ] })
352
- ] }),
353
- contentMix && totalContent && totalContent > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
354
- /* @__PURE__ */ jsx("div", { className: "text-2xs text-foreground-lighter", children: locale === "fa" ? "\u062A\u0631\u06A9\u06CC\u0628 \u0645\u062D\u062A\u0648\u0627" : locale === "ar" ? "\u0645\u0632\u064A\u062C \u0627\u0644\u0645\u062D\u062A\u0648\u0649" : "Content mix" }),
355
- /* @__PURE__ */ jsxs("div", { className: "flex h-1.5 w-full overflow-hidden rounded-full bg-surface-200", children: [
356
- contentMix.photo ? /* @__PURE__ */ jsx(
357
- "span",
358
- {
359
- style: {
360
- width: `${contentMix.photo / totalContent * 100}%`,
361
- backgroundColor: "hsl(var(--chart-1))"
362
- },
363
- "aria-label": `photo ${contentMix.photo}`
364
- }
365
- ) : null,
366
- contentMix.video ? /* @__PURE__ */ jsx(
367
- "span",
368
- {
369
- style: {
370
- width: `${contentMix.video / totalContent * 100}%`,
371
- backgroundColor: "hsl(var(--chart-2))"
372
- },
373
- "aria-label": `video ${contentMix.video}`
374
- }
375
- ) : null,
376
- contentMix.carousel ? /* @__PURE__ */ jsx(
377
- "span",
378
- {
379
- style: {
380
- width: `${contentMix.carousel / totalContent * 100}%`,
381
- backgroundColor: "hsl(var(--chart-3))"
382
- },
383
- "aria-label": `carousel ${contentMix.carousel}`
384
- }
385
- ) : null,
386
- contentMix.story ? /* @__PURE__ */ jsx(
387
- "span",
388
- {
389
- style: {
390
- width: `${contentMix.story / totalContent * 100}%`,
391
- backgroundColor: "hsl(var(--chart-4))"
392
- },
393
- "aria-label": `story ${contentMix.story}`
394
- }
395
- ) : null
396
- ] })
397
- ] }),
398
- botDetection && /* @__PURE__ */ jsx("div", { "data-slot": "page-card-bot", children: /* @__PURE__ */ jsx(BotDetectionMeter, { data: botDetection, variant: "compact", size: "sm", locale }) }),
399
- typeof postsPerWeek === "number" && /* @__PURE__ */ jsx("div", { className: "text-2xs text-foreground-lighter pt-1 border-t border-border", children: locale === "fa" ? `\u0645\u06CC\u0627\u0646\u06AF\u06CC\u0646 ${convertToLocalNumbers(postsPerWeek.toFixed(1), "fa")} \u067E\u0633\u062A \u062F\u0631 \u0647\u0641\u062A\u0647` : locale === "ar" ? `\u0645\u062A\u0648\u0633\u0637 ${convertToLocalNumbers(postsPerWeek.toFixed(1), "ar")} \u0645\u0646\u0634\u0648\u0631 \u0641\u064A \u0627\u0644\u0623\u0633\u0628\u0648\u0639` : `Avg ${postsPerWeek.toFixed(1)} posts/week` })
400
- ]
401
- }
402
- );
403
- }
404
- );
405
- PageCard.displayName = "PageCard";
406
-
407
- export { BotDetectionMeter, PageCard, SocialPlatformBadge, socialPlatformBadgeVariants };
408
- //# sourceMappingURL=chunk-5HCXH6GS.js.map
409
- //# sourceMappingURL=chunk-5HCXH6GS.js.map