@parto-system-design/ui 1.1.11 → 1.1.17

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 (409) 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.js +96 -2
  60. package/dist/components/ui/badge.js.map +1 -1
  61. package/dist/components/ui/breadcrumb.cjs +100 -0
  62. package/dist/components/ui/breadcrumb.cjs.map +1 -0
  63. package/dist/components/ui/breadcrumb.d.cts +35 -0
  64. package/dist/components/ui/breadcrumb.d.ts +35 -0
  65. package/dist/components/ui/breadcrumb.js +92 -0
  66. package/dist/components/ui/breadcrumb.js.map +1 -0
  67. package/dist/components/ui/button.cjs +304 -11
  68. package/dist/components/ui/button.cjs.map +1 -1
  69. package/dist/components/ui/button.d.cts +1 -1
  70. package/dist/components/ui/button.d.ts +1 -1
  71. package/dist/components/ui/button.js +306 -3
  72. package/dist/components/ui/button.js.map +1 -1
  73. package/dist/components/ui/calendar.cjs +401 -8
  74. package/dist/components/ui/calendar.cjs.map +1 -1
  75. package/dist/components/ui/calendar.js +404 -4
  76. package/dist/components/ui/calendar.js.map +1 -1
  77. package/dist/components/ui/card.cjs +154 -30
  78. package/dist/components/ui/card.cjs.map +1 -1
  79. package/dist/components/ui/card.js +131 -2
  80. package/dist/components/ui/card.js.map +1 -1
  81. package/dist/{chunk-CAJKSTXX.cjs → components/ui/checkbox.cjs} +10 -5
  82. package/dist/components/ui/checkbox.cjs.map +1 -0
  83. package/dist/components/ui/checkbox.d.cts +6 -0
  84. package/dist/components/ui/checkbox.d.ts +6 -0
  85. package/dist/{chunk-5JJSRGJD.js → components/ui/checkbox.js} +9 -4
  86. package/dist/components/ui/checkbox.js.map +1 -0
  87. package/dist/components/ui/concept-card.cjs +728 -11
  88. package/dist/components/ui/concept-card.cjs.map +1 -1
  89. package/dist/components/ui/concept-card.d.cts +2 -2
  90. package/dist/components/ui/concept-card.d.ts +2 -2
  91. package/dist/components/ui/concept-card.js +710 -7
  92. package/dist/components/ui/concept-card.js.map +1 -1
  93. package/dist/components/ui/data-table.cjs +1553 -10
  94. package/dist/components/ui/data-table.cjs.map +1 -1
  95. package/dist/components/ui/data-table.js +1537 -7
  96. package/dist/components/ui/data-table.js.map +1 -1
  97. package/dist/components/ui/dialog.cjs +119 -42
  98. package/dist/components/ui/dialog.cjs.map +1 -1
  99. package/dist/components/ui/dialog.js +92 -2
  100. package/dist/components/ui/dialog.js.map +1 -1
  101. package/dist/components/ui/dropdown-menu.cjs +268 -0
  102. package/dist/components/ui/dropdown-menu.cjs.map +1 -0
  103. package/dist/components/ui/dropdown-menu.d.cts +73 -0
  104. package/dist/components/ui/dropdown-menu.d.ts +73 -0
  105. package/dist/components/ui/dropdown-menu.js +232 -0
  106. package/dist/components/ui/dropdown-menu.js.map +1 -0
  107. package/dist/components/ui/filter-provider.cjs +70 -13
  108. package/dist/components/ui/filter-provider.cjs.map +1 -1
  109. package/dist/components/ui/filter-provider.js +51 -1
  110. package/dist/components/ui/filter-provider.js.map +1 -1
  111. package/dist/components/ui/form.cjs +169 -0
  112. package/dist/components/ui/form.cjs.map +1 -0
  113. package/dist/components/ui/form.d.cts +46 -0
  114. package/dist/components/ui/form.d.ts +46 -0
  115. package/dist/components/ui/form.js +139 -0
  116. package/dist/components/ui/form.js.map +1 -0
  117. package/dist/components/ui/input.cjs +135 -15
  118. package/dist/components/ui/input.cjs.map +1 -1
  119. package/dist/components/ui/input.d.cts +15 -0
  120. package/dist/components/ui/input.d.ts +15 -0
  121. package/dist/components/ui/input.js +116 -3
  122. package/dist/components/ui/input.js.map +1 -1
  123. package/dist/components/ui/iran-province-heat.cjs +328 -5
  124. package/dist/components/ui/iran-province-heat.cjs.map +1 -1
  125. package/dist/components/ui/iran-province-heat.js +312 -2
  126. package/dist/components/ui/iran-province-heat.js.map +1 -1
  127. package/dist/components/ui/label.cjs +52 -0
  128. package/dist/components/ui/label.cjs.map +1 -0
  129. package/dist/components/ui/label.d.cts +10 -0
  130. package/dist/components/ui/label.d.ts +10 -0
  131. package/dist/components/ui/label.js +30 -0
  132. package/dist/components/ui/label.js.map +1 -0
  133. package/dist/components/ui/page-card.cjs +627 -8
  134. package/dist/components/ui/page-card.cjs.map +1 -1
  135. package/dist/components/ui/page-card.d.cts +3 -2
  136. package/dist/components/ui/page-card.d.ts +3 -2
  137. package/dist/components/ui/page-card.js +611 -5
  138. package/dist/components/ui/page-card.js.map +1 -1
  139. package/dist/components/ui/page-header.cjs +299 -0
  140. package/dist/components/ui/page-header.cjs.map +1 -0
  141. package/dist/components/ui/page-header.d.cts +21 -0
  142. package/dist/components/ui/page-header.d.ts +21 -0
  143. package/dist/components/ui/page-header.js +277 -0
  144. package/dist/components/ui/page-header.js.map +1 -0
  145. package/dist/components/ui/password-input.cjs +168 -0
  146. package/dist/components/ui/password-input.cjs.map +1 -0
  147. package/dist/components/ui/password-input.d.cts +48 -0
  148. package/dist/components/ui/password-input.d.ts +48 -0
  149. package/dist/components/ui/password-input.js +146 -0
  150. package/dist/components/ui/password-input.js.map +1 -0
  151. package/dist/components/ui/popover.cjs +51 -18
  152. package/dist/components/ui/popover.cjs.map +1 -1
  153. package/dist/components/ui/popover.js +30 -2
  154. package/dist/components/ui/popover.js.map +1 -1
  155. package/dist/components/ui/progress.cjs +95 -0
  156. package/dist/components/ui/progress.cjs.map +1 -0
  157. package/dist/components/ui/progress.d.cts +18 -0
  158. package/dist/components/ui/progress.d.ts +18 -0
  159. package/dist/components/ui/progress.js +72 -0
  160. package/dist/components/ui/progress.js.map +1 -0
  161. package/dist/components/ui/radio-card.cjs +84 -0
  162. package/dist/components/ui/radio-card.cjs.map +1 -0
  163. package/dist/components/ui/radio-card.d.cts +12 -0
  164. package/dist/components/ui/radio-card.d.ts +12 -0
  165. package/dist/components/ui/radio-card.js +58 -0
  166. package/dist/components/ui/radio-card.js.map +1 -0
  167. package/dist/components/ui/radio-group.cjs +62 -0
  168. package/dist/components/ui/radio-group.cjs.map +1 -0
  169. package/dist/components/ui/radio-group.d.cts +7 -0
  170. package/dist/components/ui/radio-group.d.ts +7 -0
  171. package/dist/components/ui/radio-group.js +38 -0
  172. package/dist/components/ui/radio-group.js.map +1 -0
  173. package/dist/components/ui/saved-query-card.cjs +409 -7
  174. package/dist/components/ui/saved-query-card.cjs.map +1 -1
  175. package/dist/components/ui/saved-query-card.js +394 -4
  176. package/dist/components/ui/saved-query-card.js.map +1 -1
  177. package/dist/components/ui/scroll-area.cjs +79 -0
  178. package/dist/components/ui/scroll-area.cjs.map +1 -0
  179. package/dist/components/ui/scroll-area.d.cts +14 -0
  180. package/dist/components/ui/scroll-area.d.ts +14 -0
  181. package/dist/components/ui/scroll-area.js +56 -0
  182. package/dist/components/ui/scroll-area.js.map +1 -0
  183. package/dist/components/ui/select.cjs +242 -0
  184. package/dist/components/ui/select.cjs.map +1 -0
  185. package/dist/components/ui/select.d.cts +29 -0
  186. package/dist/components/ui/select.d.ts +29 -0
  187. package/dist/components/ui/select.js +210 -0
  188. package/dist/components/ui/select.js.map +1 -0
  189. package/dist/components/ui/separator.cjs +105 -6
  190. package/dist/components/ui/separator.cjs.map +1 -1
  191. package/dist/components/ui/separator.js +87 -2
  192. package/dist/components/ui/separator.js.map +1 -1
  193. package/dist/components/ui/sheet.cjs +134 -38
  194. package/dist/components/ui/sheet.cjs.map +1 -1
  195. package/dist/components/ui/sheet.js +109 -2
  196. package/dist/components/ui/sheet.js.map +1 -1
  197. package/dist/{chunk-D2EBLE2B.cjs → components/ui/skeleton.cjs} +21 -16
  198. package/dist/components/ui/skeleton.cjs.map +1 -0
  199. package/dist/components/ui/skeleton.d.cts +90 -0
  200. package/dist/components/ui/skeleton.d.ts +90 -0
  201. package/dist/{chunk-SB5DSYR5.js → components/ui/skeleton.js} +8 -3
  202. package/dist/components/ui/skeleton.js.map +1 -0
  203. package/dist/components/ui/slider.cjs +129 -0
  204. package/dist/components/ui/slider.cjs.map +1 -0
  205. package/dist/components/ui/slider.d.cts +10 -0
  206. package/dist/components/ui/slider.d.ts +10 -0
  207. package/dist/components/ui/slider.js +107 -0
  208. package/dist/components/ui/slider.js.map +1 -0
  209. package/dist/components/ui/social-platform-badge.cjs +120 -0
  210. package/dist/components/ui/social-platform-badge.cjs.map +1 -0
  211. package/dist/components/ui/social-platform-badge.d.cts +21 -0
  212. package/dist/components/ui/social-platform-badge.d.ts +21 -0
  213. package/dist/components/ui/social-platform-badge.js +97 -0
  214. package/dist/components/ui/social-platform-badge.js.map +1 -0
  215. package/dist/components/ui/sonner.cjs +51 -0
  216. package/dist/components/ui/sonner.cjs.map +1 -0
  217. package/dist/components/ui/sonner.d.cts +13 -0
  218. package/dist/components/ui/sonner.d.ts +13 -0
  219. package/dist/components/ui/sonner.js +45 -0
  220. package/dist/components/ui/sonner.js.map +1 -0
  221. package/dist/components/ui/sparkline.cjs +159 -6
  222. package/dist/components/ui/sparkline.cjs.map +1 -1
  223. package/dist/components/ui/sparkline.js +142 -2
  224. package/dist/components/ui/sparkline.js.map +1 -1
  225. package/dist/components/ui/switch.cjs +96 -0
  226. package/dist/components/ui/switch.cjs.map +1 -0
  227. package/dist/components/ui/switch.d.cts +13 -0
  228. package/dist/components/ui/switch.d.ts +13 -0
  229. package/dist/components/ui/switch.js +73 -0
  230. package/dist/components/ui/switch.js.map +1 -0
  231. package/dist/components/ui/table.cjs +188 -0
  232. package/dist/components/ui/table.cjs.map +1 -0
  233. package/dist/components/ui/table.d.cts +59 -0
  234. package/dist/components/ui/table.d.ts +59 -0
  235. package/dist/components/ui/table.js +178 -0
  236. package/dist/components/ui/table.js.map +1 -0
  237. package/dist/components/ui/tabs.cjs +140 -0
  238. package/dist/components/ui/tabs.cjs.map +1 -0
  239. package/dist/components/ui/tabs.d.cts +21 -0
  240. package/dist/components/ui/tabs.d.ts +21 -0
  241. package/dist/components/ui/tabs.js +115 -0
  242. package/dist/components/ui/tabs.js.map +1 -0
  243. package/dist/components/ui/textarea.cjs +56 -0
  244. package/dist/components/ui/textarea.cjs.map +1 -0
  245. package/dist/components/ui/textarea.d.cts +5 -0
  246. package/dist/components/ui/textarea.d.ts +5 -0
  247. package/dist/components/ui/textarea.js +34 -0
  248. package/dist/components/ui/textarea.js.map +1 -0
  249. package/dist/components/ui/toggle-group.cjs +123 -0
  250. package/dist/components/ui/toggle-group.cjs.map +1 -0
  251. package/dist/components/ui/toggle-group.d.cts +7 -0
  252. package/dist/components/ui/toggle-group.d.ts +7 -0
  253. package/dist/components/ui/toggle-group.js +99 -0
  254. package/dist/components/ui/toggle-group.js.map +1 -0
  255. package/dist/components/ui/tooltip.cjs +77 -18
  256. package/dist/components/ui/tooltip.cjs.map +1 -1
  257. package/dist/components/ui/tooltip.js +56 -2
  258. package/dist/components/ui/tooltip.js.map +1 -1
  259. package/dist/{concept-card-RwPbqJ06.d.cts → concept-card-BXra9mr0.d.cts} +2 -2
  260. package/dist/{concept-card-CcOBb2Nz.d.ts → concept-card-BoJ5gIJD.d.ts} +2 -2
  261. package/dist/hooks/use-hotkey-registry.cjs +201 -14
  262. package/dist/hooks/use-hotkey-registry.cjs.map +1 -1
  263. package/dist/hooks/use-hotkey-registry.js +182 -2
  264. package/dist/hooks/use-hotkey-registry.js.map +1 -1
  265. package/dist/hooks/use-hotkeys.cjs +144 -9
  266. package/dist/hooks/use-hotkeys.cjs.map +1 -1
  267. package/dist/hooks/use-hotkeys.js +126 -1
  268. package/dist/hooks/use-hotkeys.js.map +1 -1
  269. package/dist/{i18n-CAd9wGOr.d.cts → i18n-BfRhV5aw.d.cts} +5 -3
  270. package/dist/{i18n-ArS3mqj0.d.ts → i18n-ewyqbKM-.d.ts} +5 -3
  271. package/dist/index.cjs +21003 -15720
  272. package/dist/index.cjs.map +1 -1
  273. package/dist/index.css +412 -71
  274. package/dist/index.d.cts +82 -490
  275. package/dist/index.d.ts +82 -490
  276. package/dist/index.js +6727 -976
  277. package/dist/index.js.map +1 -1
  278. package/dist/{page-card-CmShVqG-.d.cts → page-card-C9XXXOVr.d.cts} +3 -20
  279. package/dist/{page-card-HBn-cy4J.d.ts → page-card-DAnbez_f.d.ts} +3 -20
  280. package/dist/toggle-group-B8r4LOQw.d.cts +26 -0
  281. package/dist/toggle-group-B8r4LOQw.d.ts +26 -0
  282. package/package.json +132 -2
  283. package/tailwind.config.ts +45 -0
  284. package/dist/chunk-2ACKKPWA.cjs +0 -112
  285. package/dist/chunk-2ACKKPWA.cjs.map +0 -1
  286. package/dist/chunk-2UD3LGVX.cjs +0 -316
  287. package/dist/chunk-2UD3LGVX.cjs.map +0 -1
  288. package/dist/chunk-3QYYPPFJ.js.map +0 -1
  289. package/dist/chunk-4SVQNEVH.js +0 -173
  290. package/dist/chunk-4SVQNEVH.js.map +0 -1
  291. package/dist/chunk-4WONHORR.cjs +0 -152
  292. package/dist/chunk-4WONHORR.cjs.map +0 -1
  293. package/dist/chunk-5HCXH6GS.js +0 -409
  294. package/dist/chunk-5HCXH6GS.js.map +0 -1
  295. package/dist/chunk-5JJSRGJD.js.map +0 -1
  296. package/dist/chunk-5K6E4ZSW.cjs +0 -77
  297. package/dist/chunk-5K6E4ZSW.cjs.map +0 -1
  298. package/dist/chunk-5NY26ULO.js +0 -89
  299. package/dist/chunk-5NY26ULO.js.map +0 -1
  300. package/dist/chunk-7RVPG3LE.cjs +0 -231
  301. package/dist/chunk-7RVPG3LE.cjs.map +0 -1
  302. package/dist/chunk-AYEK3WOM.js +0 -207
  303. package/dist/chunk-AYEK3WOM.js.map +0 -1
  304. package/dist/chunk-BRMBLIQG.js +0 -53
  305. package/dist/chunk-BRMBLIQG.js.map +0 -1
  306. package/dist/chunk-CAJKSTXX.cjs.map +0 -1
  307. package/dist/chunk-CKFWMHQU.js +0 -401
  308. package/dist/chunk-CKFWMHQU.js.map +0 -1
  309. package/dist/chunk-CV3N3HVK.js +0 -672
  310. package/dist/chunk-CV3N3HVK.js.map +0 -1
  311. package/dist/chunk-D2EBLE2B.cjs.map +0 -1
  312. package/dist/chunk-GCZ6YATL.js +0 -940
  313. package/dist/chunk-GCZ6YATL.js.map +0 -1
  314. package/dist/chunk-GKRAZGDI.cjs +0 -84
  315. package/dist/chunk-GKRAZGDI.cjs.map +0 -1
  316. package/dist/chunk-GPYJ66CG.js +0 -45
  317. package/dist/chunk-GPYJ66CG.js.map +0 -1
  318. package/dist/chunk-HF6XU5NI.js +0 -84
  319. package/dist/chunk-HF6XU5NI.js.map +0 -1
  320. package/dist/chunk-HJPDZOMJ.cjs +0 -87
  321. package/dist/chunk-HJPDZOMJ.cjs.map +0 -1
  322. package/dist/chunk-HS3XI3CC.cjs +0 -69
  323. package/dist/chunk-HS3XI3CC.cjs.map +0 -1
  324. package/dist/chunk-HUCC3QH5.cjs +0 -53
  325. package/dist/chunk-HUCC3QH5.cjs.map +0 -1
  326. package/dist/chunk-HYZ6BQPS.cjs +0 -425
  327. package/dist/chunk-HYZ6BQPS.cjs.map +0 -1
  328. package/dist/chunk-ISCSZMYW.cjs +0 -106
  329. package/dist/chunk-ISCSZMYW.cjs.map +0 -1
  330. package/dist/chunk-IXFEFIDO.js +0 -82
  331. package/dist/chunk-IXFEFIDO.js.map +0 -1
  332. package/dist/chunk-JCJLN437.js +0 -108
  333. package/dist/chunk-JCJLN437.js.map +0 -1
  334. package/dist/chunk-JMKNNH63.cjs +0 -982
  335. package/dist/chunk-JMKNNH63.cjs.map +0 -1
  336. package/dist/chunk-JUBHQAA2.js +0 -53
  337. package/dist/chunk-JUBHQAA2.js.map +0 -1
  338. package/dist/chunk-K6G63EED.cjs +0 -41
  339. package/dist/chunk-K6G63EED.cjs.map +0 -1
  340. package/dist/chunk-KCWRCSI7.js +0 -62
  341. package/dist/chunk-KCWRCSI7.js.map +0 -1
  342. package/dist/chunk-KYM7NIJO.cjs +0 -433
  343. package/dist/chunk-KYM7NIJO.cjs.map +0 -1
  344. package/dist/chunk-L2L5CKC2.js +0 -291
  345. package/dist/chunk-L2L5CKC2.js.map +0 -1
  346. package/dist/chunk-M5CHZ5BA.js +0 -124
  347. package/dist/chunk-M5CHZ5BA.js.map +0 -1
  348. package/dist/chunk-MEK4RSGC.js +0 -65
  349. package/dist/chunk-MEK4RSGC.js.map +0 -1
  350. package/dist/chunk-MEKWH3GS.js +0 -89
  351. package/dist/chunk-MEKWH3GS.js.map +0 -1
  352. package/dist/chunk-MFTX2DDQ.js +0 -27
  353. package/dist/chunk-MFTX2DDQ.js.map +0 -1
  354. package/dist/chunk-MMC6M35Q.cjs.map +0 -1
  355. package/dist/chunk-NMH43BDC.js +0 -130
  356. package/dist/chunk-NMH43BDC.js.map +0 -1
  357. package/dist/chunk-NORDUD2T.cjs +0 -135
  358. package/dist/chunk-NORDUD2T.cjs.map +0 -1
  359. package/dist/chunk-NV4JOKWL.cjs +0 -197
  360. package/dist/chunk-NV4JOKWL.cjs.map +0 -1
  361. package/dist/chunk-O2JG7WY5.cjs +0 -121
  362. package/dist/chunk-O2JG7WY5.cjs.map +0 -1
  363. package/dist/chunk-ONO2FTV4.cjs +0 -68
  364. package/dist/chunk-ONO2FTV4.cjs.map +0 -1
  365. package/dist/chunk-OQB6HIUL.cjs +0 -108
  366. package/dist/chunk-OQB6HIUL.cjs.map +0 -1
  367. package/dist/chunk-OS6CMYAS.cjs +0 -79
  368. package/dist/chunk-OS6CMYAS.cjs.map +0 -1
  369. package/dist/chunk-PYURPUTV.js +0 -402
  370. package/dist/chunk-PYURPUTV.js.map +0 -1
  371. package/dist/chunk-RJ3HYZ7S.js +0 -44
  372. package/dist/chunk-RJ3HYZ7S.js.map +0 -1
  373. package/dist/chunk-RZNRIOLT.js +0 -128
  374. package/dist/chunk-RZNRIOLT.js.map +0 -1
  375. package/dist/chunk-S3T2L6NA.js +0 -38
  376. package/dist/chunk-S3T2L6NA.js.map +0 -1
  377. package/dist/chunk-S5IPJQZ3.cjs +0 -161
  378. package/dist/chunk-S5IPJQZ3.cjs.map +0 -1
  379. package/dist/chunk-SB5DSYR5.js.map +0 -1
  380. package/dist/chunk-SFXV2DUH.js +0 -106
  381. package/dist/chunk-SFXV2DUH.js.map +0 -1
  382. package/dist/chunk-SXEPGD4Z.cjs +0 -152
  383. package/dist/chunk-SXEPGD4Z.cjs.map +0 -1
  384. package/dist/chunk-SXWSOU3Y.js +0 -89
  385. package/dist/chunk-SXWSOU3Y.js.map +0 -1
  386. package/dist/chunk-SZMVOHT7.cjs +0 -107
  387. package/dist/chunk-SZMVOHT7.cjs.map +0 -1
  388. package/dist/chunk-TWJXOV4C.js +0 -145
  389. package/dist/chunk-TWJXOV4C.js.map +0 -1
  390. package/dist/chunk-U3ADRIVO.cjs +0 -434
  391. package/dist/chunk-U3ADRIVO.cjs.map +0 -1
  392. package/dist/chunk-U5FLLCGC.cjs +0 -151
  393. package/dist/chunk-U5FLLCGC.cjs.map +0 -1
  394. package/dist/chunk-UOZN45G4.cjs +0 -130
  395. package/dist/chunk-UOZN45G4.cjs.map +0 -1
  396. package/dist/chunk-VHLDOG74.cjs +0 -167
  397. package/dist/chunk-VHLDOG74.cjs.map +0 -1
  398. package/dist/chunk-YC5KLN6I.js +0 -139
  399. package/dist/chunk-YC5KLN6I.js.map +0 -1
  400. package/dist/chunk-YENXXYUV.cjs +0 -111
  401. package/dist/chunk-YENXXYUV.cjs.map +0 -1
  402. package/dist/chunk-YFQWC2PW.js +0 -113
  403. package/dist/chunk-YFQWC2PW.js.map +0 -1
  404. package/dist/chunk-Z2TY4A75.cjs +0 -700
  405. package/dist/chunk-Z2TY4A75.cjs.map +0 -1
  406. package/dist/chunk-Z56O7UEU.cjs +0 -136
  407. package/dist/chunk-Z56O7UEU.cjs.map +0 -1
  408. package/dist/chunk-ZBZDR4ZC.js +0 -106
  409. 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":";;;;;;;;;;;AAoBO,IAAM,IAAA,GAAO;AAAA,EAClB,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,mBAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAA,EAAI,aAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;AA2BO,IAAM,aAAA,GAAgB;AAAA,EAC3B,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EACjE,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AACnE,CAAA;ACvEO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACKA,IAAM,mBAAA,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAS5B,IAAM,cAAA,GAAiBC,0BAAA;AAAA,EACrB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAqBA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAAA;AAAA,QAQT,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAAA;AAAA,QAOT,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QAOX,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QAMT,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QAQR,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QASN,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QAON,MAAA,EAAQ,mBAAA;AAAA,QACR,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,QAQT,WAAA,EAAa,mBAAA;AAAA,QACb,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA,QAAA;AAAA,OAKT;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,GAAG,aAAA;AAAA,QACH,SAAS,aAAA,CAAc,EAAA;AAAA,QACvB,IAAA,EAAM,QAAA;AAAA;AAAA;AAAA,QAGN,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACb;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,IAAM,qBAAA,GAAwBA,2BAAI,yCAAA,EAA2C;AAAA,EAC3E,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,qBAAA;AAAA,MACJ,EAAA,EAAI,qBAAA;AAAA,MACJ,EAAA,EAAI,qBAAA;AAAA,MACJ,EAAA,EAAI,qBAAA;AAAA,MACJ,EAAA,EAAI,qBAAA;AAAA;AAAA,MACe,IAAA,EAAM,qBAAA;AAAA;AAAA,MACN,KAAA,EAAO,qBAAA;AAAA;AAAA,MACP,MAAA,EAAQ,qBAAA;AAAA;AAAA,MACR,KAAA,EAAO,qBAAA;AAAA;AAAA,MACP,MAAA,EAAQ,qBAAA;AAAA,MAC3B,OAAA,EAAS,qBAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS,yBAAA;AAAA,MACT,SAAA,EAAW,mBAAA;AAAA,MACX,OAAA,EAAS,yBAAA;AAAA,MACT,MAAA,EAAQ,yBAAA;AAAA,MACR,IAAA,EAAM,gBAAA;AAAA,MACN,IAAA,EAAM,yBAAA;AAAA,MACN,MAAA,EAAQ,sBAAA;AAAA,MACR,OAAA,EAAS,cAAA;AAAA,MACT,WAAA,EAAa,sBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACT;AAEJ,CAAC,CAAA;AAGD,IAAM,eAAA,GAAkBA,2BAAI,EAAA,EAAI;AAAA,EAC9B,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS,yBAAA;AAAA,MACT,SAAA,EAAW,mBAAA;AAAA,MACX,OAAA,EAAS,yBAAA;AAAA,MACT,MAAA,EAAQ,yBAAA;AAAA,MACR,IAAA,EAAM,gBAAA;AAAA,MACN,IAAA,EAAM,uBAAA;AAAA,MACN,MAAA,EAAQ,sBAAA;AAAA,MACR,OAAA,EAAS,cAAA;AAAA,MACT,WAAA,EAAa,sBAAA;AAAA,MACb,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,IAAA,EAAM,CAAA,YAAA;AAAA;AACR;AAEJ,CAAC,CAAA;AAwBD,IAAM,MAAA,GAASC,gBAAA;AAAA,EACb,CACE;AAAA,IACE,OAAA,GAAU,KAAA;AAAA,IACV,OAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,QAAA;AAAA,IACX,OAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,MAAM,kBAAkB,CAAC,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,SAAS,QAAQ,CAAA;AACrE,MAAA,IAAI,IAAA,IAAQ,eAAA,CAAgB,QAAA,CAAS,IAAc,CAAA,EAAG;AACpD,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAA4B,IAAI,CAAA,4CAAA,CAA8C,CAAA;AAAA,MAC7F;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,UAAUC,cAAA,GAAO,QAAA;AAC9B,IAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AAIrB,IAAA,MAAM,aAAA,GACJ,IAAA,IAAQ,OAAO,IAAA,KAAS,YAAY,CAAC,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,GAC3E,OACD,OAAA,IAAW,SAAA;AAEjB,IAAA,MAAM,WAAW,SAAA,IAAa,OAAA;AAE9B,IAAA,MAAM,iBAAA,GAAoB,QAAQ,SAAA,IAAa,QAAA;AAC/C,IAAA,MAAM,kBAAkB,OAAA,IAAW,SAAA;AACnC,IAAA,MAAM,WAAW,QAAA,IAAY,iBAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,QAAA,KAAa,IAAA,IAAQ,KAAA,CAAM,QAAA;AAM5C,IAAA,MAAM,gBAAA,GAAmB,QAAA,KAAa,MAAA,GAAY,QAAA,GAAW,WAAW,EAAA,GAAK,CAAA;AAM7E,IAAA,MAAM,QAAA,GACJ,IAAA,KAAS,SAAA,GACL,IAAA,GACA,SAAS,MAAA,IAAU,IAAA,KAAS,SAAA,GAC1B,IAAA,GACA,SAAS,SAAA,GACP,IAAA,GACA,IAAA,KAAS,SAAA,GACP,OACC,IAAA,IAAQ,IAAA;AAErB,IAAA,uBACEC,cAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,QAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,QAAA;AAAA,QACA,aAAW,QAAA,IAAY,MAAA;AAAA,QACvB,QAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA;AAAA,QACnG,OAAA,EAAS,CAAC,CAAA,KAAM;AAEd,UAAA,IAAI,QAAA,EAAU,OAAO,CAAA,CAAE,cAAA,EAAe;AAAA,eACjC,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,QACzB,CAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,OAAA,GACCC,oBAAA,CAAe,QAAQ,CAAA,GACrBC,kBAAA;AAAA,UACE,QAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA,KACG,2BACCF,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qBAAA,CAAsB,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,aAAA,EAAe,CAAC,CAAA,EAClF,QAAA,kBAAAA,cAAA,CAACG,uBAAQ,SAAA,EAAW,EAAA,CAAG,gBAAgB,EAAE,OAAA,EAAS,UAAU,OAAA,EAAS,aAAA,EAAe,CAAC,CAAA,EAAG,GAC1F,CAAA,GACE,iBAAA,kCACD,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,qBAAA,CAAsB,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,eAAe,CAAC,CAAA,EACjF,QAAA,EAAA,iBAAA,EACH,CAAA,GACE,IAAA,CAAA;AAAA,UACL,QAAA,CAAS,OAA0C,QAAA,oBAClDH,cAAA,CAAC,UAAK,SAAA,EAAU,yCAAA,EACZ,QAAA,EAAA,QAAA,CAAS,KAAA,CAAyC,QAAA,EACtD,CAAA;AAAA,UAEF,mBAAmB,CAAC,QAAA,oBAClBA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qBAAA,CAAsB,EAAE,IAAA,EAAM,UAAU,OAAA,EAAS,aAAA,EAAe,CAAC,GACjF,QAAA,EAAA,eAAA,EACH;AAAA,SAEJ,GACE,uBAEJI,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,QAAA,KACE,QAAA,mBACCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,qBAAA,CAAsB,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,CAAC,CAAA,EAClF,QAAA,EAAA;AAAA,4BAAAJ,cAAA;AAAA,cAACG,mBAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAY,MAAA;AAAA,gBACZ,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,SAAS,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,CAAC;AAAA;AAAA,aAC9E;AAAA,4BACAH,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,qFAAA,EAAkB;AAAA,WAAA,EAC9C,IACE,iBAAA,mBACFA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,qBAAA,CAAsB,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,aAAA,EAAe,CAAC,CAAA,EACjF,6BACH,CAAA,GACE,IAAA,CAAA;AAAA,UACL,QAAA,oBAAYA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAA2C,QAAA,EAAS,CAAA;AAAA,UAChF,mBAAmB,CAAC,QAAA,oBACnBA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qBAAA,CAAsB,EAAE,IAAA,EAAM,UAAU,OAAA,EAAS,aAAA,EAAe,CAAC,GACjF,QAAA,EAAA,eAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA","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"]}
@@ -6,7 +6,7 @@ type ButtonVariantProps = VariantProps<typeof buttonVariants>;
6
6
  declare const buttonVariants: (props?: ({
7
7
  variant?: "warning" | "link" | "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;
@@ -6,7 +6,7 @@ type ButtonVariantProps = VariantProps<typeof buttonVariants>;
6
6
  declare const buttonVariants: (props?: ({
7
7
  variant?: "warning" | "link" | "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;