@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,18 +1,311 @@
1
+ 'use client';
1
2
  'use strict';
2
3
 
3
- var chunkMMC6M35Q_cjs = require('../../chunk-MMC6M35Q.cjs');
4
- require('../../chunk-K6G63EED.cjs');
5
- require('../../chunk-NV4JOKWL.cjs');
4
+ var reactSlot = require('@radix-ui/react-slot');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var lucideReact = require('lucide-react');
7
+ var react = require('react');
8
+ var clsx = require('clsx');
9
+ var tailwindMerge = require('tailwind-merge');
10
+ var jsxRuntime = require('react/jsx-runtime');
6
11
 
7
-
8
-
9
- Object.defineProperty(exports, "Button", {
10
- enumerable: true,
11
- get: function () { return chunkMMC6M35Q_cjs.Button; }
12
+ // src/lib/constants.ts
13
+ var SIZE = {
14
+ text: {
15
+ xs: "text-xs",
16
+ sm: "text-sm leading-4",
17
+ md: "text-sm",
18
+ lg: "text-base",
19
+ xl: "text-base"
20
+ },
21
+ padding: {
22
+ xs: "px-2.5 py-1",
23
+ sm: "px-3 py-2",
24
+ md: "px-4 py-2",
25
+ lg: "px-4 py-2",
26
+ xl: "px-6 py-3"
27
+ },
28
+ height: {
29
+ xs: "h-[26px]",
30
+ sm: "h-[34px]",
31
+ md: "h-[38px]",
32
+ lg: "h-[42px]",
33
+ xl: "h-[50px]"
34
+ }
35
+ };
36
+ var SIZE_VARIANTS = {
37
+ xs: `${SIZE.text["xs"]} ${SIZE.padding["xs"]} ${SIZE.height["xs"]}`,
38
+ sm: `${SIZE.text["sm"]} ${SIZE.padding["sm"]} ${SIZE.height["sm"]}`,
39
+ md: `${SIZE.text["md"]} ${SIZE.padding["md"]} ${SIZE.height["md"]}`,
40
+ lg: `${SIZE.text["lg"]} ${SIZE.padding["lg"]} ${SIZE.height["lg"]}`,
41
+ xl: `${SIZE.text["xl"]} ${SIZE.padding["xl"]} ${SIZE.height["xl"]}`
42
+ };
43
+ function cn(...inputs) {
44
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
45
+ }
46
+ var DESTRUCTIVE_VARIANT = `
47
+ text-foreground
48
+ bg-destructive-300 dark:bg-destructive-400 hover:bg-destructive-400 dark:hover:bg-destructive-400/80
49
+ border-destructive-500 hover:border-destructive
50
+ hover:text-hi-contrast
51
+ data-[state=open]:border-destructive
52
+ data-[state=open]:bg-destructive-400 dark:data-[state=open]:bg-destructive-600/80
53
+ `;
54
+ var buttonVariants = classVarianceAuthority.cva(
55
+ `inline-flex items-center justify-center
56
+ relative
57
+ cursor-pointer
58
+ gap-2
59
+ text-center
60
+ font-normal
61
+ ease-out
62
+ duration-200
63
+ rounded-md
64
+ outline-none
65
+ transition-all
66
+ active:scale-[0.98]
67
+ focus-visible:ring-2
68
+ focus-visible:ring-ring
69
+ focus-visible:ring-offset-2
70
+ border
71
+ disabled:pointer-events-none
72
+ disabled:opacity-50
73
+ [&_svg]:pointer-events-none
74
+ [&_svg]:shrink-0
75
+ `,
76
+ {
77
+ variants: {
78
+ variant: {
79
+ primary: `
80
+ bg-brand-400 dark:bg-brand-500
81
+ hover:bg-brand-300 dark:hover:bg-brand-500/80
82
+ text-foreground
83
+ border-brand-500/75 dark:border-brand/30
84
+ hover:border-brand-600 dark:hover:border-brand-500
85
+ data-[state=open]:bg-brand-400/80 dark:data-[state=open]:bg-brand-600/80
86
+ `,
87
+ default: `
88
+ text-foreground
89
+ bg-alternative dark:bg-muted hover:bg-selection
90
+ border-strong hover:border-stronger
91
+ data-[state=open]:bg-selection
92
+ data-[state=open]:border-button-hover
93
+ `,
94
+ secondary: `
95
+ bg-foreground
96
+ text-background hover:text-border-stronger
97
+ focus-visible:text-border-control
98
+ border-foreground-light hover:border-foreground-lighter
99
+ data-[state=open]:border-foreground-lighter
100
+ `,
101
+ outline: `
102
+ text-foreground
103
+ bg-transparent
104
+ border-strong hover:border-foreground-muted
105
+ data-[state=open]:border-stronger
106
+ `,
107
+ dashed: `
108
+ text-foreground
109
+ border
110
+ border-dashed
111
+ border-strong hover:border-stronger
112
+ bg-transparent
113
+ data-[state=open]:border-stronger
114
+ `,
115
+ link: `
116
+ text-brand-600
117
+ border
118
+ border-transparent
119
+ bg-transparent
120
+ hover:bg-brand-400
121
+ shadow-none
122
+ data-[state=open]:bg-brand-400
123
+ `,
124
+ text: `
125
+ text-foreground
126
+ hover:bg-surface-300
127
+ shadow-none
128
+ data-[state=open]:bg-surface-300
129
+ border-transparent
130
+ `,
131
+ danger: DESTRUCTIVE_VARIANT,
132
+ warning: `
133
+ text-foreground
134
+ bg-warning-300 dark:bg-warning-400 hover:bg-warning-400 dark:hover:bg-warning-400/80
135
+ border-warning-500 hover:border-warning
136
+ hover:text-hi-contrast
137
+ data-[state=open]:border-warning
138
+ data-[state=open]:bg-warning-400 dark:data-[state=open]:bg-warning-600/80
139
+ `,
140
+ destructive: DESTRUCTIVE_VARIANT,
141
+ ghost: `
142
+ text-foreground
143
+ hover:bg-surface-100 dark:hover:bg-surface-200
144
+ border-transparent
145
+ `
146
+ },
147
+ block: {
148
+ true: "w-full flex items-center justify-center"
149
+ },
150
+ size: {
151
+ ...SIZE_VARIANTS,
152
+ default: SIZE_VARIANTS.sm,
153
+ icon: "size-9",
154
+ // Compact icon-only button (24×24). Useful for dense rows in tables
155
+ // and toolbars. Pair with a 14px lucide icon for a balanced look.
156
+ "icon-xs": "size-6",
157
+ "icon-sm": "size-7",
158
+ "icon-lg": "size-10"
159
+ },
160
+ disabled: {
161
+ true: "opacity-50 cursor-not-allowed pointer-events-none"
162
+ },
163
+ rounded: {
164
+ true: "rounded-full"
165
+ }
166
+ },
167
+ defaultVariants: {
168
+ variant: "default",
169
+ size: "sm"
170
+ }
171
+ }
172
+ );
173
+ var IconContainerVariants = classVarianceAuthority.cva("inline-flex items-center justify-center", {
174
+ variants: {
175
+ size: {
176
+ xs: "[&_svg]:size-[14px]",
177
+ sm: "[&_svg]:size-[18px]",
178
+ md: "[&_svg]:size-[20px]",
179
+ lg: "[&_svg]:size-[20px]",
180
+ xl: "[&_svg]:size-[24px]",
181
+ /** @deprecated */
182
+ tiny: "[&_svg]:size-[14px]",
183
+ /** @deprecated */
184
+ small: "[&_svg]:size-[18px]",
185
+ /** @deprecated */
186
+ medium: "[&_svg]:size-[20px]",
187
+ /** @deprecated */
188
+ large: "[&_svg]:size-[20px]",
189
+ /** @deprecated */
190
+ xlarge: "[&_svg]:size-[24px]",
191
+ default: "[&_svg]:size-[18px]",
192
+ icon: "[&_svg]:size-[18px]"
193
+ },
194
+ variant: {
195
+ primary: "text-brand-600",
196
+ default: "text-foreground-lighter",
197
+ secondary: "text-border-muted",
198
+ outline: "text-foreground-lighter",
199
+ dashed: "text-foreground-lighter",
200
+ link: "text-brand-600",
201
+ text: "text-foreground-lighter",
202
+ danger: "text-destructive-600",
203
+ warning: "text-warning",
204
+ destructive: "text-destructive-600",
205
+ ghost: "text-foreground-lighter"
206
+ }
207
+ }
12
208
  });
13
- Object.defineProperty(exports, "buttonVariants", {
14
- enumerable: true,
15
- get: function () { return chunkMMC6M35Q_cjs.buttonVariants; }
209
+ var loadingVariants = classVarianceAuthority.cva("", {
210
+ variants: {
211
+ variant: {
212
+ primary: "text-brand-600",
213
+ default: "text-foreground-lighter",
214
+ secondary: "text-border-muted",
215
+ outline: "text-foreground-lighter",
216
+ dashed: "text-foreground-lighter",
217
+ link: "text-brand-600",
218
+ text: "text-foreground-muted",
219
+ danger: "text-destructive-600",
220
+ warning: "text-warning",
221
+ destructive: "text-destructive-600",
222
+ ghost: "text-foreground-lighter"
223
+ },
224
+ loading: {
225
+ default: "",
226
+ true: `animate-spin`
227
+ }
228
+ }
16
229
  });
230
+ var Button = react.forwardRef(
231
+ ({
232
+ asChild = false,
233
+ variant,
234
+ type,
235
+ size = "sm",
236
+ children,
237
+ isLoading,
238
+ loading,
239
+ block,
240
+ icon,
241
+ iconEnd,
242
+ iconStart,
243
+ iconRight,
244
+ iconLeft,
245
+ htmlType = "button",
246
+ rounded,
247
+ className,
248
+ ...props
249
+ }, ref) => {
250
+ if (process.env.NODE_ENV !== "production") {
251
+ const deprecatedSizes = ["tiny", "small", "medium", "large", "xlarge"];
252
+ if (size && deprecatedSizes.includes(size)) {
253
+ console.warn(`[Parto UI] Button: size="${size}" is deprecated. Use xs|sm|md|lg|xl instead.`);
254
+ }
255
+ }
256
+ const Comp = asChild ? reactSlot.Slot : "button";
257
+ const { tabIndex } = props;
258
+ const buttonVariant = type && typeof type === "string" && !["button", "submit", "reset"].includes(type) ? type : variant || "default";
259
+ const _loading = isLoading ?? loading;
260
+ const resolvedIconStart = icon ?? iconStart ?? iconLeft;
261
+ const resolvedIconEnd = iconEnd ?? iconRight;
262
+ const showIcon = _loading || resolvedIconStart;
263
+ const disabled = _loading === true || props.disabled;
264
+ const computedTabIndex = tabIndex !== void 0 ? tabIndex : disabled ? -1 : 0;
265
+ const iconSize = size === "default" ? "sm" : size === "icon" || size === "icon-sm" ? "sm" : size === "icon-xs" ? "xs" : size === "icon-lg" ? "lg" : size ?? "sm";
266
+ return /* @__PURE__ */ jsxRuntime.jsx(
267
+ Comp,
268
+ {
269
+ ref,
270
+ "data-slot": "button",
271
+ "data-size": size,
272
+ type: htmlType,
273
+ disabled,
274
+ "aria-busy": _loading || void 0,
275
+ tabIndex: computedTabIndex,
276
+ className: cn(buttonVariants({ variant: buttonVariant, size, disabled, block, rounded }), className),
277
+ onClick: (e) => {
278
+ if (disabled) return e.preventDefault();
279
+ else props?.onClick?.(e);
280
+ },
281
+ ...props,
282
+ children: asChild ? react.isValidElement(children) ? react.cloneElement(
283
+ children,
284
+ void 0,
285
+ showIcon && (_loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: cn(loadingVariants({ loading: _loading, variant: buttonVariant })) }) }) : resolvedIconStart ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: resolvedIconStart }) : null),
286
+ children.props?.children && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center gap-2 truncate", children: children.props.children }),
287
+ resolvedIconEnd && !_loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: resolvedIconEnd })
288
+ ) : null : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
289
+ showIcon && (_loading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: [
290
+ /* @__PURE__ */ jsxRuntime.jsx(
291
+ lucideReact.Loader2,
292
+ {
293
+ "aria-hidden": "true",
294
+ className: cn(loadingVariants({ loading: _loading, variant: buttonVariant }))
295
+ }
296
+ ),
297
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC..." })
298
+ ] }) : resolvedIconStart ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: resolvedIconStart }) : null),
299
+ children && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center gap-2 truncate", children }),
300
+ resolvedIconEnd && !_loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(IconContainerVariants({ size: iconSize, variant: buttonVariant })), children: resolvedIconEnd })
301
+ ] })
302
+ }
303
+ );
304
+ }
305
+ );
306
+ Button.displayName = "Button";
307
+
308
+ exports.Button = Button;
309
+ exports.buttonVariants = buttonVariants;
17
310
  //# sourceMappingURL=button.cjs.map
18
311
  //# sourceMappingURL=button.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"button.cjs"}
1
+ {"version":3,"sources":["../../../src/lib/constants.ts","../../../src/lib/utils.ts","../../../src/components/ui/button.tsx"],"names":["twMerge","clsx","cva","forwardRef","Slot","jsx","isValidElement","cloneElement","Loader2","jsxs","Fragment"],"mappings":"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","file":"button.cjs","sourcesContent":["/**\n * Standard size scale used across the design system.\n * Components should accept these values for their `size` prop.\n */\nexport type StandardSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/** @deprecated Use `StandardSize` instead — legacy names have been removed */\nexport type LegacySize = StandardSize\n\n/** @deprecated Use `StandardSize` instead */\nexport type SizeWithLegacy = StandardSize\n\n/**\n * Normalizes a size value to standard names.\n * @deprecated All sizes are standard now — this function is a no-op passthrough.\n */\nexport function normalizeSize(size: StandardSize): StandardSize {\n return size\n}\n\nexport const SIZE = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[26px]',\n sm: 'h-[34px]',\n md: 'h-[38px]',\n lg: 'h-[42px]',\n xl: 'h-[50px]',\n },\n}\n\n/** Inner sizes for nested elements (badges inside buttons, multi-select items, etc.) */\nexport const SIZE_INNER = {\n text: {\n xs: 'text-xs',\n sm: 'text-sm leading-4',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-base',\n },\n padding: {\n xs: 'px-2.5 py-1',\n sm: 'px-3 py-2',\n md: 'px-4 py-2',\n lg: 'px-4 py-2',\n xl: 'px-6 py-3',\n },\n height: {\n xs: 'h-[24px]',\n sm: 'h-[28px]',\n md: 'h-[32px]',\n lg: 'h-[36px]',\n xl: 'h-[44px]',\n },\n}\n\nexport const SIZE_VARIANTS = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE.height['xl']}`,\n}\n\nexport const SIZE_VARIANTS_INNER = {\n xs: `${SIZE.text['xs']} ${SIZE.padding['xs']} ${SIZE_INNER.height['xs']}`,\n sm: `${SIZE.text['sm']} ${SIZE.padding['sm']} ${SIZE_INNER.height['sm']}`,\n md: `${SIZE.text['md']} ${SIZE.padding['md']} ${SIZE_INNER.height['md']}`,\n lg: `${SIZE.text['lg']} ${SIZE.padding['lg']} ${SIZE_INNER.height['lg']}`,\n xl: `${SIZE.text['xl']} ${SIZE.padding['xl']} ${SIZE_INNER.height['xl']}`,\n}\n\n/** @deprecated Use 'sm' instead */\nexport const SIZE_VARIANTS_DEFAULT = 'sm'\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","'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, type StandardSize } 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-400/80\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-500/80\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 bg-transparent\n hover:bg-brand-400\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-400/80\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 // Compact icon-only button (24×24). Useful for dense rows in tables\n // and toolbars. Pair with a 14px lucide icon for a balanced look.\n 'icon-xs': 'size-6',\n 'icon-sm': 'size-7',\n 'icon-lg': 'size-10',\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: 'sm',\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 = 'sm',\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. Icon-only Button variants\n // (\"icon\", \"icon-xs\", \"icon-sm\", \"icon-lg\") share the same SVG sizing\n // family — IconContainerVariants doesn't have those keys, so we collapse\n // each to the closest standard size for icon scaling.\n const iconSize: StandardSize | 'default' | 'icon' =\n size === 'default'\n ? 'sm'\n : size === 'icon' || size === 'icon-sm'\n ? 'sm'\n : size === 'icon-xs'\n ? 'xs'\n : size === 'icon-lg'\n ? 'lg'\n : (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"]}
@@ -4,15 +4,15 @@ import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  type ButtonVariantProps = VariantProps<typeof buttonVariants>;
6
6
  declare const buttonVariants: (props?: ({
7
- variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
7
+ variant?: "link" | "warning" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
8
8
  block?: boolean | null | undefined;
9
- size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | null | undefined;
9
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
10
  disabled?: boolean | null | undefined;
11
11
  rounded?: boolean | null | undefined;
12
12
  } & class_variance_authority_types.ClassProp) | undefined) => string;
13
13
  type LoadingVariantProps = VariantProps<typeof loadingVariants>;
14
14
  declare const loadingVariants: (props?: ({
15
- variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
15
+ variant?: "link" | "warning" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
16
16
  loading?: boolean | "default" | null | undefined;
17
17
  } & class_variance_authority_types.ClassProp) | undefined) => string;
18
18
  interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {
@@ -4,15 +4,15 @@ import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  type ButtonVariantProps = VariantProps<typeof buttonVariants>;
6
6
  declare const buttonVariants: (props?: ({
7
- variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
7
+ variant?: "link" | "warning" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
8
8
  block?: boolean | null | undefined;
9
- size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | null | undefined;
9
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
10
  disabled?: boolean | null | undefined;
11
11
  rounded?: boolean | null | undefined;
12
12
  } & class_variance_authority_types.ClassProp) | undefined) => string;
13
13
  type LoadingVariantProps = VariantProps<typeof loadingVariants>;
14
14
  declare const loadingVariants: (props?: ({
15
- variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
15
+ variant?: "link" | "warning" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
16
16
  loading?: boolean | "default" | null | undefined;
17
17
  } & class_variance_authority_types.ClassProp) | undefined) => string;
18
18
  interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {