@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
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ function ScrollArea({ className, children, ...props }) {
11
+ return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [
12
+ /* @__PURE__ */ jsx(
13
+ ScrollAreaPrimitive.Viewport,
14
+ {
15
+ "data-slot": "scroll-area-viewport",
16
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
17
+ children
18
+ }
19
+ ),
20
+ /* @__PURE__ */ jsx(ScrollBar, {}),
21
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
22
+ ] });
23
+ }
24
+ function ScrollBar({
25
+ className,
26
+ orientation = "vertical",
27
+ ...props
28
+ }) {
29
+ return /* @__PURE__ */ jsx(
30
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
31
+ {
32
+ "data-slot": "scroll-area-scrollbar",
33
+ orientation,
34
+ className: cn(
35
+ "flex touch-none p-px transition-colors select-none",
36
+ orientation === "vertical" && "h-full w-2.5 border-s border-s-transparent",
37
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
38
+ className
39
+ ),
40
+ ...props,
41
+ children: /* @__PURE__ */ jsx(
42
+ ScrollAreaPrimitive.ScrollAreaThumb,
43
+ {
44
+ "data-slot": "scroll-area-thumb",
45
+ className: "bg-border relative flex-1 rounded-full"
46
+ }
47
+ )
48
+ }
49
+ );
50
+ }
51
+ ScrollArea.displayName = "ScrollArea";
52
+ ScrollBar.displayName = "ScrollBar";
53
+
54
+ export { ScrollArea, ScrollBar };
55
+ //# sourceMappingURL=scroll-area.js.map
56
+ //# sourceMappingURL=scroll-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/scroll-area.tsx"],"names":[],"mappings":";;;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,SAAS,WAAW,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAA0D;AAC5G,EAAA,uBACE,IAAA,CAAqB,mBAAA,CAAA,IAAA,EAApB,EAAyB,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAC1F,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAqB,mBAAA,CAAA,QAAA;AAAA,MAApB;AAAA,QACC,WAAA,EAAU,sBAAA;AAAA,QACV,SAAA,EAAU,oJAAA;AAAA,QAET;AAAA;AAAA,KACH;AAAA,wBACC,SAAA,EAAA,EAAU,CAAA;AAAA,oBACX,GAAA,CAAqB,4BAApB,EAA2B;AAAA,GAAA,EAC9B,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACE,GAAA;AAAA,IAAqB,mBAAA,CAAA,mBAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,gBAAgB,UAAA,IAAc,4CAAA;AAAA,QAC9B,gBAAgB,YAAA,IAAgB,8CAAA;AAAA,QAChC;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAqB,mBAAA,CAAA,eAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,mBAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AACzB,SAAA,CAAU,WAAA,GAAc,WAAA","file":"scroll-area.js","sourcesContent":["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 * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '@/lib/utils'\n\nfunction ScrollArea({ className, children, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root data-slot=\"scroll-area\" className={cn('relative', className)} {...props}>\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none p-px transition-colors select-none',\n orientation === 'vertical' && 'h-full w-2.5 border-s border-s-transparent',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nScrollArea.displayName = 'ScrollArea'\nScrollBar.displayName = 'ScrollBar'\n\nexport { ScrollArea, ScrollBar }\n"]}
@@ -0,0 +1,242 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var SelectPrimitive = require('@radix-ui/react-select');
6
+ var lucideReact = require('lucide-react');
7
+ var classVarianceAuthority = require('class-variance-authority');
8
+ var clsx = require('clsx');
9
+ var tailwindMerge = require('tailwind-merge');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
32
+
33
+ // src/lib/constants.ts
34
+ var SIZE = {
35
+ text: {
36
+ xs: "text-xs",
37
+ sm: "text-sm leading-4",
38
+ md: "text-sm",
39
+ lg: "text-base",
40
+ xl: "text-base"
41
+ },
42
+ padding: {
43
+ xs: "px-2.5 py-1",
44
+ sm: "px-3 py-2",
45
+ md: "px-4 py-2",
46
+ lg: "px-4 py-2",
47
+ xl: "px-6 py-3"
48
+ },
49
+ height: {
50
+ xs: "h-[26px]",
51
+ sm: "h-[34px]",
52
+ md: "h-[38px]",
53
+ lg: "h-[42px]",
54
+ xl: "h-[50px]"
55
+ }
56
+ };
57
+ var SIZE_VARIANTS = {
58
+ xs: `${SIZE.text["xs"]} ${SIZE.padding["xs"]} ${SIZE.height["xs"]}`,
59
+ sm: `${SIZE.text["sm"]} ${SIZE.padding["sm"]} ${SIZE.height["sm"]}`,
60
+ md: `${SIZE.text["md"]} ${SIZE.padding["md"]} ${SIZE.height["md"]}`,
61
+ lg: `${SIZE.text["lg"]} ${SIZE.padding["lg"]} ${SIZE.height["lg"]}`,
62
+ xl: `${SIZE.text["xl"]} ${SIZE.padding["xl"]} ${SIZE.height["xl"]}`
63
+ };
64
+ function useDocumentDirection() {
65
+ const [direction, setDirection] = React.useState("rtl");
66
+ React.useEffect(() => {
67
+ const getDirection = () => {
68
+ if (typeof document === "undefined") return "rtl";
69
+ const htmlDir = document.documentElement.getAttribute("dir");
70
+ if (htmlDir === "ltr" || htmlDir === "rtl") {
71
+ return htmlDir;
72
+ }
73
+ const computedDir = window.getComputedStyle(document.documentElement).direction;
74
+ return computedDir === "rtl" ? "rtl" : "ltr";
75
+ };
76
+ setDirection(getDirection());
77
+ const observer = new MutationObserver(() => {
78
+ setDirection(getDirection());
79
+ });
80
+ observer.observe(document.documentElement, {
81
+ attributes: true,
82
+ attributeFilter: ["dir"]
83
+ });
84
+ return () => observer.disconnect();
85
+ }, []);
86
+ return direction;
87
+ }
88
+ function cn(...inputs) {
89
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
90
+ }
91
+ var Select = ({ dir, ...props }) => {
92
+ const documentDir = useDocumentDirection();
93
+ const resolvedDir = dir ?? documentDir;
94
+ return /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Root, { dir: resolvedDir, ...props });
95
+ };
96
+ Select.displayName = "Select";
97
+ var SelectGroup = SelectPrimitive__namespace.Group;
98
+ var selectTriggerVariants = classVarianceAuthority.cva("", {
99
+ variants: {
100
+ size: {
101
+ ...SIZE_VARIANTS
102
+ }
103
+ },
104
+ defaultVariants: {
105
+ size: "sm"
106
+ }
107
+ });
108
+ var SelectValue = React__namespace.forwardRef(({ placeholder, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
109
+ SelectPrimitive__namespace.Value,
110
+ {
111
+ placeholder: typeof placeholder === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: placeholder }) : placeholder,
112
+ ...props,
113
+ ref
114
+ }
115
+ ));
116
+ SelectValue.displayName = SelectPrimitive__namespace.Value.displayName;
117
+ var SelectTriggerVariants = selectTriggerVariants;
118
+ var SelectTrigger = React__namespace.forwardRef(({ className, children, size, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
119
+ SelectPrimitive__namespace.Trigger,
120
+ {
121
+ ref,
122
+ "data-slot": "select-trigger",
123
+ className: cn(
124
+ "flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200",
125
+ "data-[state=open]:bg-selection data-[state=open]:border-stronger",
126
+ "gap-2",
127
+ "[&>span]:truncate text-start",
128
+ selectTriggerVariants({ size }),
129
+ className
130
+ ),
131
+ ...props,
132
+ children: [
133
+ children,
134
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-4 text-foreground-lighter shrink-0", strokeWidth: 1.5 }) })
135
+ ]
136
+ }
137
+ ));
138
+ SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
139
+ var SelectScrollUpButton = React__namespace.forwardRef(({ className, "aria-label": ariaLabel, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
140
+ SelectPrimitive__namespace.ScrollUpButton,
141
+ {
142
+ ref,
143
+ "data-slot": "select-scroll-up-button",
144
+ "aria-label": ariaLabel ?? "\u067E\u06CC\u0645\u0627\u06CC\u0634 \u0628\u0647 \u0628\u0627\u0644\u0627",
145
+ className: cn("flex cursor-default items-center justify-center py-1 text-foreground-muted", className),
146
+ ...props,
147
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { "aria-hidden": "true", className: "size-4" })
148
+ }
149
+ ));
150
+ SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
151
+ var SelectScrollDownButton = React__namespace.forwardRef(({ className, "aria-label": ariaLabel, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
152
+ SelectPrimitive__namespace.ScrollDownButton,
153
+ {
154
+ ref,
155
+ "data-slot": "select-scroll-down-button",
156
+ "aria-label": ariaLabel ?? "\u067E\u06CC\u0645\u0627\u06CC\u0634 \u0628\u0647 \u067E\u0627\u06CC\u06CC\u0646",
157
+ className: cn("flex cursor-default items-center justify-center py-1 text-foreground-muted", className),
158
+ ...props,
159
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": "true", className: "size-4" })
160
+ }
161
+ ));
162
+ SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
163
+ var SelectContent = React__namespace.forwardRef(({ className, children, position = "popper", collisionPadding = 8, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
164
+ SelectPrimitive__namespace.Content,
165
+ {
166
+ ref,
167
+ "data-slot": "select-content",
168
+ className: cn(
169
+ "relative z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-dropdown data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
170
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
171
+ className
172
+ ),
173
+ position,
174
+ collisionPadding,
175
+ sideOffset,
176
+ ...props,
177
+ children: [
178
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
179
+ /* @__PURE__ */ jsxRuntime.jsx(
180
+ SelectPrimitive__namespace.Viewport,
181
+ {
182
+ className: cn("p-1", position === "popper" && "w-full min-w-[var(--radix-select-trigger-width)]"),
183
+ children
184
+ }
185
+ ),
186
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
187
+ ]
188
+ }
189
+ ) }));
190
+ SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
191
+ var SelectLabel = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
192
+ SelectPrimitive__namespace.Label,
193
+ {
194
+ ref,
195
+ "data-slot": "select-label",
196
+ className: cn("py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider", className),
197
+ ...props
198
+ }
199
+ ));
200
+ SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
201
+ var SelectItem = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
202
+ SelectPrimitive__namespace.Item,
203
+ {
204
+ ref,
205
+ "data-slot": "select-item",
206
+ className: cn(
207
+ "group",
208
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
209
+ className
210
+ ),
211
+ ...props,
212
+ children: [
213
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { className: "size-3.5 bg-foreground rounded-full flex justify-center items-center", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-2 text-background-overlay", strokeWidth: 6 }) }) }),
214
+ /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children: typeof children === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children }) : children })
215
+ ]
216
+ }
217
+ ));
218
+ SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
219
+ var SelectSeparator = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
220
+ SelectPrimitive__namespace.Separator,
221
+ {
222
+ ref,
223
+ "data-slot": "select-separator",
224
+ className: cn("-mx-1 my-1 h-px bg-border-overlay", className),
225
+ ...props
226
+ }
227
+ ));
228
+ SelectSeparator.displayName = SelectPrimitive__namespace.Separator.displayName;
229
+
230
+ exports.Select = Select;
231
+ exports.SelectContent = SelectContent;
232
+ exports.SelectGroup = SelectGroup;
233
+ exports.SelectItem = SelectItem;
234
+ exports.SelectLabel = SelectLabel;
235
+ exports.SelectScrollDownButton = SelectScrollDownButton;
236
+ exports.SelectScrollUpButton = SelectScrollUpButton;
237
+ exports.SelectSeparator = SelectSeparator;
238
+ exports.SelectTrigger = SelectTrigger;
239
+ exports.SelectTriggerVariants = SelectTriggerVariants;
240
+ exports.SelectValue = SelectValue;
241
+ //# sourceMappingURL=select.cjs.map
242
+ //# sourceMappingURL=select.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/constants.ts","../../../src/hooks/use-document-direction.ts","../../../src/lib/utils.ts","../../../src/components/ui/select.tsx"],"names":["useState","useEffect","twMerge","clsx","SelectPrimitive","cva","React","jsx","jsxs","ChevronDown","ChevronUp","Check"],"mappings":"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","file":"select.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","'use client'\n\nimport { useState, useEffect } from 'react'\n\ntype Direction = 'ltr' | 'rtl'\n\nfunction useDocumentDirection(): Direction {\n const [direction, setDirection] = useState<Direction>('rtl')\n\n useEffect(() => {\n const getDirection = (): Direction => {\n if (typeof document === 'undefined') return 'rtl'\n const htmlDir = document.documentElement.getAttribute('dir')\n if (htmlDir === 'ltr' || htmlDir === 'rtl') {\n return htmlDir\n }\n const computedDir = window.getComputedStyle(document.documentElement).direction\n return computedDir === 'rtl' ? 'rtl' : 'ltr'\n }\n\n setDirection(getDirection())\n\n const observer = new MutationObserver(() => {\n setDirection(getDirection())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir'],\n })\n\n return () => observer.disconnect()\n }, [])\n\n return direction\n}\n\nexport { useDocumentDirection }\nexport type { Direction }\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 * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { VariantProps, cva } from 'class-variance-authority'\n\nimport { SIZE_VARIANTS } from '@/lib/constants'\nimport { useDocumentDirection, type Direction } from '@/hooks/use-document-direction'\nimport { cn } from '@/lib/utils'\n\n// Forward document `dir` to Radix so listbox arrow-key semantics behave correctly in RTL.\nconst Select = ({ dir, ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) => {\n const documentDir = useDocumentDirection()\n const resolvedDir = (dir as Direction) ?? documentDir\n return <SelectPrimitive.Root dir={resolvedDir} {...props} />\n}\nSelect.displayName = 'Select'\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst selectTriggerVariants = cva('', {\n variants: {\n size: {\n ...SIZE_VARIANTS,\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n\n// If placeholder is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value> & VariantProps<typeof selectTriggerVariants>\n>(({ placeholder, ...props }, ref) => (\n <SelectPrimitive.Value\n placeholder={typeof placeholder === 'string' ? <span>{placeholder}</span> : placeholder}\n {...props}\n ref={ref}\n />\n))\nSelectValue.displayName = SelectPrimitive.Value.displayName\n\n/** @deprecated Use selectTriggerVariants instead */\nexport const SelectTriggerVariants = selectTriggerVariants\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & VariantProps<typeof selectTriggerVariants>\n>(({ className, children, size, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n className={cn(\n 'flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200',\n 'data-[state=open]:bg-selection data-[state=open]:border-stronger',\n 'gap-2',\n '[&>span]:truncate text-start',\n selectTriggerVariants({ size }),\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 text-foreground-lighter shrink-0\" strokeWidth={1.5} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, 'aria-label': ariaLabel, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n data-slot=\"select-scroll-up-button\"\n aria-label={ariaLabel ?? 'پیمایش به بالا'}\n className={cn('flex cursor-default items-center justify-center py-1 text-foreground-muted', className)}\n {...props}\n >\n <ChevronUp aria-hidden=\"true\" className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, 'aria-label': ariaLabel, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n data-slot=\"select-scroll-down-button\"\n aria-label={ariaLabel ?? 'پیمایش به پایین'}\n className={cn('flex cursor-default items-center justify-center py-1 text-foreground-muted', className)}\n {...props}\n >\n <ChevronDown aria-hidden=\"true\" className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', collisionPadding = 8, sideOffset = 4, ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n data-slot=\"select-content\"\n // 1.1.16 — height now clamps to Radix's\n // `--radix-select-content-available-height` (= viewport space\n // minus collision padding) instead of a hard `max-h-96`, so a long\n // list (e.g. the 11 لحن options) wraps via its own scrollbar\n // instead of pushing past the viewport. Default\n // `collisionPadding={8}` + `sideOffset={4}` keep a small margin\n // from screen edges and from the trigger.\n className={cn(\n 'relative z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-dropdown data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n collisionPadding={collisionPadding}\n sideOffset={sideOffset}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n // 1.1.16 — REMOVED `h-[var(--radix-select-trigger-height)]`\n // (the famous shadcn-ui issue #467). That class clamped the\n // viewport to ≈40 px, hiding everything past the second item.\n // Width still mirrors the trigger; height is owned by Content's\n // max-h clamp above.\n className={cn('p-1', position === 'popper' && 'w-full min-w-[var(--radix-select-trigger-width)]')}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n data-slot=\"select-label\"\n className={cn('py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\n// If children is a string, wrap it in a span. This is to avoid page crashes when using Google Translate.\n// https://github.com/radix-ui/primitives/issues/2578#issuecomment-1890801041 for more info.\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n data-slot=\"select-item\"\n className={cn(\n 'group',\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute start-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator className=\"size-3.5 bg-foreground rounded-full flex justify-center items-center\">\n <Check className=\"size-2 text-background-overlay\" strokeWidth={6} />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>\n {typeof children === 'string' ? <span>{children}</span> : children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n data-slot=\"select-separator\"\n className={cn('-mx-1 my-1 h-px bg-border-overlay', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import * as React from 'react';
4
+ import * as SelectPrimitive from '@radix-ui/react-select';
5
+ import { VariantProps } from 'class-variance-authority';
6
+
7
+ declare const Select: {
8
+ ({ dir, ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
9
+ displayName: string;
10
+ };
11
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
13
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
14
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
15
+ /** @deprecated Use selectTriggerVariants instead */
16
+ declare const SelectTriggerVariants: (props?: ({
17
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
18
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
19
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
20
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
21
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
22
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
23
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
24
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
26
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
27
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
28
+
29
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue };
@@ -0,0 +1,29 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import * as React from 'react';
4
+ import * as SelectPrimitive from '@radix-ui/react-select';
5
+ import { VariantProps } from 'class-variance-authority';
6
+
7
+ declare const Select: {
8
+ ({ dir, ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
9
+ displayName: string;
10
+ };
11
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
13
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
14
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
15
+ /** @deprecated Use selectTriggerVariants instead */
16
+ declare const SelectTriggerVariants: (props?: ({
17
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
18
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
19
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
20
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
21
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
22
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
23
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
24
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
26
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
27
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
28
+
29
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue };
@@ -0,0 +1,210 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import { useState, useEffect } from 'react';
4
+ import * as SelectPrimitive from '@radix-ui/react-select';
5
+ import { ChevronDown, ChevronUp, Check } from 'lucide-react';
6
+ import { cva } from 'class-variance-authority';
7
+ import { clsx } from 'clsx';
8
+ import { twMerge } from 'tailwind-merge';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ // src/lib/constants.ts
12
+ var SIZE = {
13
+ text: {
14
+ xs: "text-xs",
15
+ sm: "text-sm leading-4",
16
+ md: "text-sm",
17
+ lg: "text-base",
18
+ xl: "text-base"
19
+ },
20
+ padding: {
21
+ xs: "px-2.5 py-1",
22
+ sm: "px-3 py-2",
23
+ md: "px-4 py-2",
24
+ lg: "px-4 py-2",
25
+ xl: "px-6 py-3"
26
+ },
27
+ height: {
28
+ xs: "h-[26px]",
29
+ sm: "h-[34px]",
30
+ md: "h-[38px]",
31
+ lg: "h-[42px]",
32
+ xl: "h-[50px]"
33
+ }
34
+ };
35
+ var SIZE_VARIANTS = {
36
+ xs: `${SIZE.text["xs"]} ${SIZE.padding["xs"]} ${SIZE.height["xs"]}`,
37
+ sm: `${SIZE.text["sm"]} ${SIZE.padding["sm"]} ${SIZE.height["sm"]}`,
38
+ md: `${SIZE.text["md"]} ${SIZE.padding["md"]} ${SIZE.height["md"]}`,
39
+ lg: `${SIZE.text["lg"]} ${SIZE.padding["lg"]} ${SIZE.height["lg"]}`,
40
+ xl: `${SIZE.text["xl"]} ${SIZE.padding["xl"]} ${SIZE.height["xl"]}`
41
+ };
42
+ function useDocumentDirection() {
43
+ const [direction, setDirection] = useState("rtl");
44
+ useEffect(() => {
45
+ const getDirection = () => {
46
+ if (typeof document === "undefined") return "rtl";
47
+ const htmlDir = document.documentElement.getAttribute("dir");
48
+ if (htmlDir === "ltr" || htmlDir === "rtl") {
49
+ return htmlDir;
50
+ }
51
+ const computedDir = window.getComputedStyle(document.documentElement).direction;
52
+ return computedDir === "rtl" ? "rtl" : "ltr";
53
+ };
54
+ setDirection(getDirection());
55
+ const observer = new MutationObserver(() => {
56
+ setDirection(getDirection());
57
+ });
58
+ observer.observe(document.documentElement, {
59
+ attributes: true,
60
+ attributeFilter: ["dir"]
61
+ });
62
+ return () => observer.disconnect();
63
+ }, []);
64
+ return direction;
65
+ }
66
+ function cn(...inputs) {
67
+ return twMerge(clsx(inputs));
68
+ }
69
+ var Select = ({ dir, ...props }) => {
70
+ const documentDir = useDocumentDirection();
71
+ const resolvedDir = dir ?? documentDir;
72
+ return /* @__PURE__ */ jsx(SelectPrimitive.Root, { dir: resolvedDir, ...props });
73
+ };
74
+ Select.displayName = "Select";
75
+ var SelectGroup = SelectPrimitive.Group;
76
+ var selectTriggerVariants = cva("", {
77
+ variants: {
78
+ size: {
79
+ ...SIZE_VARIANTS
80
+ }
81
+ },
82
+ defaultVariants: {
83
+ size: "sm"
84
+ }
85
+ });
86
+ var SelectValue = React.forwardRef(({ placeholder, ...props }, ref) => /* @__PURE__ */ jsx(
87
+ SelectPrimitive.Value,
88
+ {
89
+ placeholder: typeof placeholder === "string" ? /* @__PURE__ */ jsx("span", { children: placeholder }) : placeholder,
90
+ ...props,
91
+ ref
92
+ }
93
+ ));
94
+ SelectValue.displayName = SelectPrimitive.Value.displayName;
95
+ var SelectTriggerVariants = selectTriggerVariants;
96
+ var SelectTrigger = React.forwardRef(({ className, children, size, ...props }, ref) => /* @__PURE__ */ jsxs(
97
+ SelectPrimitive.Trigger,
98
+ {
99
+ ref,
100
+ "data-slot": "select-trigger",
101
+ className: cn(
102
+ "flex w-full items-center justify-between rounded-md border border-strong hover:border-stronger bg-alternative dark:bg-muted hover:bg-selection ring-offset-background-control data-[placeholder]:text-foreground-lighter focus:outline-none ring-border-control focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200",
103
+ "data-[state=open]:bg-selection data-[state=open]:border-stronger",
104
+ "gap-2",
105
+ "[&>span]:truncate text-start",
106
+ selectTriggerVariants({ size }),
107
+ className
108
+ ),
109
+ ...props,
110
+ children: [
111
+ children,
112
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4 text-foreground-lighter shrink-0", strokeWidth: 1.5 }) })
113
+ ]
114
+ }
115
+ ));
116
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
117
+ var SelectScrollUpButton = React.forwardRef(({ className, "aria-label": ariaLabel, ...props }, ref) => /* @__PURE__ */ jsx(
118
+ SelectPrimitive.ScrollUpButton,
119
+ {
120
+ ref,
121
+ "data-slot": "select-scroll-up-button",
122
+ "aria-label": ariaLabel ?? "\u067E\u06CC\u0645\u0627\u06CC\u0634 \u0628\u0647 \u0628\u0627\u0644\u0627",
123
+ className: cn("flex cursor-default items-center justify-center py-1 text-foreground-muted", className),
124
+ ...props,
125
+ children: /* @__PURE__ */ jsx(ChevronUp, { "aria-hidden": "true", className: "size-4" })
126
+ }
127
+ ));
128
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
129
+ var SelectScrollDownButton = React.forwardRef(({ className, "aria-label": ariaLabel, ...props }, ref) => /* @__PURE__ */ jsx(
130
+ SelectPrimitive.ScrollDownButton,
131
+ {
132
+ ref,
133
+ "data-slot": "select-scroll-down-button",
134
+ "aria-label": ariaLabel ?? "\u067E\u06CC\u0645\u0627\u06CC\u0634 \u0628\u0647 \u067E\u0627\u06CC\u06CC\u0646",
135
+ className: cn("flex cursor-default items-center justify-center py-1 text-foreground-muted", className),
136
+ ...props,
137
+ children: /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": "true", className: "size-4" })
138
+ }
139
+ ));
140
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
141
+ var SelectContent = React.forwardRef(({ className, children, position = "popper", collisionPadding = 8, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
142
+ SelectPrimitive.Content,
143
+ {
144
+ ref,
145
+ "data-slot": "select-content",
146
+ className: cn(
147
+ "relative z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[8rem] overflow-hidden rounded-md border bg-overlay text-foreground shadow-dropdown data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
148
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
149
+ className
150
+ ),
151
+ position,
152
+ collisionPadding,
153
+ sideOffset,
154
+ ...props,
155
+ children: [
156
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
157
+ /* @__PURE__ */ jsx(
158
+ SelectPrimitive.Viewport,
159
+ {
160
+ className: cn("p-1", position === "popper" && "w-full min-w-[var(--radix-select-trigger-width)]"),
161
+ children
162
+ }
163
+ ),
164
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
165
+ ]
166
+ }
167
+ ) }));
168
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
169
+ var SelectLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
170
+ SelectPrimitive.Label,
171
+ {
172
+ ref,
173
+ "data-slot": "select-label",
174
+ className: cn("py-1.5 ps-8 pe-2 text-xs text-foreground-lighter/75 uppercase tracking-wider", className),
175
+ ...props
176
+ }
177
+ ));
178
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
179
+ var SelectItem = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
180
+ SelectPrimitive.Item,
181
+ {
182
+ ref,
183
+ "data-slot": "select-item",
184
+ className: cn(
185
+ "group",
186
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none focus:bg-overlay-hover text-foreground-light focus:text-foreground data-[state=checked]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
187
+ className
188
+ ),
189
+ ...props,
190
+ children: [
191
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "size-3.5 bg-foreground rounded-full flex justify-center items-center", children: /* @__PURE__ */ jsx(Check, { className: "size-2 text-background-overlay", strokeWidth: 6 }) }) }),
192
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children: typeof children === "string" ? /* @__PURE__ */ jsx("span", { children }) : children })
193
+ ]
194
+ }
195
+ ));
196
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
197
+ var SelectSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
198
+ SelectPrimitive.Separator,
199
+ {
200
+ ref,
201
+ "data-slot": "select-separator",
202
+ className: cn("-mx-1 my-1 h-px bg-border-overlay", className),
203
+ ...props
204
+ }
205
+ ));
206
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
207
+
208
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue };
209
+ //# sourceMappingURL=select.js.map
210
+ //# sourceMappingURL=select.js.map