@minidev.fun/ui 1.0.3 → 1.0.5

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 (329) hide show
  1. package/dist/accordion.d.ts +36 -0
  2. package/dist/alert-dialog.d.ts +114 -0
  3. package/dist/alert.d.ts +41 -0
  4. package/dist/aspect-ratio.d.ts +14 -0
  5. package/dist/avatar.d.ts +55 -0
  6. package/dist/badge.d.ts +22 -0
  7. package/dist/breadcrumb.d.ts +54 -0
  8. package/dist/button-group.d.ts +45 -0
  9. package/dist/button.d.ts +46 -0
  10. package/dist/calendar.d.ts +68 -0
  11. package/dist/card.d.ts +45 -0
  12. package/dist/carousel.d.ts +116 -0
  13. package/dist/chart.d.ts +85 -0
  14. package/dist/checkbox.d.ts +14 -0
  15. package/dist/collapsible.d.ts +28 -0
  16. package/dist/combobox.d.ts +113 -0
  17. package/dist/command.d.ts +90 -0
  18. package/dist/components/minidev.fun/color-mode/color-mode-toggle.js +2 -2
  19. package/dist/components/minidev.fun/color-mode/index.js +9 -0
  20. package/dist/components/minidev.fun/first-light/first-light-filters.js +114 -0
  21. package/dist/components/minidev.fun/first-light/first-light-filters.js.map +1 -0
  22. package/dist/components/minidev.fun/first-light/index.js +5 -0
  23. package/dist/components/minidev.fun/first-light/index.js.map +1 -0
  24. package/dist/components/minidev.fun/typography/blockquote.js +23 -0
  25. package/dist/components/minidev.fun/typography/blockquote.js.map +1 -0
  26. package/dist/components/minidev.fun/typography/code.js +23 -0
  27. package/dist/components/minidev.fun/typography/code.js.map +1 -0
  28. package/dist/components/minidev.fun/typography/index.js +15 -0
  29. package/dist/components/minidev.fun/typography/index.js.map +1 -0
  30. package/dist/components/minidev.fun/typography/list-item.js +19 -0
  31. package/dist/components/minidev.fun/typography/list-item.js.map +1 -0
  32. package/dist/components/minidev.fun/typography/text.js +59 -0
  33. package/dist/components/minidev.fun/typography/text.js.map +1 -0
  34. package/dist/components/minidev.fun/typography/title.js +47 -0
  35. package/dist/components/minidev.fun/typography/title.js.map +1 -0
  36. package/dist/components/ui/{src/components/ui/accordion.js → accordion.js} +8 -8
  37. package/dist/components/ui/accordion.js.map +1 -0
  38. package/dist/components/ui/{src/components/ui/alert-dialog.js → alert-dialog.js} +9 -9
  39. package/dist/components/ui/alert-dialog.js.map +1 -0
  40. package/dist/components/ui/{src/components/ui/alert.js → alert.js} +2 -2
  41. package/dist/components/ui/alert.js.map +1 -0
  42. package/dist/components/ui/{src/components/ui/aspect-ratio.js → aspect-ratio.js} +1 -1
  43. package/dist/components/ui/aspect-ratio.js.map +1 -0
  44. package/dist/components/ui/{src/components/ui/avatar.js → avatar.js} +4 -4
  45. package/dist/components/ui/avatar.js.map +1 -0
  46. package/dist/components/ui/{src/components/ui/badge.js → badge.js} +4 -4
  47. package/dist/components/ui/badge.js.map +1 -0
  48. package/dist/components/ui/{src/components/ui/breadcrumb.js → breadcrumb.js} +5 -5
  49. package/dist/components/ui/breadcrumb.js.map +1 -0
  50. package/dist/components/ui/{src/components/ui/button-group.js → button-group.js} +4 -4
  51. package/dist/components/ui/button-group.js.map +1 -0
  52. package/dist/components/ui/{src/components/ui/button.js → button.js} +3 -3
  53. package/dist/components/ui/button.js.map +1 -0
  54. package/dist/components/ui/{src/components/ui/calendar.js → calendar.js} +4 -4
  55. package/dist/components/ui/calendar.js.map +1 -0
  56. package/dist/components/ui/{src/components/ui/card.js → card.js} +1 -1
  57. package/dist/components/ui/card.js.map +1 -0
  58. package/dist/components/ui/{src/components/ui/carousel.js → carousel.js} +3 -3
  59. package/dist/components/ui/carousel.js.map +1 -0
  60. package/dist/components/ui/{src/components/ui/chart.js → chart.js} +1 -1
  61. package/dist/components/ui/chart.js.map +1 -0
  62. package/dist/components/ui/{src/components/ui/checkbox.js → checkbox.js} +4 -4
  63. package/dist/components/ui/checkbox.js.map +1 -0
  64. package/dist/components/ui/{src/components/ui/collapsible.js → collapsible.js} +3 -3
  65. package/dist/components/ui/collapsible.js.map +1 -0
  66. package/dist/components/ui/{src/components/ui/combobox.js → combobox.js} +23 -23
  67. package/dist/components/ui/combobox.js.map +1 -0
  68. package/dist/components/ui/{src/components/ui/command.js → command.js} +4 -4
  69. package/dist/components/ui/command.js.map +1 -0
  70. package/dist/components/ui/{src/components/ui/context-menu.js → context-menu.js} +20 -20
  71. package/dist/components/ui/context-menu.js.map +1 -0
  72. package/dist/components/ui/{src/components/ui/dialog.js → dialog.js} +10 -10
  73. package/dist/components/ui/dialog.js.map +1 -0
  74. package/dist/components/ui/{src/components/ui/drawer.js → drawer.js} +2 -2
  75. package/dist/components/ui/drawer.js.map +1 -0
  76. package/dist/components/ui/{src/components/ui/dropdown-menu.js → dropdown-menu.js} +20 -20
  77. package/dist/components/ui/dropdown-menu.js.map +1 -0
  78. package/dist/components/ui/{src/components/ui/empty.js → empty.js} +2 -2
  79. package/dist/components/ui/empty.js.map +1 -0
  80. package/dist/components/ui/{src/components/ui/field.js → field.js} +2 -2
  81. package/dist/components/ui/field.js.map +1 -0
  82. package/dist/components/ui/{src/components/ui/hover-card.js → hover-card.js} +6 -6
  83. package/dist/components/ui/hover-card.js.map +1 -0
  84. package/dist/components/ui/{src/components/ui/input-group.js → input-group.js} +2 -2
  85. package/dist/components/ui/input-group.js.map +1 -0
  86. package/dist/components/ui/{src/components/ui/input-otp.js → input-otp.js} +2 -2
  87. package/dist/components/ui/input-otp.js.map +1 -0
  88. package/dist/components/ui/{src/components/ui/input.js → input.js} +2 -2
  89. package/dist/components/ui/input.js.map +1 -0
  90. package/dist/components/ui/{src/components/ui/item.js → item.js} +4 -4
  91. package/dist/components/ui/item.js.map +1 -0
  92. package/dist/components/ui/{src/components/ui/kbd.js → kbd.js} +1 -1
  93. package/dist/components/ui/kbd.js.map +1 -0
  94. package/dist/components/ui/{src/components/ui/label.js → label.js} +1 -1
  95. package/dist/components/ui/label.js.map +1 -0
  96. package/dist/components/ui/{src/components/ui/menubar.js → menubar.js} +9 -9
  97. package/dist/components/ui/menubar.js.map +1 -0
  98. package/dist/components/ui/{src/components/ui/modal.js → modal.js} +9 -9
  99. package/dist/components/ui/modal.js.map +1 -0
  100. package/dist/components/ui/{src/components/ui/navigation-menu.js → navigation-menu.js} +14 -14
  101. package/dist/components/ui/navigation-menu.js.map +1 -0
  102. package/dist/components/ui/{src/components/ui/pagination.js → pagination.js} +4 -4
  103. package/dist/components/ui/pagination.js.map +1 -0
  104. package/dist/components/ui/{src/components/ui/popover.js → popover.js} +8 -8
  105. package/dist/components/ui/popover.js.map +1 -0
  106. package/dist/components/ui/{src/components/ui/progress.js → progress.js} +6 -6
  107. package/dist/components/ui/progress.js.map +1 -0
  108. package/dist/components/ui/{src/components/ui/radio-group.js → radio-group.js} +5 -5
  109. package/dist/components/ui/radio-group.js.map +1 -0
  110. package/dist/components/ui/{src/components/ui/resizable.js → resizable.js} +2 -2
  111. package/dist/components/ui/resizable.js.map +1 -0
  112. package/dist/components/ui/{src/components/ui/scroll-area.js → scroll-area.js} +6 -6
  113. package/dist/components/ui/scroll-area.js.map +1 -0
  114. package/dist/components/ui/{src/components/ui/select.js → select.js} +20 -20
  115. package/dist/components/ui/select.js.map +1 -0
  116. package/dist/components/ui/{src/components/ui/separator.js → separator.js} +2 -2
  117. package/dist/components/ui/separator.js.map +1 -0
  118. package/dist/components/ui/{src/components/ui/sheet.js → sheet.js} +10 -10
  119. package/dist/components/ui/sheet.js.map +1 -0
  120. package/dist/components/ui/{src/components/ui/sidebar.js → sidebar.js} +6 -6
  121. package/dist/components/ui/sidebar.js.map +1 -0
  122. package/dist/components/ui/{src/components/ui/skeleton.js → skeleton.js} +1 -1
  123. package/dist/components/ui/skeleton.js.map +1 -0
  124. package/dist/components/ui/{src/components/ui/slider.js → slider.js} +6 -6
  125. package/dist/components/ui/slider.js.map +1 -0
  126. package/dist/components/ui/{src/components/ui/sonner.js → sonner.js} +7 -7
  127. package/dist/components/ui/sonner.js.map +1 -0
  128. package/dist/components/ui/{src/components/ui/spinner.js → spinner.js} +2 -2
  129. package/dist/components/ui/spinner.js.map +1 -0
  130. package/dist/components/ui/{src/components/ui/switch.js → switch.js} +3 -3
  131. package/dist/components/ui/switch.js.map +1 -0
  132. package/dist/components/ui/{src/components/ui/table.js → table.js} +1 -1
  133. package/dist/components/ui/table.js.map +1 -0
  134. package/dist/components/ui/{src/components/ui/tabs.js → tabs.js} +6 -6
  135. package/dist/components/ui/tabs.js.map +1 -0
  136. package/dist/components/ui/{src/components/ui/textarea.js → textarea.js} +1 -1
  137. package/dist/components/ui/textarea.js.map +1 -0
  138. package/dist/components/ui/{src/components/ui/toast.js → toast.js} +6 -6
  139. package/dist/components/ui/toast.js.map +1 -0
  140. package/dist/components/ui/{src/components/ui/toggle-group.js → toggle-group.js} +3 -3
  141. package/dist/components/ui/toggle-group.js.map +1 -0
  142. package/dist/components/ui/{src/components/ui/toggle.js → toggle.js} +3 -3
  143. package/dist/components/ui/toggle.js.map +1 -0
  144. package/dist/components/ui/{src/components/ui/tooltip.js → tooltip.js} +8 -8
  145. package/dist/components/ui/tooltip.js.map +1 -0
  146. package/dist/context-menu.d.ts +97 -0
  147. package/dist/dialog.d.ts +90 -0
  148. package/dist/drawer.d.ts +61 -0
  149. package/dist/dropdown-menu.d.ts +121 -0
  150. package/dist/empty.d.ts +56 -0
  151. package/dist/field.d.ts +109 -0
  152. package/dist/hooks/use-mobile.js.map +1 -0
  153. package/dist/hover-card.d.ts +28 -0
  154. package/dist/index.d.ts +290 -0
  155. package/dist/input-group.d.ts +106 -0
  156. package/dist/input-otp.d.ts +43 -0
  157. package/dist/input.d.ts +14 -0
  158. package/dist/item.d.ts +101 -0
  159. package/dist/kbd.d.ts +19 -0
  160. package/dist/label.d.ts +12 -0
  161. package/dist/lib/variants.js +103 -1
  162. package/dist/lib/variants.js.map +1 -1
  163. package/dist/menubar.d.ts +205 -0
  164. package/dist/modal.d.ts +104 -0
  165. package/dist/navigation-menu.d.ts +66 -0
  166. package/dist/pagination.d.ts +99 -0
  167. package/dist/popover.d.ts +55 -0
  168. package/dist/progress.d.ts +41 -0
  169. package/dist/radio-group.d.ts +21 -0
  170. package/dist/resizable.d.ts +47 -0
  171. package/dist/scroll-area.d.ts +69 -0
  172. package/dist/select.d.ts +79 -0
  173. package/dist/separator.d.ts +12 -0
  174. package/dist/sheet.d.ts +68 -0
  175. package/dist/sidebar.d.ts +288 -0
  176. package/dist/skeleton.d.ts +11 -0
  177. package/dist/slider.d.ts +24 -0
  178. package/dist/sonner.d.ts +27 -0
  179. package/dist/spinner.d.ts +11 -0
  180. package/dist/switch.d.ts +15 -0
  181. package/dist/table.d.ts +68 -0
  182. package/dist/tabs.d.ts +42 -0
  183. package/dist/textarea.d.ts +21 -0
  184. package/dist/toast.d.ts +15 -0
  185. package/dist/toggle-group.d.ts +36 -0
  186. package/dist/toggle.d.ts +19 -0
  187. package/dist/tooltip.d.ts +36 -0
  188. package/dist/use-mobile.d.ts +19 -0
  189. package/dist/utils.d.ts +25 -0
  190. package/package.json +1 -1
  191. package/dist/components/minidev.fun/color-mode/color-mode-initializer.d.ts +0 -46
  192. package/dist/components/minidev.fun/color-mode/color-mode-initializer.d.ts.map +0 -1
  193. package/dist/components/minidev.fun/color-mode/color-mode-toggle.d.ts +0 -106
  194. package/dist/components/minidev.fun/color-mode/color-mode-toggle.d.ts.map +0 -1
  195. package/dist/components/minidev.fun/color-mode/index.d.ts.map +0 -1
  196. package/dist/components/minidev.fun/color-mode/use-color-mode.d.ts +0 -91
  197. package/dist/components/minidev.fun/color-mode/use-color-mode.d.ts.map +0 -1
  198. package/dist/components/minidev.fun/first-light/first-light-filters.d.ts +0 -27
  199. package/dist/components/minidev.fun/first-light/first-light-filters.d.ts.map +0 -1
  200. package/dist/components/minidev.fun/first-light/index.d.ts.map +0 -1
  201. package/dist/components/minidev.fun/typography/blockquote.d.ts +0 -13
  202. package/dist/components/minidev.fun/typography/blockquote.d.ts.map +0 -1
  203. package/dist/components/minidev.fun/typography/code.d.ts +0 -13
  204. package/dist/components/minidev.fun/typography/code.d.ts.map +0 -1
  205. package/dist/components/minidev.fun/typography/index.d.ts.map +0 -1
  206. package/dist/components/minidev.fun/typography/list-item.d.ts +0 -27
  207. package/dist/components/minidev.fun/typography/list-item.d.ts.map +0 -1
  208. package/dist/components/minidev.fun/typography/text.d.ts +0 -44
  209. package/dist/components/minidev.fun/typography/text.d.ts.map +0 -1
  210. package/dist/components/minidev.fun/typography/title.d.ts +0 -22
  211. package/dist/components/minidev.fun/typography/title.d.ts.map +0 -1
  212. package/dist/components/minidev.fun/undefined/index.js +0 -9
  213. package/dist/components/ui/accordion.d.ts.map +0 -1
  214. package/dist/components/ui/alert-dialog.d.ts.map +0 -1
  215. package/dist/components/ui/alert.d.ts.map +0 -1
  216. package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
  217. package/dist/components/ui/avatar.d.ts.map +0 -1
  218. package/dist/components/ui/badge.d.ts.map +0 -1
  219. package/dist/components/ui/breadcrumb.d.ts.map +0 -1
  220. package/dist/components/ui/button-group.d.ts.map +0 -1
  221. package/dist/components/ui/button.d.ts.map +0 -1
  222. package/dist/components/ui/calendar.d.ts.map +0 -1
  223. package/dist/components/ui/card.d.ts.map +0 -1
  224. package/dist/components/ui/carousel.d.ts.map +0 -1
  225. package/dist/components/ui/chart.d.ts.map +0 -1
  226. package/dist/components/ui/checkbox.d.ts.map +0 -1
  227. package/dist/components/ui/collapsible.d.ts.map +0 -1
  228. package/dist/components/ui/combobox.d.ts.map +0 -1
  229. package/dist/components/ui/command.d.ts.map +0 -1
  230. package/dist/components/ui/context-menu.d.ts.map +0 -1
  231. package/dist/components/ui/dialog.d.ts.map +0 -1
  232. package/dist/components/ui/drawer.d.ts.map +0 -1
  233. package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
  234. package/dist/components/ui/empty.d.ts.map +0 -1
  235. package/dist/components/ui/field.d.ts.map +0 -1
  236. package/dist/components/ui/hover-card.d.ts.map +0 -1
  237. package/dist/components/ui/input-group.d.ts.map +0 -1
  238. package/dist/components/ui/input-otp.d.ts.map +0 -1
  239. package/dist/components/ui/input.d.ts.map +0 -1
  240. package/dist/components/ui/item.d.ts.map +0 -1
  241. package/dist/components/ui/kbd.d.ts.map +0 -1
  242. package/dist/components/ui/label.d.ts.map +0 -1
  243. package/dist/components/ui/menubar.d.ts.map +0 -1
  244. package/dist/components/ui/modal.d.ts.map +0 -1
  245. package/dist/components/ui/navigation-menu.d.ts.map +0 -1
  246. package/dist/components/ui/pagination.d.ts.map +0 -1
  247. package/dist/components/ui/popover.d.ts.map +0 -1
  248. package/dist/components/ui/progress.d.ts.map +0 -1
  249. package/dist/components/ui/radio-group.d.ts.map +0 -1
  250. package/dist/components/ui/resizable.d.ts.map +0 -1
  251. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  252. package/dist/components/ui/select.d.ts.map +0 -1
  253. package/dist/components/ui/separator.d.ts.map +0 -1
  254. package/dist/components/ui/sheet.d.ts.map +0 -1
  255. package/dist/components/ui/sidebar.d.ts.map +0 -1
  256. package/dist/components/ui/skeleton.d.ts.map +0 -1
  257. package/dist/components/ui/slider.d.ts.map +0 -1
  258. package/dist/components/ui/sonner.d.ts.map +0 -1
  259. package/dist/components/ui/spinner.d.ts.map +0 -1
  260. package/dist/components/ui/src/components/ui/accordion.js.map +0 -1
  261. package/dist/components/ui/src/components/ui/alert-dialog.js.map +0 -1
  262. package/dist/components/ui/src/components/ui/alert.js.map +0 -1
  263. package/dist/components/ui/src/components/ui/aspect-ratio.js.map +0 -1
  264. package/dist/components/ui/src/components/ui/avatar.js.map +0 -1
  265. package/dist/components/ui/src/components/ui/badge.js.map +0 -1
  266. package/dist/components/ui/src/components/ui/breadcrumb.js.map +0 -1
  267. package/dist/components/ui/src/components/ui/button-group.js.map +0 -1
  268. package/dist/components/ui/src/components/ui/button.js.map +0 -1
  269. package/dist/components/ui/src/components/ui/calendar.js.map +0 -1
  270. package/dist/components/ui/src/components/ui/card.js.map +0 -1
  271. package/dist/components/ui/src/components/ui/carousel.js.map +0 -1
  272. package/dist/components/ui/src/components/ui/chart.js.map +0 -1
  273. package/dist/components/ui/src/components/ui/checkbox.js.map +0 -1
  274. package/dist/components/ui/src/components/ui/collapsible.js.map +0 -1
  275. package/dist/components/ui/src/components/ui/combobox.js.map +0 -1
  276. package/dist/components/ui/src/components/ui/command.js.map +0 -1
  277. package/dist/components/ui/src/components/ui/context-menu.js.map +0 -1
  278. package/dist/components/ui/src/components/ui/dialog.js.map +0 -1
  279. package/dist/components/ui/src/components/ui/drawer.js.map +0 -1
  280. package/dist/components/ui/src/components/ui/dropdown-menu.js.map +0 -1
  281. package/dist/components/ui/src/components/ui/empty.js.map +0 -1
  282. package/dist/components/ui/src/components/ui/field.js.map +0 -1
  283. package/dist/components/ui/src/components/ui/hover-card.js.map +0 -1
  284. package/dist/components/ui/src/components/ui/input-group.js.map +0 -1
  285. package/dist/components/ui/src/components/ui/input-otp.js.map +0 -1
  286. package/dist/components/ui/src/components/ui/input.js.map +0 -1
  287. package/dist/components/ui/src/components/ui/item.js.map +0 -1
  288. package/dist/components/ui/src/components/ui/kbd.js.map +0 -1
  289. package/dist/components/ui/src/components/ui/label.js.map +0 -1
  290. package/dist/components/ui/src/components/ui/menubar.js.map +0 -1
  291. package/dist/components/ui/src/components/ui/modal.js.map +0 -1
  292. package/dist/components/ui/src/components/ui/navigation-menu.js.map +0 -1
  293. package/dist/components/ui/src/components/ui/pagination.js.map +0 -1
  294. package/dist/components/ui/src/components/ui/popover.js.map +0 -1
  295. package/dist/components/ui/src/components/ui/progress.js.map +0 -1
  296. package/dist/components/ui/src/components/ui/radio-group.js.map +0 -1
  297. package/dist/components/ui/src/components/ui/resizable.js.map +0 -1
  298. package/dist/components/ui/src/components/ui/scroll-area.js.map +0 -1
  299. package/dist/components/ui/src/components/ui/select.js.map +0 -1
  300. package/dist/components/ui/src/components/ui/separator.js.map +0 -1
  301. package/dist/components/ui/src/components/ui/sheet.js.map +0 -1
  302. package/dist/components/ui/src/components/ui/sidebar.js.map +0 -1
  303. package/dist/components/ui/src/components/ui/skeleton.js.map +0 -1
  304. package/dist/components/ui/src/components/ui/slider.js.map +0 -1
  305. package/dist/components/ui/src/components/ui/sonner.js.map +0 -1
  306. package/dist/components/ui/src/components/ui/spinner.js.map +0 -1
  307. package/dist/components/ui/src/components/ui/switch.js.map +0 -1
  308. package/dist/components/ui/src/components/ui/table.js.map +0 -1
  309. package/dist/components/ui/src/components/ui/tabs.js.map +0 -1
  310. package/dist/components/ui/src/components/ui/textarea.js.map +0 -1
  311. package/dist/components/ui/src/components/ui/toast.js.map +0 -1
  312. package/dist/components/ui/src/components/ui/toggle-group.js.map +0 -1
  313. package/dist/components/ui/src/components/ui/toggle.js.map +0 -1
  314. package/dist/components/ui/src/components/ui/tooltip.js.map +0 -1
  315. package/dist/components/ui/switch.d.ts.map +0 -1
  316. package/dist/components/ui/table.d.ts.map +0 -1
  317. package/dist/components/ui/tabs.d.ts.map +0 -1
  318. package/dist/components/ui/textarea.d.ts.map +0 -1
  319. package/dist/components/ui/toast.d.ts.map +0 -1
  320. package/dist/components/ui/toggle-group.d.ts.map +0 -1
  321. package/dist/components/ui/toggle.d.ts.map +0 -1
  322. package/dist/components/ui/tooltip.d.ts.map +0 -1
  323. package/dist/hooks/src/hooks/use-mobile.js.map +0 -1
  324. package/dist/hooks/use-mobile.d.ts.map +0 -1
  325. package/dist/lib/utils.d.ts.map +0 -1
  326. package/dist/lib/variants.d.ts +0 -107
  327. package/dist/lib/variants.d.ts.map +0 -1
  328. /package/dist/components/minidev.fun/{undefined → color-mode}/index.js.map +0 -0
  329. /package/dist/hooks/{src/hooks/use-mobile.js → use-mobile.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal.js","sources":["../../../../../../src/components/ui/modal.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\n\r\ntype ModalProps = DialogPrimitive.Root.Props;\r\n\r\n/** Root container for modal dialog. Manages open state and accessibility. */\r\nfunction Modal({ ...props }: ModalProps) {\r\n return <DialogPrimitive.Root data-slot=\"modal\" {...props} />;\r\n}\r\n\r\ntype ModalTriggerProps = DialogPrimitive.Trigger.Props;\r\n\r\n/** Button that opens the modal. Use `render` prop to customize. */\r\nfunction ModalTrigger({ ...props }: ModalTriggerProps) {\r\n return <DialogPrimitive.Trigger data-slot=\"modal-trigger\" {...props} />;\r\n}\r\n\r\ntype ModalPortalProps = DialogPrimitive.Portal.Props;\r\n\r\n/** Portal container for modal content and overlay. */\r\nfunction ModalPortal({ ...props }: ModalPortalProps) {\r\n return <DialogPrimitive.Portal data-slot=\"modal-portal\" {...props} />;\r\n}\r\n\r\ntype ModalOverlayProps = DialogPrimitive.Backdrop.Props;\r\n\r\n/** Semi-transparent backdrop overlay with frosted glass effect. */\r\nfunction ModalOverlay({ className, ...props }: ModalOverlayProps) {\r\n return (\r\n <DialogPrimitive.Backdrop\r\n data-slot=\"modal-overlay\"\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs isolate\",\r\n \"data-open:animate-in data-closed:animate-out\",\r\n \"data-open:fade-in-0 data-closed:fade-out-0 duration-100\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ModalContentProps = DialogPrimitive.Popup.Props & {\r\n /** Modal size variant. @default \"default\" */\r\n size?: \"default\" | \"sm\" | \"lg\";\r\n};\r\n\r\n/**\r\n * Modal content with automatic portal and backdrop.\r\n * Centered, animated popup with size variants.\r\n */\r\nfunction ModalContent({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: ModalContentProps) {\r\n return (\r\n <ModalPortal>\r\n <ModalOverlay />\r\n <DialogPrimitive.Popup\r\n data-slot=\"modal-content\"\r\n data-size={size}\r\n className={cn(\r\n \"fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2\",\r\n \"gap-6 rounded-6xl p-6 outline-none\",\r\n \"bg-popover text-popover-foreground ring-1 ring-border\",\r\n \"data-open:animate-in data-closed:animate-out\",\r\n \"data-open:fade-in-0 data-closed:fade-out-0\",\r\n \"data-open:zoom-in-95 data-closed:zoom-out-95 duration-100\",\r\n \"data-[size=sm]:max-w-sm\",\r\n \"data-[size=default]:max-w-lg\",\r\n \"data-[size=lg]:max-w-2xl\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </ModalPortal>\r\n );\r\n}\r\n\r\ntype ModalHeaderProps = React.ComponentProps<\"div\">;\r\n\r\n/** Header section for title and description. */\r\nfunction ModalHeader({ className, ...props }: ModalHeaderProps) {\r\n return (\r\n <div\r\n data-slot=\"modal-header\"\r\n className={cn(\"grid gap-1.5 text-left\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ModalFooterProps = React.ComponentProps<\"div\">;\r\n\r\n/** Footer section for action buttons. */\r\nfunction ModalFooter({ className, ...props }: ModalFooterProps) {\r\n return (\r\n <div\r\n data-slot=\"modal-footer\"\r\n className={cn(\r\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ModalTitleProps = React.ComponentProps<typeof DialogPrimitive.Title>;\r\n\r\n/** Modal title. Automatically announced by screen readers. */\r\nfunction ModalTitle({ className, ...props }: ModalTitleProps) {\r\n return (\r\n <DialogPrimitive.Title\r\n data-slot=\"modal-title\"\r\n className={cn(\"text-lg font-medium\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ModalDescriptionProps = React.ComponentProps<\r\n typeof DialogPrimitive.Description\r\n>;\r\n\r\n/** Modal description text. Supports links with automatic styling. */\r\nfunction ModalDescription({ className, ...props }: ModalDescriptionProps) {\r\n return (\r\n <DialogPrimitive.Description\r\n data-slot=\"modal-description\"\r\n className={cn(\r\n \"text-sm text-muted-foreground text-balance md:text-pretty\",\r\n \"*:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ModalCloseProps = DialogPrimitive.Close.Props &\r\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">;\r\n\r\n/** Button that closes the modal. Defaults to outline variant. */\r\nfunction ModalClose({\r\n className,\r\n variant = \"outline\",\r\n size = \"default\",\r\n ...props\r\n}: ModalCloseProps) {\r\n return (\r\n <DialogPrimitive.Close\r\n data-slot=\"modal-close\"\r\n className={cn(className)}\r\n render={<Button variant={variant} size={size} />}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Modal,\r\n ModalTrigger,\r\n ModalPortal,\r\n ModalOverlay,\r\n ModalContent,\r\n ModalHeader,\r\n ModalFooter,\r\n ModalTitle,\r\n ModalDescription,\r\n ModalClose,\r\n type ModalProps,\r\n type ModalTriggerProps,\r\n type ModalPortalProps,\r\n type ModalOverlayProps,\r\n type ModalContentProps,\r\n type ModalHeaderProps,\r\n type ModalFooterProps,\r\n type ModalTitleProps,\r\n type ModalDescriptionProps,\r\n type ModalCloseProps,\r\n};\r\n"],"names":["DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","DialogPrimitive.Title","DialogPrimitive.Description","DialogPrimitive.Close"],"mappings":";;;;;;;;;;;;AASA,SAAS,MAAM,EAAE,GAAG,SAAqB;AACvC,6BAAQA,YAAA,EAAqB,aAAU,SAAS,GAAG,OAAO;AAC5D;AAKA,SAAS,aAAa,EAAE,GAAG,SAA4B;AACrD,6BAAQC,eAAA,EAAwB,aAAU,iBAAiB,GAAG,OAAO;AACvE;AAKA,SAAS,YAAY,EAAE,GAAG,SAA2B;AACnD,6BAAQC,cAAA,EAAuB,aAAU,gBAAgB,GAAG,OAAO;AACrE;AAKA,SAAS,aAAa,EAAE,WAAW,GAAG,SAA4B;AAChE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAWA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAsB;AACpB,8BACG,aAAA,EACC,UAAA;AAAA,IAAA,oBAAC,cAAA,EAAa;AAAA,IACd;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,aAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,GACF;AAEJ;AAKA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0BAA0B,SAAS;AAAA,MAChD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAKA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAKA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA0B;AAC5D,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,uBAAuB,SAAS;AAAA,MAC7C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAgC;AACxE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAMA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,GAAG;AACL,GAAoB;AAClB,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,SAAS;AAAA,MACvB,QAAQ,oBAAC,QAAA,EAAO,SAAkB,KAAA,CAAY;AAAA,MAC7C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation-menu.js","sources":["../../../../../../src/components/ui/navigation-menu.tsx"],"sourcesContent":["import { NavigationMenu as NavigationMenuPrimitive } from \"@base-ui/react/navigation-menu\";\nimport { cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\nimport { ChevronDownIcon } from \"lucide-react\";\n\ntype NavigationMenuProps = NavigationMenuPrimitive.Root.Props;\n\n/**\n * Root container for horizontal navigation with mega menu support.\n * Manages active state and provides keyboard navigation.\n */\nfunction NavigationMenu({\n className,\n children,\n ...props\n}: NavigationMenuProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n className={cn(\n \"max-w-max group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n className,\n )}\n {...props}\n >\n {children}\n <NavigationMenuPositioner />\n </NavigationMenuPrimitive.Root>\n );\n}\n\ntype NavigationMenuListProps = NavigationMenuPrimitive.List.Props;\n\n/**\n * Container for navigation menu items. Renders as a horizontal list.\n */\nfunction NavigationMenuList({ className, ...props }: NavigationMenuListProps) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn(\n \"gap-0 group flex flex-1 list-none items-center justify-center\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype NavigationMenuItemProps = NavigationMenuPrimitive.Item.Props;\n\n/**\n * Individual navigation item. Can contain a Link or Trigger + Content.\n * Use `value` prop to identify the item for controlled state.\n */\nfunction NavigationMenuItem({ className, ...props }: NavigationMenuItemProps) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn(\"relative\", className)}\n {...props}\n />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-full px-4 py-2 text-sm font-medium transition-all focus-visible:ring-[3px] focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center disabled:pointer-events-none outline-none\",\n);\n\ntype NavigationMenuTriggerProps = NavigationMenuPrimitive.Trigger.Props;\n\n/**\n * Button that opens the associated NavigationMenuContent panel.\n * Automatically includes a rotating chevron icon.\n */\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: NavigationMenuTriggerProps) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\ntype NavigationMenuContentProps = NavigationMenuPrimitive.Content.Props;\n\n/**\n * Content panel for mega menus. Opened by NavigationMenuTrigger.\n * Automatically renders in a positioned popup with smooth transitions.\n */\nfunction NavigationMenuContent({\n className,\n ...props\n}: NavigationMenuContentProps) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-2 pr-2.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 h-full w-auto **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype NavigationMenuPositionerProps = NavigationMenuPrimitive.Positioner.Props;\n\n/**\n * Portal container for positioning content panels.\n * Automatically included in NavigationMenu - do not use directly.\n * @internal\n */\nfunction NavigationMenuPositioner({\n className,\n side = \"bottom\",\n sideOffset = 8,\n align = \"start\",\n alignOffset = 0,\n ...props\n}: NavigationMenuPositionerProps) {\n return (\n <NavigationMenuPrimitive.Portal>\n <NavigationMenuPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n className={cn(\n \"transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0 isolate z-50 h-[var(--positioner-height)] w-[var(--positioner-width)] max-w-[var(--available-width)] data-[instant]:transition-none\",\n className,\n )}\n {...props}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-popup\"\n className=\"bg-popover text-popover-foreground ring-foreground/10 rounded-5xl shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-[ending-style]:scale-90 data-[ending-style]:opacity-0 data-[ending-style]:duration-150 data-[starting-style]:scale-90 data-[starting-style]:opacity-0 xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin)\"\n >\n <NavigationMenuPrimitive.Viewport className=\"relative size-full overflow-hidden\" />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPrimitive.Portal>\n );\n}\n\ntype NavigationMenuLinkProps = NavigationMenuPrimitive.Link.Props;\n\n/**\n * Navigation link for direct navigation items or links within content panels.\n * Use `active` prop to highlight the current page.\n */\nfunction NavigationMenuLink({ className, ...props }: NavigationMenuLinkProps) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-full p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype NavigationMenuIndicatorProps = NavigationMenuPrimitive.Icon.Props;\n\n/**\n * Visual indicator (arrow) that shows which item is active.\n * Optional - not commonly used in modern designs.\n */\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: NavigationMenuIndicatorProps) {\n return (\n <NavigationMenuPrimitive.Icon\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n className,\n )}\n {...props}\n >\n <div className=\"bg-border rounded-tl-sm shadow-md relative top-[60%] h-2 w-2 rotate-45\" />\n </NavigationMenuPrimitive.Icon>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n NavigationMenuPositioner,\n type NavigationMenuProps,\n type NavigationMenuContentProps,\n type NavigationMenuIndicatorProps,\n type NavigationMenuItemProps,\n type NavigationMenuLinkProps,\n type NavigationMenuListProps,\n type NavigationMenuTriggerProps,\n type NavigationMenuPositionerProps,\n};\n"],"names":["NavigationMenuPrimitive.Root","NavigationMenuPrimitive.List","NavigationMenuPrimitive.Item","NavigationMenuPrimitive.Trigger","ChevronDownIcon","NavigationMenuPrimitive.Content","NavigationMenuPrimitive.Portal","NavigationMenuPrimitive.Positioner","NavigationMenuPrimitive.Popup","NavigationMenuPrimitive.Viewport","NavigationMenuPrimitive.Link","NavigationMenuPrimitive.Icon"],"mappings":";;;;;;;;;;;;;;;AAYA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA;AAAA,4BACA,0BAAA,CAAA,CAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhC;AAOA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,SAAS;AAAA,MAClC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,MAAM,6BAA6B;AAAA,EACjC;AACF;AAQA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS,SAAS;AAAA,MAC7D,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA;AAAA,QAAU;AAAA,QACX;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EAAA;AAGN;AAQA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,GAA+B;AAC7B,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AASA,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,GAAG;AACL,GAAkC;AAChC,SACE,oBAACC,sBAAA,EACC,UAAA;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA,oBAACC,wBAAA,EAAiC,WAAU,qCAAA,CAAqC;AAAA,QAAA;AAAA,MAAA;AAAA,IACnF;AAAA,EAAA,GAEJ;AAEJ;AAQA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA,GAAG;AACL,GAAiC;AAC/B,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA,oBAAC,OAAA,EAAI,WAAU,yEAAA,CAAyE;AAAA,IAAA;AAAA,EAAA;AAG9F;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.js","sources":["../../../../../../src/components/ui/pagination.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\";\n\ntype PaginationProps = React.ComponentProps<\"nav\">;\n\n/**\n * Root pagination navigation container.\n */\nfunction Pagination({ className, ...props }: PaginationProps) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n );\n}\n\ntype PaginationContentProps = React.ComponentProps<\"ul\">;\n\n/**\n * Container for pagination items. Renders as a flex list.\n */\nfunction PaginationContent({ className, ...props }: PaginationContentProps) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"gap-1 flex items-center\", className)}\n {...props}\n />\n );\n}\n\ntype PaginationItemProps = React.ComponentProps<\"li\">;\n\n/**\n * Wrapper for individual pagination elements (links, ellipsis, controls).\n */\nfunction PaginationItem({ ...props }: PaginationItemProps) {\n return <li data-slot=\"pagination-item\" {...props} />;\n}\n\ntype PaginationLinkProps = {\n /** Whether this page link is the current active page. */\n isActive?: boolean;\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">;\n\n/**\n * Clickable page number link. Use `isActive` to highlight the current page.\n */\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <Button\n variant={isActive ? \"primary\" : \"ghost\"}\n size={size}\n className={cn(\"rounded-lg\", className)}\n nativeButton={false}\n render={\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n {...props}\n />\n }\n />\n );\n}\n\ntype PaginationPreviousProps = React.ComponentProps<typeof PaginationLink>;\n\n/**\n * Previous page button with chevron icon and \"Previous\" text (hidden on mobile).\n */\nfunction PaginationPrevious({ className, ...props }: PaginationPreviousProps) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"pl-2!\", className)}\n {...props}\n >\n <ChevronLeftIcon data-icon=\"inline-start\" />\n </PaginationLink>\n );\n}\n\ntype PaginationNextProps = React.ComponentProps<typeof PaginationLink>;\n\n/**\n * Next page button with chevron icon and \"Next\" text (hidden on mobile).\n */\nfunction PaginationNext({ className, ...props }: PaginationNextProps) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"pr-2!\", className)}\n {...props}\n >\n <ChevronRightIcon data-icon=\"inline-end\" />\n </PaginationLink>\n );\n}\n\ntype PaginationEllipsisProps = React.ComponentProps<\"span\">;\n\n/**\n * Ellipsis indicator for skipped pages. Use between page numbers to show truncated ranges.\n */\nfunction PaginationEllipsis({ className, ...props }: PaginationEllipsisProps) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\n \"size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4 flex items-center justify-center\",\n className,\n )}\n {...props}\n >\n <MoreHorizontalIcon />\n <span className=\"sr-only\">More pages</span>\n </span>\n );\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n type PaginationProps,\n type PaginationContentProps,\n type PaginationItemProps,\n type PaginationLinkProps,\n type PaginationPreviousProps,\n type PaginationNextProps,\n type PaginationEllipsisProps,\n};\n"],"names":["ChevronLeftIcon","ChevronRightIcon","MoreHorizontalIcon"],"mappings":";;;;;;;AAeA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA0B;AAC5D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAiC;AAC1E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2BAA2B,SAAS;AAAA,MACjD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,eAAe,EAAE,GAAG,SAA8B;AACzD,SAAO,oBAAC,MAAA,EAAG,aAAU,mBAAmB,GAAG,OAAO;AACpD;AAWA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,WAAW,YAAY;AAAA,MAChC;AAAA,MACA,WAAW,GAAG,cAAc,SAAS;AAAA,MACrC,cAAc;AAAA,MACd,QACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,gBAAc,WAAW,SAAS;AAAA,UAClC,aAAU;AAAA,UACV,eAAa;AAAA,UACZ,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIR;AAOA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,SAAS,SAAS;AAAA,MAC/B,GAAG;AAAA,MAEJ,UAAA,oBAACA,aAAA,EAAgB,aAAU,eAAA,CAAe;AAAA,IAAA;AAAA,EAAA;AAGhD;AAOA,SAAS,eAAe,EAAE,WAAW,GAAG,SAA8B;AACpE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,SAAS,SAAS;AAAA,MAC/B,GAAG;AAAA,MAEJ,UAAA,oBAACC,cAAA,EAAiB,aAAU,aAAA,CAAa;AAAA,IAAA;AAAA,EAAA;AAG/C;AAOA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,oBAACC,UAAA,EAAmB;AAAA,QACpB,oBAAC,QAAA,EAAK,WAAU,WAAU,UAAA,aAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG1C;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover.js","sources":["../../../../../../src/components/ui/popover.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype PopoverProps = PopoverPrimitive.Root.Props;\n\n/**\n * Popover root component. Groups all parts of the popover and manages open state.\n * Use with `open`/`onOpenChange` for controlled state, or `defaultOpen` for uncontrolled.\n */\nfunction Popover({ ...props }: PopoverProps) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\ntype PopoverTriggerProps = PopoverPrimitive.Trigger.Props;\n\n/**\n * Button that opens the popover. Use `render` prop to customize the trigger element.\n */\nfunction PopoverTrigger({ ...props }: PopoverTriggerProps) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\ntype PopoverContentProps = PopoverPrimitive.Popup.Props &\n Pick<\n PopoverPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >;\n\n/**\n * Popover content with automatic portal and positioning.\n * Animates in/out with fade and zoom effects. Default width is w-72 (18rem).\n *\n * @param align - Horizontal alignment relative to trigger. @default \"center\"\n * @param alignOffset - Offset in pixels along alignment axis. @default 0\n * @param side - Which side of trigger to display on. @default \"bottom\"\n * @param sideOffset - Distance in pixels from trigger. @default 4\n */\nfunction PopoverContent({\n className,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n ...props\n}: PopoverContentProps) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 flex flex-col gap-4 rounded-5xl p-4 lg:p-6 text-sm shadow-md ring-1 duration-100 z-50 w-72 origin-(--transform-origin) outline-hidden\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\ntype PopoverHeaderProps = React.ComponentProps<\"div\">;\n\n/**\n * Optional header wrapper for PopoverTitle and PopoverDescription.\n * Provides consistent spacing between title and description.\n */\nfunction PopoverHeader({ className, ...props }: PopoverHeaderProps) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\ntype PopoverTitleProps = PopoverPrimitive.Title.Props;\n\n/**\n * Heading that labels the popover. Renders an h2 element with proper ARIA attributes.\n */\nfunction PopoverTitle({ className, ...props }: PopoverTitleProps) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n );\n}\n\ntype PopoverDescriptionProps = PopoverPrimitive.Description.Props;\n\n/**\n * Optional description text for the popover. Styled with muted foreground color.\n */\nfunction PopoverDescription({ className, ...props }: PopoverDescriptionProps) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n type PopoverProps,\n type PopoverContentProps,\n type PopoverDescriptionProps,\n type PopoverHeaderProps,\n type PopoverTitleProps,\n type PopoverTriggerProps,\n};\n"],"names":["PopoverPrimitive.Root","PopoverPrimitive.Trigger","PopoverPrimitive.Portal","PopoverPrimitive.Positioner","PopoverPrimitive.Popup","PopoverPrimitive.Title","PopoverPrimitive.Description"],"mappings":";;;;;;;;;;AAWA,SAAS,QAAQ,EAAE,GAAG,SAAuB;AAC3C,6BAAQA,aAAA,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC/D;AAOA,SAAS,eAAe,EAAE,GAAG,SAA8B;AACzD,6BAAQC,kBAAA,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAiBA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,OAAO;AAAA,EACP,aAAa;AAAA,EACb,GAAG;AACL,GAAwB;AACtB,SACE,oBAACC,eAAA,EACC,UAAA;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MAEV,UAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA,GAEJ;AAEJ;AAQA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA6B;AAClE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,aAAa,EAAE,WAAW,GAAG,SAA4B;AAChE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,eAAe,SAAS;AAAA,MACrC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAkC;AAC5E,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,yBAAyB,SAAS;AAAA,MAC/C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress.js","sources":["../../../../../../src/components/ui/progress.tsx"],"sourcesContent":["\"use client\";\n\nimport { Progress as ProgressPrimitive } from \"@base-ui/react/progress\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype ProgressProps = ProgressPrimitive.Root.Props;\n\n/**\n * Root container for progress bar with label and value support.\n * Automatically includes track and indicator. Use `value={null}` for indeterminate state.\n */\nfunction Progress({ className, children, value, ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn(\"flex flex-wrap gap-3\", className)}\n {...props}\n >\n {children}\n </ProgressPrimitive.Root>\n );\n}\n\ntype ProgressTrackProps = ProgressPrimitive.Track.Props;\n\n/**\n * Container for the progress indicator. Customize height with className (e.g., `h-2`, `h-3`).\n */\nfunction ProgressTrack({ className, ...props }: ProgressTrackProps) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n \"bg-muted h-1.5 rounded-full relative flex w-full items-center overflow-x-hidden\",\n className,\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n );\n}\n\ntype ProgressIndicatorProps = ProgressPrimitive.Indicator.Props;\n\n/**\n * Visual indicator showing progress completion. Customize color with className\n * (e.g., `bg-green-500`, `bg-red-500` for semantic states).\n */\nfunction ProgressIndicator({ className, ...props }: ProgressIndicatorProps) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\"bg-primary h-full transition-all\", className)}\n {...props}\n />\n );\n}\n\ntype ProgressLabelProps = ProgressPrimitive.Label.Props;\n\n/**\n * Text label describing the progress task.\n */\nfunction ProgressLabel({ className, ...props }: ProgressLabelProps) {\n return (\n <ProgressPrimitive.Label\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"progress-label\"\n {...props}\n />\n );\n}\n\ntype ProgressValueProps = ProgressPrimitive.Value.Props;\n\n/**\n * Displays formatted progress value (e.g., \"65%\"). Auto-positioned to right via `ml-auto`.\n */\nfunction ProgressValue({ className, ...props }: ProgressValueProps) {\n return (\n <ProgressPrimitive.Value\n className={cn(\n \"text-muted-foreground ml-auto text-sm tabular-nums\",\n className,\n )}\n data-slot=\"progress-value\"\n {...props}\n />\n );\n}\n\nexport {\n Progress,\n ProgressTrack,\n ProgressIndicator,\n ProgressLabel,\n ProgressValue,\n type ProgressProps,\n type ProgressTrackProps,\n type ProgressIndicatorProps,\n type ProgressLabelProps,\n type ProgressValueProps,\n};\n"],"names":["ProgressPrimitive.Root","ProgressPrimitive.Track","ProgressPrimitive.Indicator","ProgressPrimitive.Label","ProgressPrimitive.Value"],"mappings":";;;;;;;;AAYA;AACE;AACE;AAACA;AAAA;AACC;AACU;AACqC;AAC3C;AAEH;AAAA;AAGP;AAOA;AACE;AACE;AAACC;AAAA;AACY;AACT;AACA;AAAA;AAEQ;AACN;AAAA;AAGV;AAQA;AACE;AACE;AAACC;AAAA;AACW;AACiD;AACvD;AAAA;AAGV;AAOA;AACE;AACE;AAACC;AAAA;AAC+C;AACpC;AACN;AAAA;AAGV;AAOA;AACE;AACE;AAACC;AAAA;AACY;AACT;AACA;AAAA;AAEQ;AACN;AAAA;AAGV;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"radio-group.js","sources":["../../../../../../src/components/ui/radio-group.tsx"],"sourcesContent":["import { Radio as RadioPrimitive } from \"@base-ui/react/radio\";\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\";\n\nimport { cn } from \"@/lib/utils\";\nimport { CircleIcon } from \"lucide-react\";\n\ntype RadioGroupProps = RadioGroupPrimitive.Props;\n\n/**\n * Container for radio button items. Manages shared state and ensures only one option can be selected.\n * Supports controlled and uncontrolled usage.\n */\nfunction RadioGroup({ className, ...props }: RadioGroupProps) {\n return (\n <RadioGroupPrimitive\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3 w-full\", className)}\n {...props}\n />\n );\n}\n\ntype RadioGroupItemProps = RadioPrimitive.Root.Props;\n\n/**\n * Individual radio button item. Use with RadioGroup to create mutually exclusive selections.\n * Automatically renders an indicator when checked.\n */\nfunction RadioGroupItem({ className, ...props }: RadioGroupItemProps) {\n return (\n <RadioPrimitive.Root\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 flex size-4 rounded-full shadow-xs focus-visible:ring-[3px] aria-invalid:ring-[3px] group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <RadioPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"group-aria-invalid/radio-group-item:text-destructive text-primary flex size-4 items-center justify-center\"\n >\n <CircleIcon className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current\" />\n </RadioPrimitive.Indicator>\n </RadioPrimitive.Root>\n );\n}\n\nexport {\n RadioGroup,\n RadioGroupItem,\n type RadioGroupProps,\n type RadioGroupItemProps,\n};\n"],"names":["RadioGroupPrimitive","RadioPrimitive.Root","RadioPrimitive.Indicator","CircleIcon"],"mappings":";;;;;;AAYA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA0B;AAC5D,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC3C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,eAAe,EAAE,WAAW,GAAG,SAA8B;AACpE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA,oBAACC,QAAA,EAAW,WAAU,kFAAA,CAAkF;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1G;AAAA,EAAA;AAGN;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resizable.js","sources":["../../../../../../src/components/ui/resizable.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Group as PanelGroup,\n Panel,\n Separator as PanelResizeHandle,\n type PanelImperativeHandle,\n} from \"react-resizable-panels\";\n\nimport { cn } from \"@/lib/utils\";\n\n/** Default duration of the collapse/expand animation in milliseconds. */\nconst DEFAULT_DURATION = 400;\n\n/** Default easing function for collapse/expand animations. */\nconst DEFAULT_EASING = \"cubic-bezier(0.16, 1, 0.3, 1)\";\n\n/** Generate CSS transition value for animated collapse/expand. */\nfunction getTransitionStyle(durationMs: number, easing: string): string {\n const seconds = durationMs / 1000;\n return `flex-grow ${seconds}s ${easing}, flex-basis ${seconds}s ${easing}`;\n}\n\ntype ResizablePanelGroupProps = React.ComponentProps<typeof PanelGroup>;\n\n/**\n * Container for resizable panels. Manages layout orientation and panel resizing behavior.\n * Supports both horizontal and vertical layouts with optional persistence via `id` prop.\n */\nfunction ResizablePanelGroup({\n className,\n ...props\n}: ResizablePanelGroupProps) {\n return (\n <PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype ResizablePanelProps = Omit<\n React.ComponentProps<typeof Panel>,\n \"panelRef\"\n> & {\n /** Enable smooth CSS transition for collapse/expand. Drag resizing stays instant. @default false */\n animated?: boolean;\n /** Controlled collapsed state. When provided, the panel syncs to this value. */\n collapsed?: boolean;\n /** Animation duration in milliseconds. Only applies when `animated` is true. @default 400 */\n duration?: number;\n};\n\n/**\n * Individual resizable panel within a ResizablePanelGroup.\n * Supports size constraints (minSize, maxSize), default sizing, and collapse behavior.\n *\n * Control collapse state declaratively via the `collapsed` prop.\n * When `animated` is true, collapse/expand transitions are smooth.\n *\n * @example\n * <ResizablePanel collapsed={isCollapsed} animated collapsible>\n */\nfunction ResizablePanel({\n className,\n animated,\n collapsed,\n duration = DEFAULT_DURATION,\n ...props\n}: ResizablePanelProps) {\n const panelRef = React.useRef<PanelImperativeHandle>(null);\n const elementRef = React.useRef<HTMLDivElement>(null);\n const animatedRef = React.useRef(animated);\n const durationRef = React.useRef(duration);\n const prevCollapsedRef = React.useRef<boolean | undefined>(undefined);\n\n // Keep the refs in sync with prop changes\n React.useEffect(() => {\n animatedRef.current = animated;\n durationRef.current = duration;\n }, [animated, duration]);\n\n /** Apply transition, call action, then remove transition after duration */\n const withTransition = React.useCallback(\n (action: () => void, skipAnimation = false) => {\n const panelEl = elementRef.current?.closest(\n '[data-panel][data-slot=\"resizable-panel\"]',\n ) as HTMLElement | null;\n\n if (animatedRef.current && panelEl && !skipAnimation) {\n const ms = durationRef.current;\n // Read easing from CSS variable, fallback to default\n const easing =\n getComputedStyle(panelEl)\n .getPropertyValue(\"--resizable-easing\")\n .trim() || DEFAULT_EASING;\n panelEl.style.transition = getTransitionStyle(ms, easing);\n action();\n setTimeout(() => {\n panelEl.style.transition = \"\";\n }, ms);\n } else {\n action();\n }\n },\n [],\n );\n\n // Sync collapsed prop to panel state\n React.useEffect(() => {\n if (collapsed === undefined) return;\n\n const isFirstSync = prevCollapsedRef.current === undefined;\n const hasChanged = collapsed !== prevCollapsedRef.current;\n prevCollapsedRef.current = collapsed;\n\n if (!hasChanged && !isFirstSync) return;\n\n // Helper to safely call collapse/expand with retry logic\n const syncState = () => {\n try {\n const isCurrentlyCollapsed = panelRef.current?.isCollapsed() ?? false;\n if (collapsed === isCurrentlyCollapsed) return;\n\n if (collapsed) {\n if (isFirstSync) {\n // First sync: no animation\n panelRef.current?.collapse();\n } else {\n withTransition(() => panelRef.current?.collapse());\n }\n } else {\n withTransition(() => panelRef.current?.expand());\n }\n } catch {\n // Panel not ready yet, retry after a tick\n setTimeout(syncState, 0);\n }\n };\n\n // Use setTimeout(0) to ensure we're after the panel group's layout effects\n setTimeout(syncState, 0);\n }, [collapsed, withTransition]);\n\n return (\n <Panel\n data-slot=\"resizable-panel\"\n panelRef={panelRef}\n elementRef={elementRef}\n className={cn(className)}\n {...props}\n />\n );\n}\n\ntype ResizableHandleProps = React.ComponentProps<typeof PanelResizeHandle> & {\n /** Display a visible grip indicator on the resize handle. @default false */\n withHandle?: boolean;\n};\n\n/**\n * Resize handle between panels. Appears as a thin line with optional visible grip indicator.\n * Supports keyboard navigation and focus states.\n */\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizableHandleProps) {\n return (\n <PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"group bg-border focus-visible:ring-primary/50 focus-visible:bg-primary/50 relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:ring-offset-background focus-visible:outline-hidden data-[resize-handle-state=hover]:bg-primary/50 data-[resize-handle-state=drag]:bg-primary/50 data-[resize-handle-state=active]:bg-primary/50 aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border group-focus-visible:bg-primary/50 group-data-[resize-handle-state=hover]:bg-primary/50 group-data-[resize-handle-state=drag]:bg-primary/50 group-data-[resize-handle-state=active]:bg-primary/50 h-6 w-1 rounded-lg z-10 flex shrink-0\" />\n )}\n </PanelResizeHandle>\n );\n}\n\nexport {\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n type ResizablePanelGroupProps,\n type ResizablePanelProps,\n type ResizableHandleProps,\n};\n"],"names":["PanelGroup","Panel","PanelResizeHandle"],"mappings":";;;;;AAaA;AAGA;AAGA;AACE;AACA;AACF;AAQA;AAA6B;AAC3B;AAEF;AACE;AACE;AAACA;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAwBA;AAAwB;AACtB;AACA;AACA;AACW;AAEb;AACE;AACA;AACA;AACA;AACA;AAGA;AACE;AACA;AAAsB;AAIxB;AAA6B;AAEzB;AAAoC;AAClC;AAGF;AACE;AAEA;AAIA;AACA;AACA;AACE;AAA2B;AACxB;AAEL;AAAA;AACF;AACF;AACA;AAIF;AACE;AAEA;AACA;AACA;AAEA;AAGA;AACE;AACE;AACA;AAEA;AACE;AAEE;AAAkB;AAElB;AAAiD;AACnD;AAEA;AAA+C;AACjD;AAGA;AAAuB;AACzB;AAIF;AAAuB;AAGzB;AACE;AAACC;AAAA;AACW;AACV;AACA;AACuB;AACnB;AAAA;AAGV;AAWA;AAAyB;AACvB;AACA;AAEF;AACE;AACE;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAGgQ;AAAA;AAI1Q;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area.js","sources":["../../../../../../src/components/ui/scroll-area.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ScrollArea as ScrollAreaPrimitive } from \"@base-ui/react/scroll-area\";\n\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Props for the ScrollArea component\n * @property {string} className - Additional CSS classes to apply\n * @property {React.ReactNode} children - Content to be rendered within the scrollable area\n */\nexport type ScrollAreaProps = ScrollAreaPrimitive.Root.Props;\n\n/**\n * ScrollArea component that provides a customizable scrollable container with styled scrollbars.\n * Built on Base UI's ScrollArea primitive with automatic overflow detection and custom scrollbar styling.\n *\n * @component\n * @example\n * ```tsx\n * <ScrollArea className=\"h-72 w-48 rounded-md border p-4\">\n * <div>Long content that needs scrolling...</div>\n * </ScrollArea>\n * ```\n *\n * @example\n * ```tsx\n * // With horizontal scrolling\n * <ScrollArea className=\"w-96 whitespace-nowrap rounded-md border\">\n * <div className=\"flex gap-4 p-4\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </div>\n * </ScrollArea>\n * ```\n *\n * @param {ScrollAreaProps} props - Component props extending Base UI ScrollArea.Root.Props\n * @returns {React.ReactElement} A styled scrollable container with custom scrollbars\n */\nfunction ScrollArea({ className, children, ...props }: ScrollAreaProps) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\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\n/**\n * Props for the ScrollBar component\n * @property {string} className - Additional CSS classes to apply\n * @property {\"vertical\" | \"horizontal\"} orientation - Scrollbar orientation (default: \"vertical\")\n */\nexport type ScrollBarProps = ScrollAreaPrimitive.Scrollbar.Props;\n\n/**\n * ScrollBar component that renders a custom-styled scrollbar for the ScrollArea.\n * Automatically positions itself based on orientation and includes a draggable thumb.\n * Typically used internally by ScrollArea but can be used independently for custom layouts.\n *\n * @component\n * @example\n * ```tsx\n * // Custom ScrollArea with horizontal scrollbar only\n * <ScrollAreaPrimitive.Root>\n * <ScrollAreaPrimitive.Viewport>\n * {children}\n * </ScrollAreaPrimitive.Viewport>\n * <ScrollBar orientation=\"horizontal\" />\n * </ScrollAreaPrimitive.Root>\n * ```\n *\n * @param {ScrollBarProps} props - Component props extending Base UI ScrollArea.Scrollbar.Props\n * @returns {React.ReactElement} A styled scrollbar with draggable thumb\n */\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollBarProps) {\n return (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"rounded-full bg-border relative flex-1\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollAreaPrimitive.Root","ScrollAreaPrimitive.Viewport","ScrollAreaPrimitive.Corner","ScrollAreaPrimitive.Scrollbar","ScrollAreaPrimitive.Thumb"],"mappings":";;;;;;;;AAuCA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,SAA0B;AACtE,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,SAAS;AAAA,MAClC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET;AAAA,UAAA;AAAA,QAAA;AAAA,4BAEF,WAAA,EAAU;AAAA,QACX,oBAACC,kBAAA,CAAA,CAA2B;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGlC;AA6BA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAmB;AACjB,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAkB;AAAA,MAClB;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ;AAAA,EAAA;AAGN;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"select.js","sources":["../../../../../../src/components/ui/select.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\";\n\nimport { cn } from \"@/lib/utils\";\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from \"lucide-react\";\n\ntype SelectProps<T = unknown> = SelectPrimitive.Root.Props<T>;\n\n/**\n * Select root component. Manages select state and provides context to children.\n * Use with SelectTrigger, SelectContent, SelectItem, and SelectValue.\n */\nconst Select = SelectPrimitive.Root;\n\ntype SelectGroupProps = SelectPrimitive.Group.Props;\n\n/**\n * Groups related select items with a label.\n */\nfunction SelectGroup({ className, ...props }: SelectGroupProps) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn(\"scroll-my-1 p-1\", className)}\n {...props}\n />\n );\n}\n\ntype SelectValueProps = SelectPrimitive.Value.Props;\n\n/**\n * Displays the selected item's value or placeholder text.\n */\nfunction SelectValue({ className, ...props }: SelectValueProps) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn(\"flex flex-1 text-left\", className)}\n {...props}\n />\n );\n}\n\ntype SelectTriggerProps = SelectPrimitive.Trigger.Props & {\n /** Select trigger size. @default \"default\" */\n size?: \"sm\" | \"default\";\n};\n\n/**\n * Button that opens the select dropdown. Automatically includes chevron icon.\n */\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectTriggerProps) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={\n <ChevronDownIcon className=\"text-muted-foreground size-4 pointer-events-none\" />\n }\n />\n </SelectPrimitive.Trigger>\n );\n}\n\ntype SelectContentProps = SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >;\n\n/**\n * Select dropdown content. Automatically renders in a portal with positioning and scroll buttons.\n */\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"start\",\n alignOffset = 0,\n alignItemWithTrigger = false,\n ...props\n}: SelectContentProps) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 min-w-36 rounded-4xl p-2 shadow-md ring-1 duration-100 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n}\n\ntype SelectLabelProps = SelectPrimitive.GroupLabel.Props;\n\n/**\n * Label for a group of select items.\n */\nfunction SelectLabel({ className, ...props }: SelectLabelProps) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\ntype SelectItemProps = SelectPrimitive.Item.Props;\n\n/**\n * Individual selectable item. Automatically shows check icon when selected.\n */\nfunction SelectItem({ className, children, ...props }: SelectItemProps) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-full py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 gap-2 shrink-0 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />\n }\n >\n <CheckIcon className=\"pointer-events-none\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n}\n\ntype SelectSeparatorProps = SelectPrimitive.Separator.Props;\n\n/**\n * Visual separator between select groups.\n */\nfunction SelectSeparator({ className, ...props }: SelectSeparatorProps) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px pointer-events-none\", className)}\n {...props}\n />\n );\n}\n\ntype SelectScrollUpButtonProps = React.ComponentProps<\n typeof SelectPrimitive.ScrollUpArrow\n>;\n\n/**\n * Scroll indicator button at the top of scrollable content.\n */\nfunction SelectScrollUpButton({\n className,\n ...props\n}: SelectScrollUpButtonProps) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpArrow>\n );\n}\n\ntype SelectScrollDownButtonProps = React.ComponentProps<\n typeof SelectPrimitive.ScrollDownArrow\n>;\n\n/**\n * Scroll indicator button at the bottom of scrollable content.\n */\nfunction SelectScrollDownButton({\n className,\n ...props\n}: SelectScrollDownButtonProps) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownArrow>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n type SelectProps,\n type SelectContentProps,\n type SelectGroupProps,\n type SelectItemProps,\n type SelectLabelProps,\n type SelectScrollDownButtonProps,\n type SelectScrollUpButtonProps,\n type SelectSeparatorProps,\n type SelectTriggerProps,\n type SelectValueProps,\n};\n"],"names":["SelectPrimitive.Group","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.Positioner","SelectPrimitive.Popup","SelectPrimitive.GroupLabel","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.Separator","SelectPrimitive.ScrollUpArrow","SelectPrimitive.ScrollDownArrow"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAcA;AAOA;AACE;AACE;AAACA;AAAA;AACW;AACgC;AACtC;AAAA;AAGV;AAOA;AACE;AACE;AAACC;AAAA;AACW;AACsC;AAC5C;AAAA;AAGV;AAUA;AAAuB;AACrB;AACO;AACP;AAEF;AACE;AACE;AAACC;AAAA;AACW;AACC;AACA;AACT;AACA;AAAA;AAEE;AAEH;AAAA;AACD;AAACC;AAAA;AAEiF;AAAA;AAAA;AAElF;AAAA;AAGN;AAWA;AAAuB;AACrB;AACA;AACO;AACM;AACL;AACM;AACS;AAEzB;AACE;AAEI;AAACC;AAAA;AACC;AACA;AACA;AACA;AACA;AACU;AAEV;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEJ;AAAsB;AACU;AACR;AAAA;AAAA;AAAA;AAC1B;AAIR;AAOA;AACE;AACE;AAACC;AAAA;AACW;AAC0D;AAChE;AAAA;AAGV;AAOA;AACE;AACE;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEJ;AAEA;AACA;AAACC;AAAA;AAEkG;AAGtD;AAAA;AAAA;AAC7C;AAAA;AAGN;AAOA;AACE;AACE;AAACC;AAAA;AACW;AAC8D;AACpE;AAAA;AAGV;AASA;AAA8B;AAC5B;AAEF;AACE;AACE;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEW;AAAA;AAGrB;AASA;AAAgC;AAC9B;AAEF;AACE;AACE;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEa;AAAA;AAGvB;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"separator.js","sources":["../../../../../../src/components/ui/separator.tsx"],"sourcesContent":["import { Separator as SeparatorPrimitive } from \"@base-ui/react/separator\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype SeparatorProps = SeparatorPrimitive.Props;\n\n/**\n * Visual divider for separating content sections.\n * Supports both horizontal (default) and vertical orientations.\n */\nfunction Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorProps) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator\"\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator, type SeparatorProps };\n"],"names":["SeparatorPrimitive"],"mappings":";;;AAUA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAmB;AACjB,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sheet.js","sources":["../../../../../../src/components/ui/sheet.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { XIcon } from \"lucide-react\";\n\ntype SheetProps = SheetPrimitive.Root.Props;\n\n/**\n * Sheet root component. Manages open/closed state for slide-in panels.\n * Built on Base UI Dialog with directional slide animations.\n */\nfunction Sheet({ ...props }: SheetProps) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\ntype SheetTriggerProps = SheetPrimitive.Trigger.Props;\n\n/**\n * Button that opens the sheet. Use `render` prop to customize the trigger element.\n */\nfunction SheetTrigger({ ...props }: SheetTriggerProps) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\ntype SheetCloseProps = SheetPrimitive.Close.Props;\n\n/**\n * Button that closes the sheet. Use `render` prop to customize the close element.\n */\nfunction SheetClose({ ...props }: SheetCloseProps) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\ntype SheetPortalProps = SheetPrimitive.Portal.Props;\n\n/**\n * Portal container for sheet content. Renders sheet outside normal DOM hierarchy.\n */\nfunction SheetPortal({ ...props }: SheetPortalProps) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\ntype SheetOverlayProps = SheetPrimitive.Backdrop.Props;\n\n/**\n * Translucent backdrop overlay with blur effect. Automatically included in SheetContent.\n */\nfunction SheetOverlay({ className, ...props }: SheetOverlayProps) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SheetContentProps = SheetPrimitive.Popup.Props & {\n /** Which edge the sheet slides in from. @default \"right\" */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Show close button (X) in top-right corner. @default true */\n showCloseButton?: boolean;\n};\n\n/**\n * Sheet content panel with automatic portal, overlay, and slide animations.\n * Slides in from specified edge with backdrop blur effect.\n */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetContentProps) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n );\n}\n\ntype SheetHeaderProps = React.ComponentProps<\"div\">;\n\n/**\n * Header section for sheet title and description. Provides consistent spacing.\n */\nfunction SheetHeader({ className, ...props }: SheetHeaderProps) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n );\n}\n\ntype SheetFooterProps = React.ComponentProps<\"div\">;\n\n/**\n * Footer section for sheet actions. Automatically sticks to bottom with consistent spacing.\n */\nfunction SheetFooter({ className, ...props }: SheetFooterProps) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n );\n}\n\ntype SheetTitleProps = SheetPrimitive.Title.Props;\n\n/**\n * Accessible sheet title. Automatically linked to sheet for screen readers.\n */\nfunction SheetTitle({ className, ...props }: SheetTitleProps) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-medium\", className)}\n {...props}\n />\n );\n}\n\ntype SheetDescriptionProps = SheetPrimitive.Description.Props;\n\n/**\n * Accessible sheet description. Provides additional context for screen readers.\n */\nfunction SheetDescription({ className, ...props }: SheetDescriptionProps) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n type SheetProps,\n type SheetTriggerProps,\n type SheetCloseProps,\n type SheetContentProps,\n type SheetHeaderProps,\n type SheetFooterProps,\n type SheetTitleProps,\n type SheetDescriptionProps,\n};\n"],"names":["SheetPrimitive.Root","SheetPrimitive.Trigger","SheetPrimitive.Close","SheetPrimitive.Portal","SheetPrimitive.Backdrop","SheetPrimitive.Popup","XIcon","SheetPrimitive.Title","SheetPrimitive.Description"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,MAAM,EAAE,GAAG,SAAqB;AACvC,6BAAQA,YAAA,EAAoB,aAAU,SAAS,GAAG,OAAO;AAC3D;AAOA,SAAS,aAAa,EAAE,GAAG,SAA4B;AACrD,6BAAQC,eAAA,EAAuB,aAAU,iBAAiB,GAAG,OAAO;AACtE;AAOA,SAAS,WAAW,EAAE,GAAG,SAA0B;AACjD,6BAAQC,aAAA,EAAqB,aAAU,eAAe,GAAG,OAAO;AAClE;AAOA,SAAS,YAAY,EAAE,GAAG,SAA2B;AACnD,6BAAQC,cAAA,EAAsB,aAAU,gBAAgB,GAAG,OAAO;AACpE;AAOA,SAAS,aAAa,EAAE,WAAW,GAAG,SAA4B;AAChE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAaA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,GAAG;AACL,GAAsB;AACpB,8BACG,aAAA,EACC,UAAA;AAAA,IAAA,oBAAC,cAAA,EAAa;AAAA,IACd;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,aAAU;AAAA,QACV,aAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA;AAAA,UACA,mBACC;AAAA,YAACH;AAAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACV,QACE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,WAAU;AAAA,kBACV,MAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIT,UAAA;AAAA,gBAAA,oBAACI,GAAA,EAAM;AAAA,gBACP,oBAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ;AAOA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,MACnD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mCAAmC,SAAS;AAAA,MACzD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA0B;AAC5D,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAgC;AACxE,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","sources":["../../../../../../src/components/ui/sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\n/**\n * Hook to access sidebar context including state, mobile state, and toggle functions.\n * Must be used within SidebarProvider.\n */\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\ntype SidebarProviderProps = React.ComponentProps<\"div\"> & {\n /** Initial open state on desktop. @default true */\n defaultOpen?: boolean;\n /** Controlled open state for desktop. */\n open?: boolean;\n /** Callback when open state changes. Persists state in cookie. */\n onOpenChange?: (open: boolean) => void;\n};\n\n/**\n * Root provider for sidebar with state management, keyboard shortcuts (⌘B), and mobile detection.\n * Manages collapsed/expanded state and persists preference in cookie.\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\ntype SidebarProps = React.ComponentProps<\"div\"> & {\n /** Which side to display sidebar. @default \"left\" */\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\" | \"fixed\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n};\n\n/**\n * Sidebar container with responsive behavior. Renders as Sheet on mobile.\n * Use with SidebarProvider for state management.\n */\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n // Mobile Sheet only for standard variants.\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n { \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className={cn(\n \"group peer text-sidebar-foreground\",\n variant === \"fixed\" ? \"flex\" : \"hidden md:block\", // Visible on all screens for fixed\n )}\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"transition-[width] duration-200 ease-linear relative w-(--sidebar-width) bg-transparent\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n variant === \"fixed\" &&\n \"group-data-[state=collapsed]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear flex\",\n variant !== \"fixed\" && \"hidden md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n variant === \"fixed\" &&\n \"group-data-[state=collapsed]:w-(--sidebar-width-icon) group-data-[state=collapsed]:left-0\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 flex size-full flex-col\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\ntype SidebarTriggerProps = React.ComponentProps<typeof Button>;\n\n/**\n * Button to toggle sidebar open/closed. Shows hamburger icon.\n */\nfunction SidebarTrigger({ className, onClick, ...props }: SidebarTriggerProps) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(\n className,\n // When fixed, the trigger is forced to the top center of the collapsed/expanded rail\n \"group-data-[variant=fixed]/sidebar:absolute group-data-[variant=fixed]/sidebar:top-2 group-data-[variant=fixed]/sidebar:left-1/2 group-data-[variant=fixed]/sidebar:-translate-x-1/2 group-data-[variant=fixed]/sidebar:z-20\",\n \"group-data-[variant=fixed]/sidebar:flex group-data-[variant=fixed]/sidebar:items-center group-data-[variant=fixed]/sidebar:justify-center\",\n )}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\ntype SidebarRailProps = React.ComponentProps<\"button\">;\n\n/**\n * Invisible rail element on sidebar edge for drag-to-resize interaction.\n */\nfunction SidebarRail({ className, ...props }: SidebarRailProps) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarInsetProps = React.ComponentProps<\"main\">;\n\n/**\n * Main content area that sits beside the sidebar. Automatically adjusts margins based on sidebar state.\n */\nfunction SidebarInset({ className, ...props }: SidebarInsetProps) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 relative flex w-full flex-1 flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarInputProps = React.ComponentProps<typeof Input>;\n\n/**\n * Styled input for sidebar search/filter functionality.\n */\nfunction SidebarInput({ className, ...props }: SidebarInputProps) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarHeaderProps = React.ComponentProps<\"div\">;\n\n/**\n * Top section of sidebar for branding, app switcher, or global actions.\n */\nfunction SidebarHeader({ className, ...props }: SidebarHeaderProps) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"gap-2 p-2 flex flex-col\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarFooterProps = React.ComponentProps<\"div\">;\n\n/**\n * Bottom section of sidebar for user profile, settings, or secondary actions.\n */\nfunction SidebarFooter({ className, ...props }: SidebarFooterProps) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"gap-2 p-2 flex flex-col\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarSeparatorProps = React.ComponentProps<typeof Separator>;\n\n/**\n * Horizontal divider between sidebar sections.\n */\nfunction SidebarSeparator({ className, ...props }: SidebarSeparatorProps) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarContentProps = React.ComponentProps<\"div\">;\n\n/**\n * Scrollable main content area of sidebar. Contains SidebarGroup components.\n */\nfunction SidebarContent({ className, ...props }: SidebarContentProps) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"no-scrollbar gap-2 flex min-h-0 flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarGroupProps = React.ComponentProps<\"div\">;\n\n/**\n * Container for grouped menu items with optional label.\n */\nfunction SidebarGroup({ className, ...props }: SidebarGroupProps) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"p-2 relative flex w-full min-w-0 flex-col\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarGroupLabelProps = useRender.ComponentProps<\"div\"> &\n React.ComponentProps<\"div\">;\n\n/**\n * Label heading for a sidebar group. Fades out when sidebar collapses to icon mode.\n */\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: SidebarGroupLabelProps) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n });\n}\n\ntype SidebarGroupActionProps = useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\">;\n\n/**\n * Action button displayed in top-right of group (e.g., add, expand all).\n */\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: SidebarGroupActionProps) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden\",\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n });\n}\n\ntype SidebarGroupContentProps = React.ComponentProps<\"div\">;\n\n/**\n * Container for menu items within a group.\n */\nfunction SidebarGroupContent({\n className,\n ...props\n}: SidebarGroupContentProps) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"text-sm w-full\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarMenuProps = React.ComponentProps<\"ul\">;\n\n/**\n * Unordered list container for sidebar menu items.\n */\nfunction SidebarMenu({ className, ...props }: SidebarMenuProps) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"gap-1 flex w-full min-w-0 flex-col\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarMenuItemProps = React.ComponentProps<\"li\">;\n\n/**\n * List item wrapper for a single menu entry.\n */\nfunction SidebarMenuItem({ className, ...props }: SidebarMenuItemProps) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-md p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ntype SidebarMenuButtonProps = useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n /** Mark as active/current page. */\n isActive?: boolean;\n /** Tooltip content shown when sidebar is collapsed. */\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n } & VariantProps<typeof sidebarMenuButtonVariants>;\n\n/**\n * Clickable button for sidebar menu item. Supports variants, sizes, active state, and tooltips.\n */\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: SidebarMenuButtonProps) {\n const { isMobile, state } = useSidebar();\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props,\n ),\n render: !tooltip ? render : TooltipTrigger,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n });\n\n if (!tooltip) {\n return comp;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n {comp}\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\ntype SidebarMenuActionProps = useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n /** Only show on hover/focus. @default false */\n showOnHover?: boolean;\n };\n\n/**\n * Secondary action button for menu item (e.g., delete, edit). Positioned on right side.\n */\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: SidebarMenuActionProps) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n });\n}\n\ntype SidebarMenuBadgeProps = React.ComponentProps<\"div\">;\n\n/**\n * Badge/counter displayed on right side of menu item (e.g., notification count).\n */\nfunction SidebarMenuBadge({ className, ...props }: SidebarMenuBadgeProps) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 flex items-center justify-center tabular-nums select-none group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMenuSkeletonProps = React.ComponentProps<\"div\"> & {\n /** Show icon skeleton. @default false */\n showIcon?: boolean;\n};\n\n/**\n * Loading skeleton placeholder for menu item with randomized width.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: SidebarMenuSkeletonProps) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n });\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"h-8 gap-2 rounded-md px-2 flex items-center\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\ntype SidebarMenuSubProps = React.ComponentProps<\"ul\">;\n\n/**\n * Nested submenu list with indented border. Place inside SidebarMenuItem.\n */\nfunction SidebarMenuSub({ className, ...props }: SidebarMenuSubProps) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden flex min-w-0 flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMenuSubItemProps = React.ComponentProps<\"li\">;\n\n/**\n * List item wrapper for submenu entry.\n */\nfunction SidebarMenuSubItem({ className, ...props }: SidebarMenuSubItemProps) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\ntype SidebarMenuSubButtonProps = useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n /** Size variant. @default \"md\" */\n size?: \"sm\" | \"md\";\n /** Mark as active/current page. */\n isActive?: boolean;\n };\n\n/**\n * Link button for submenu item. Defaults to anchor tag.\n */\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: SidebarMenuSubButtonProps) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n className,\n ),\n },\n props,\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n });\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n type SidebarProps,\n type SidebarContentProps,\n type SidebarFooterProps,\n type SidebarGroupProps,\n type SidebarGroupActionProps,\n type SidebarGroupContentProps,\n type SidebarGroupLabelProps,\n type SidebarHeaderProps,\n type SidebarInputProps,\n type SidebarInsetProps,\n type SidebarMenuProps,\n type SidebarMenuActionProps,\n type SidebarMenuBadgeProps,\n type SidebarMenuButtonProps,\n type SidebarMenuItemProps,\n type SidebarMenuSkeletonProps,\n type SidebarMenuSubProps,\n type SidebarMenuSubButtonProps,\n type SidebarMenuSubItemProps,\n type SidebarProviderProps,\n type SidebarRailProps,\n type SidebarSeparatorProps,\n type SidebarTriggerProps,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AA2BA;AACA;AACA;AACA;AACA;AACA;AAYA;AAMA;AACE;AACA;AACE;AAAmE;AAGrE;AACF;AAeA;AAAyB;AACT;AACR;AACQ;AACd;AACA;AACA;AAEF;AACE;AACA;AAIA;AACA;AACA;AAAsB;AAElB;AACA;AACE;AAAqB;AAErB;AAAkB;AAIpB;AAAgG;AAClG;AACkB;AAIpB;AACE;AAA0E;AAI5E;AACE;AACE;AAIE;AACA;AAAA;AACF;AAGF;AACA;AAAgE;AAKlE;AAEA;AAA2B;AAClB;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEuE;AAG3E;AAEI;AAAC;AAAA;AACW;AAER;AACqB;AACK;AACrB;AAAA;AAGI;AACT;AACA;AAAA;AAEE;AAEH;AAAA;AAIT;AAaA;AAAiB;AACR;AACG;AACI;AACd;AACA;AAEF;AACE;AAEA;AACE;AACE;AAAC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEH;AAAA;AAAA;AAMP;AACE;AAEI;AAAC;AAAA;AACc;AACH;AACE;AACF;AAEa;AAEvB;AAEA;AACE;AAAmB;AAC2B;AAChD;AACuD;AAAA;AAAA;AAE3D;AAIJ;AACE;AAAC;AAAA;AACY;AACT;AAC+B;AAAA;AAAA;AAErB;AAC4C;AAC1C;AACH;AACD;AAGV;AAAA;AAAC;AAAA;AACW;AACC;AACT;AACA;AACA;AAGI;AAEF;AAAA;AACJ;AAAA;AAEF;AAAC;AAAA;AACW;AACC;AACT;AACuB;AAGnB;AAAA;AAIA;AAEF;AACF;AAAA;AAEE;AAEJ;AAAC;AAAA;AACc;AACH;AACA;AAET;AAAA;AAAA;AACH;AAAA;AACF;AAAA;AAGN;AAOA;AACE;AAEA;AACE;AAAC;AAAA;AACc;AACH;AACF;AACH;AACM;AACT;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AACF;AACI;AAEJ;AAAe;AACyB;AAAA;AAAA;AAG9C;AAOA;AACE;AAEA;AACE;AAAC;AAAA;AACc;AACH;AACC;AACD;AACD;AACH;AACK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEE;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACkD;AAC3D;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACqC;AAC9C;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACqC;AAC9C;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AAC2C;AACpD;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACF;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACuD;AAChE;AAAA;AAGV;AAQA;AAA2B;AACzB;AACA;AAEF;AACE;AAAiB;AACC;AACT;AACL;AACa;AACT;AACA;AAAA;AACF;AAEF;AAAA;AAEF;AACO;AACC;AACG;AAAA;AAGf;AAQA;AAA4B;AAC1B;AACA;AAEF;AACE;AAAiB;AACC;AACT;AACL;AACa;AACT;AACA;AAAA;AACF;AAEF;AAAA;AAEF;AACO;AACC;AACG;AAAA;AAGf;AAOA;AAA6B;AAC3B;AAEF;AACE;AACE;AAAC;AAAA;AACW;AACG;AAC4B;AACrC;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACgD;AACzD;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACsC;AAC/C;AAAA;AAGV;AAEA;AAAkC;AAChC;AACA;AACY;AACC;AACE;AAEP;AAAA;AAEE;AACK;AACL;AACA;AAAA;AACN;AAEe;AACN;AACH;AAAA;AAGZ;AAaA;AAA2B;AACzB;AACW;AACD;AACH;AACP;AACA;AAEF;AACE;AACA;AAAuB;AACL;AACT;AACL;AACuE;AAAA;AAEvE;AAAA;AAE0B;AACrB;AACC;AACG;AACT;AACQ;AAAA;AAIZ;AACE;AAAO;AAGT;AACE;AAAU;AACE;AAAA;AAId;AAEK;AAAA;AACD;AAAC;AAAA;AACM;AACC;AAC2B;AAC7B;AAAA;AAAA;AAIZ;AAWA;AAA2B;AACzB;AACA;AACc;AAEhB;AACE;AAAiB;AACC;AACT;AACL;AACa;AACT;AAEE;AACF;AAAA;AACF;AAEF;AAAA;AAEF;AACO;AACC;AACG;AAAA;AAGf;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACF;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAUA;AAA6B;AAC3B;AACW;AAEb;AAEE;AACE;AAA6C;AAG/C;AACE;AAAC;AAAA;AACW;AACG;AACyD;AAClE;AAEH;AACC;AAAC;AAAA;AACW;AACG;AAAA;AAAA;AAGjB;AAAC;AAAA;AACW;AACG;AAEX;AACsB;AAAA;AACtB;AAAA;AAEJ;AAAA;AAGN;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AACF;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAOA;AACE;AACE;AAAC;AAAA;AACW;AACG;AAC0C;AACnD;AAAA;AAGV;AAaA;AAA8B;AAC5B;AACO;AACI;AACX;AAEF;AACE;AAAiB;AACC;AACT;AACL;AACa;AACT;AACA;AAAA;AACF;AAEF;AAAA;AAEF;AACO;AACC;AACG;AACT;AACQ;AAAA;AAGd;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"skeleton.js","sources":["../../../../../../src/components/ui/skeleton.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\";\n\ntype SkeletonProps = React.ComponentProps<\"div\">;\n\n/**\n * Skeleton loading placeholder with pulse animation.\n * Use to indicate content is loading while maintaining layout structure.\n */\nfunction Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-muted rounded-4xl animate-pulse\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton, type SkeletonProps };\n"],"names":[],"mappings":";;AAQA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAwB;AACxD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider.js","sources":["../../../../../../src/components/ui/slider.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype SliderProps = SliderPrimitive.Root.Props;\n\n/**\n * Slider for selecting single values or ranges with one or more draggable thumbs.\n * Supports horizontal and vertical orientations with keyboard navigation.\n *\n * @example\n * // Single value slider\n * <Slider defaultValue={[50]} min={0} max={100} />\n *\n * @example\n * // Range slider (two thumbs)\n * <Slider defaultValue={[25, 75]} min={0} max={100} />\n *\n * @example\n * // Controlled slider with step\n * <Slider value={value} onValueChange={setValue} min={0} max={100} step={10} />\n */\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: SliderProps) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min],\n [value, defaultValue, min],\n );\n\n return (\n <SliderPrimitive.Root\n className=\"relative flex items-center w-full h-10 data-vertical:h-64 data-vertical:w-10\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n {...props}\n >\n <SliderPrimitive.Control\n className={cn(\n \"relative flex items-center w-full h-full touch-none select-none\",\n className,\n )}\n >\n <SliderPrimitive.Track\n className={cn(\n \"relative grow rounded-full\",\n \"h-1.5 w-full bg-muted\",\n \"data-vertical:w-1.5 data-vertical:h-full\",\n )}\n >\n <SliderPrimitive.Indicator\n className={cn(\"absolute rounded-full bg-primary\", \"h-full w-full\")}\n />\n </SliderPrimitive.Track>\n\n {_values.map((_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n className={cn(\n \"absolute z-30 size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-primary bg-background shadow-md\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"top-1/2\",\n )}\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n );\n}\n\nexport { Slider, type SliderProps };\n"],"names":["SliderPrimitive.Root","SliderPrimitive.Control","SliderPrimitive.Track","SliderPrimitive.Indicator","SliderPrimitive.Thumb"],"mappings":";;;;;;;;;AAyBA;AAAgB;AACd;AACA;AACA;AACM;AACA;AAER;AACE;AAAsB;AAMR;AACa;AAG3B;AACE;AAACA;AAAA;AACW;AACV;AACA;AACA;AACA;AACI;AAEJ;AAACC;AAAA;AACY;AACT;AACA;AAAA;AAGF;AAAA;AAACC;AAAA;AACY;AACT;AACA;AACA;AAAA;AAGF;AAACC;AAAA;AACkE;AAAA;AAAA;AACnE;AAAA;AAIA;AAACC;AAAA;AAEY;AACT;AACA;AACA;AAAA;AACF;AALK;AAOR;AAAA;AAAA;AAAA;AACH;AAGN;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sonner.js","sources":["../../../../../../src/components/ui/sonner.tsx"],"sourcesContent":["import { Toaster as Sonner, toast, type ToasterProps } from \"sonner\";\nimport {\n CircleCheckIcon,\n InfoIcon,\n TriangleAlertIcon,\n OctagonXIcon,\n Loader2Icon,\n} from \"lucide-react\";\n\ntype ToasterComponentProps = ToasterProps;\n\n/**\n * Toast notification container with themed icons and color system integration.\n *\n * Provides a pre-configured Sonner toaster with custom icons for each toast type\n * and automatic theme integration. Use the exported `toast` function to trigger notifications.\n *\n * @example\n * ```tsx\n * // Add to your app root\n * <Toaster position=\"bottom-right\" />\n *\n * // Trigger toasts anywhere\n * toast.success(\"Saved successfully\")\n * toast.error(\"Failed to save\", { description: error.message })\n * ```\n */\nfunction Toaster({\n theme = \"system\",\n richColors = true,\n ...props\n}: ToasterComponentProps) {\n return (\n <Sonner\n data-slot=\"toaster\"\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n richColors={richColors}\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n // Success\n \"--success-bg\": \"oklch(from var(--success) l c h / 10%)\",\n \"--success-text\": \"var(--success)\",\n \"--success-border\": \"oklch(from var(--success) l c h / 30%)\",\n // Error\n \"--error-bg\": \"oklch(from var(--destructive) l c h / 10%)\",\n \"--error-text\": \"var(--destructive)\",\n \"--error-border\": \"oklch(from var(--destructive) l c h / 30%)\",\n // Warning\n \"--warning-bg\": \"oklch(from var(--warning) l c h / 10%)\",\n \"--warning-text\": \"var(--warning)\",\n \"--warning-border\": \"oklch(from var(--warning) l c h / 30%)\",\n // Info\n \"--info-bg\": \"oklch(from var(--info) l c h / 10%)\",\n \"--info-text\": \"var(--info)\",\n \"--info-border\": \"oklch(from var(--info) l c h / 30%)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"group backdrop-blur-md\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster, toast, type ToasterComponentProps };\n"],"names":["Sonner","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon"],"mappings":";;;;;;;;AA2BA,SAAS,QAAQ;AAAA,EACf,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAU;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,SAAS,oBAACC,aAAA,EAAgB,WAAU,SAAA,CAAS;AAAA,QAC7C,MAAM,oBAACC,MAAA,EAAS,WAAU,SAAA,CAAS;AAAA,QACnC,SAAS,oBAACC,eAAA,EAAkB,WAAU,SAAA,CAAS;AAAA,QAC/C,OAAO,oBAACC,UAAA,EAAa,WAAU,SAAA,CAAS;AAAA,QACxC,SAAS,oBAACC,cAAA,EAAY,WAAU,sBAAA,CAAsB;AAAA,MAAA;AAAA,MAExD,OACE;AAAA,QACE,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA;AAAA,QAEnB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,oBAAoB;AAAA;AAAA,QAEpB,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,kBAAkB;AAAA;AAAA,QAElB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,oBAAoB;AAAA;AAAA,QAEpB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,iBAAiB;AAAA,MAAA;AAAA,MAGrB,cAAc;AAAA,QACZ,YAAY;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spinner.js","sources":["../../../../../../src/components/ui/spinner.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport { Loader2Icon } from \"lucide-react\";\n\ntype SpinnerProps = React.ComponentProps<\"svg\">;\n\n/**\n * Animated loading spinner for indicating processing states.\n * Uses Lucide's Loader2 icon with continuous rotation animation.\n */\nfunction Spinner({ className, ...props }: SpinnerProps) {\n return (\n <Loader2Icon\n data-slot=\"spinner\"\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n );\n}\n\nexport { Spinner, type SpinnerProps };\n"],"names":["Loader2Icon"],"mappings":";;;AASA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAuB;AACtD,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW,GAAG,uBAAuB,SAAS;AAAA,MAC7C,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.js","sources":["../../../../../../src/components/ui/switch.tsx"],"sourcesContent":["\"use client\";\n\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype SwitchProps = SwitchPrimitive.Root.Props & {\n /** Switch size variant. @default \"default\" */\n size?: \"sm\" | \"default\";\n};\n\n/**\n * Toggle switch for binary on/off settings.\n * Renders a styled switch with automatic focus management and form integration.\n */\nfunction Switch({ className, size = \"default\", ...props }: SwitchProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent shadow-xs focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 pointer-events-none block ring-0 transition-transform\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch, type SwitchProps };\n"],"names":["SwitchPrimitive.Root","SwitchPrimitive.Thumb"],"mappings":";;;;;AAeA;AACE;AACE;AAACA;AAAA;AACW;AACC;AACA;AACT;AACA;AAAA;AAEE;AAEJ;AAACC;AAAA;AACW;AACA;AAAA;AAAA;AACZ;AAGN;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.js","sources":["../../../../../../src/components/ui/table.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype TableProps = React.ComponentProps<\"table\">;\n\n/**\n * Root table component with automatic horizontal scrolling container.\n * Wraps standard HTML table element with responsive overflow behavior.\n */\nfunction Table({ className, ...props }: TableProps) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full p-8 overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\ntype TableHeaderProps = React.ComponentProps<\"thead\">;\n\n/**\n * Table header section for column headings.\n * Use with TableHead for individual header cells.\n */\nfunction TableHeader({ className, ...props }: TableHeaderProps) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\ntype TableBodyProps = React.ComponentProps<\"tbody\">;\n\n/**\n * Table body section for data rows.\n * Use with TableRow and TableCell for row content.\n */\nfunction TableBody({ className, ...props }: TableBodyProps) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\ntype TableFooterProps = React.ComponentProps<\"tfoot\">;\n\n/**\n * Table footer section for summary rows.\n * Typically used for totals or aggregated data.\n */\nfunction TableFooter({ className, ...props }: TableFooterProps) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TableRowProps = React.ComponentProps<\"tr\">;\n\n/**\n * Table row with hover and selection states.\n * Add `data-state=\"selected\"` attribute to highlight row.\n */\nfunction TableRow({ className, ...props }: TableRowProps) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted h-10 border-b transition-colors\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TableHeadProps = React.ComponentProps<\"th\">;\n\n/**\n * Table header cell for column titles.\n * Use within TableHeader > TableRow.\n */\nfunction TableHead({ className, ...props }: TableHeadProps) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TableCellProps = React.ComponentProps<\"td\">;\n\n/**\n * Table data cell for row content.\n * Use within TableBody > TableRow.\n */\nfunction TableCell({ className, ...props }: TableCellProps) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TableCaptionProps = React.ComponentProps<\"caption\">;\n\n/**\n * Table caption for accessibility and description.\n * Rendered below the table by default.\n */\nfunction TableCaption({ className, ...props }: TableCaptionProps) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 pt-2 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n type TableProps,\n type TableHeaderProps,\n type TableBodyProps,\n type TableFooterProps,\n type TableHeadProps,\n type TableRowProps,\n type TableCellProps,\n type TableCaptionProps,\n};\n"],"names":[],"mappings":";;;AAUA,SAAS,MAAM,EAAE,WAAW,GAAG,SAAqB;AAClD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,UACvD,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAGN;AAQA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mBAAmB,SAAS;AAAA,MACzC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAyB;AAC1D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS;AAAA,MACpD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA2B;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAwB;AACxD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAyB;AAC1D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAyB;AAC1D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAQA,SAAS,aAAa,EAAE,WAAW,GAAG,SAA4B;AAChE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2CAA2C,SAAS;AAAA,MACjE,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","sources":["../../../../../../src/components/ui/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype TabsProps = TabsPrimitive.Root.Props;\n\n/**\n * Root container for tabs component that manages tab state and orientation.\n * Supports both controlled and uncontrolled usage with horizontal or vertical layout.\n */\nfunction Tabs({ className, orientation = \"horizontal\", ...props }: TabsProps) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"gap-2 group/tabs flex data-[orientation=horizontal]:flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst tabsListVariants = cva(\n \"rounded-full p-[4px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-md group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n compoundVariants: [\n {\n class:\n \"group-data-[orientation=vertical]/tabs:rounded-4xl group-data-[orientation=vertical]/tabs:p-1.5\",\n },\n ],\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ntype TabsListProps = TabsPrimitive.List.Props &\n VariantProps<typeof tabsListVariants>;\n\n/**\n * Container for tab triggers with two visual variants.\n * @param variant - Visual style: \"default\" (background highlight) or \"line\" (underline indicator). @default \"default\"\n */\nfunction TabsList({ className, variant = \"default\", ...props }: TabsListProps) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\ntype TabsTriggerProps = TabsPrimitive.Tab.Props;\n\n/**\n * Individual tab button that activates the corresponding panel.\n * Supports icons, badges, and disabled state. Active tab has visual highlight or underline based on variant.\n */\nfunction TabsTrigger({ className, ...props }: TabsTriggerProps) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"gap-1.5 rounded-full border border-transparent px-3 py-2 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background dark:data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 data-active:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TabsContentProps = TabsPrimitive.Panel.Props;\n\n/**\n * Content panel that displays when its corresponding tab is active.\n * Automatically hidden/shown based on active tab value.\n */\nfunction TabsContent({ className, ...props }: TabsContentProps) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"text-sm flex-1 outline-none\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n type TabsProps,\n type TabsListProps,\n type TabsTriggerProps,\n type TabsContentProps,\n};\n"],"names":["TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Tab","TabsPrimitive.Panel"],"mappings":";;;;;;;;AAaA;AACE;AACE;AAACA;AAAA;AACW;AACQ;AACP;AACT;AACA;AAAA;AAEE;AAAA;AAGV;AAEA;AAAyB;AACvB;AACA;AACY;AACC;AACE;AACH;AAAA;AACR;AAEgB;AAChB;AAEI;AAAA;AACJ;AAEe;AACN;AAAA;AAGf;AASA;AACE;AACE;AAACC;AAAA;AACW;AACI;AACwC;AAClD;AAAA;AAGV;AAQA;AACE;AACE;AAACC;AAAA;AACW;AACC;AACT;AACA;AACA;AACA;AACA;AAAA;AAEE;AAAA;AAGV;AAQA;AACE;AACE;AAACC;AAAA;AACW;AAC4C;AAClD;AAAA;AAGV;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"textarea.js","sources":["../../../../../../src/components/ui/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype TextareaProps = React.ComponentProps<\"textarea\">;\n\n/**\n * Multi-line text input with auto-grow behavior and validation states.\n *\n * Features:\n * - Auto-grows vertically with content (field-sizing-content)\n * - Error state via aria-invalid\n * - Supports all native textarea props (rows, disabled, etc.)\n *\n * @example\n * ```tsx\n * <Textarea placeholder=\"Enter description...\" rows={4} />\n * ```\n */\nfunction Textarea({ className, ...props }: TextareaProps) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-3xl border bg-transparent px-3 py-2.5 text-base shadow-xs transition-[color,box-shadow] focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea, type TextareaProps };\n"],"names":[],"mappings":";;;AAmBA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAwB;AACxD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast.js","sources":["../../../../../../src/components/ui/toast.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { XIcon, CheckCircle2, AlertCircle, Info, Loader2 } from \"lucide-react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type ToastVariant =\r\n | \"default\"\r\n | \"success\"\r\n | \"destructive\"\r\n | \"info\"\r\n | \"loading\";\r\n\r\ninterface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\r\n title?: string;\r\n description?: string;\r\n variant?: ToastVariant;\r\n onClose?: () => void;\r\n}\r\n\r\nconst variantIcons = {\r\n default: null,\r\n success: <CheckCircle2 className=\"size-5 text-success\" />,\r\n destructive: <AlertCircle className=\"size-5 text-destructive\" />,\r\n info: <Info className=\"size-5 text-info\" />,\r\n loading: <Loader2 className=\"size-5 animate-spin text-muted-foreground\" />,\r\n};\r\n\r\nfunction Toast({\r\n title,\r\n description,\r\n variant = \"default\",\r\n className,\r\n onClose,\r\n children,\r\n ...props\r\n}: ToastProps) {\r\n return (\r\n <div\r\n data-slot=\"toast\"\r\n data-variant={variant}\r\n className={cn(\r\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-4.5xl border p-5 pr-8 transition-all\",\r\n \"bg-card/20 border-border\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <div className=\"flex gap-3\">\r\n {variantIcons[variant]}\r\n <div className=\"grid gap-1\">\r\n {title && <div className=\"text-sm font-semibold\">{title}</div>}\r\n {description && (\r\n <div className=\"text-xs opacity-90 text-muted-foreground\">\r\n {description}\r\n </div>\r\n )}\r\n {children}\r\n </div>\r\n </div>\r\n <button\r\n onClick={onClose}\r\n className=\"absolute right-3 top-2 p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground group-hover:opacity-100\"\r\n >\r\n <XIcon className=\"size-4\" />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport { Toast, type ToastProps };\r\n"],"names":["CheckCircle2","AlertCircle","Loader2","XIcon"],"mappings":";;;;;;;;AAkBA,MAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,SAAS,oBAACA,aAAA,EAAa,WAAU,sBAAA,CAAsB;AAAA,EACvD,aAAa,oBAACC,aAAA,EAAY,WAAU,0BAAA,CAA0B;AAAA,EAC9D,MAAM,oBAAC,MAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,EACzC,SAAS,oBAACC,cAAA,EAAQ,WAAU,4CAAA,CAA4C;AAC1E;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,UAAA,aAAa,OAAO;AAAA,UACrB,qBAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,YAAA,SAAS,oBAAC,OAAA,EAAI,WAAU,yBAAyB,UAAA,OAAM;AAAA,YACvD,eACC,oBAAC,OAAA,EAAI,WAAU,4CACZ,UAAA,aACH;AAAA,YAED;AAAA,UAAA,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAA,oBAACC,GAAA,EAAM,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5B;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle-group.js","sources":["../../../../../../src/components/ui/toggle-group.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\";\nimport { ToggleGroup as ToggleGroupPrimitive } from \"@base-ui/react/toggle-group\";\nimport { type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\nimport { toggleVariants } from \"@/components/ui/toggle\";\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: \"horizontal\" | \"vertical\";\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n});\n\ntype ToggleGroupProps = ToggleGroupPrimitive.Props &\n VariantProps<typeof toggleVariants> & {\n /** Gap between items in spacing units. Set to 0 for joined buttons. @default 0 */\n spacing?: number;\n /** Layout direction of the toggle group. @default \"horizontal\" */\n orientation?: \"horizontal\" | \"vertical\";\n };\n\n/**\n * Container for a group of toggle buttons that share state. Supports both single and multiple selection modes.\n *\n * By default, the toggle group allows multiple selection. Use `multiple={false}` for single selection.\n * All items inherit variant and size from the group unless explicitly overridden.\n */\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: ToggleGroupProps) {\n return (\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"rounded-full data-[spacing=0]:data-[variant=outline]:shadow-none group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive>\n );\n}\n\ntype ToggleGroupItemProps = TogglePrimitive.Props &\n VariantProps<typeof toggleVariants>;\n\n/**\n * Individual toggle button within a ToggleGroup. Inherits variant and size from parent group context.\n *\n * When spacing={0}, items are joined together with shared borders. Use `aria-label` for icon-only buttons.\n */\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ToggleGroupItemProps) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n \"data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-full group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-full group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-full group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-full group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-full shrink-0 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}\n >\n {children}\n </TogglePrimitive>\n );\n}\n\nexport {\n ToggleGroup,\n ToggleGroupItem,\n type ToggleGroupProps,\n type ToggleGroupItemProps,\n};\n"],"names":["ToggleGroupPrimitive","TogglePrimitive"],"mappings":";;;;;;;AAUA;AAKE;AACM;AACG;AACA;AAEX;AAgBA;AAAqB;AACnB;AACA;AACA;AACU;AACI;AACd;AAEF;AACE;AACE;AAACA;AAAA;AACW;AACI;AACH;AACG;AACI;AACA;AACP;AACT;AACA;AAAA;AAEE;AAEJ;AAAoB;AAAnB;AACkC;AAEhC;AAAA;AAAA;AACH;AAGN;AAUA;AAAyB;AACvB;AACA;AACU;AACH;AAET;AACE;AAEA;AACE;AAACC;AAAA;AACW;AACuB;AACN;AACL;AACX;AACT;AACe;AACe;AACN;AACvB;AACD;AAAA;AAEE;AAEH;AAAA;AAGP;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle.js","sources":["../../../../../../src/components/ui/toggle.tsx"],"sourcesContent":["import { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst toggleVariants = cva(\n \"hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-full text-sm font-medium transition-[color,box-shadow] [&_svg:not([class*='size-'])]:size-4 group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-input hover:bg-muted border bg-transparent shadow-xs\",\n },\n size: {\n default: \"h-9 min-w-9 px-2.5 py-0.5\",\n sm: \"h-8 min-w-8 px-1.5\",\n lg: \"h-10 min-w-10 px-3 py-1\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ntype ToggleProps = TogglePrimitive.Props & VariantProps<typeof toggleVariants>;\n\n/**\n * Two-state button that can be pressed (on) or unpressed (off).\n * Supports icons, text, or both. Commonly used for formatting toolbars, view mode toggles, and preference switches.\n */\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: ToggleProps) {\n return (\n <TogglePrimitive\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants, type ToggleProps };\n"],"names":["TogglePrimitive"],"mappings":";;;;AAKA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAQA,SAAS,OAAO;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,GAAG;AACL,GAAgB;AACd,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAA,CAAW,CAAC;AAAA,MACzD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.js","sources":["../../../../../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"@/lib/utils\";\n\ntype TooltipProviderProps = TooltipPrimitive.Provider.Props;\n\n/**\n * Tooltip provider with configurable delay.\n * Manages shared tooltip state across nested tooltips.\n */\nfunction TooltipProvider({ delay = 0, ...props }: TooltipProviderProps) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n );\n}\n\ntype TooltipProps = TooltipPrimitive.Root.Props;\n\n/**\n * Tooltip root component. Displays contextual information on hover or focus.\n * Automatically wraps in TooltipProvider for convenience.\n */\nfunction Tooltip({ ...props }: TooltipProps) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\ntype TooltipTriggerProps = TooltipPrimitive.Trigger.Props;\n\n/**\n * Trigger element that shows the tooltip on hover or focus.\n * Use `render` prop to customize with any focusable element.\n */\nfunction TooltipTrigger({ ...props }: TooltipTriggerProps) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\ntype TooltipContentProps = TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >;\n\n/**\n * Tooltip content popup with automatic portal, positioning, and arrow.\n * Includes smooth animations and collision detection.\n */\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-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 rounded-full px-3 py-1.5 text-xs bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin)\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipProps,\n type TooltipTriggerProps,\n type TooltipContentProps,\n type TooltipProviderProps,\n};\n"],"names":["TooltipPrimitive.Provider","TooltipPrimitive.Positioner","TooltipPrimitive.Popup"],"mappings":";;;;;;;;;;AAYA;AACE;AACE;AAACA;AAAA;AACW;AACV;AACI;AAAA;AAGV;AAQA;AACE;AAKF;AAQA;AACE;AACF;AAYA;AAAwB;AACtB;AACO;AACM;AACL;AACM;AACd;AAEF;AACE;AAEI;AAACC;AAAA;AACC;AACA;AACA;AACA;AACU;AAEV;AAACC;AAAA;AACW;AACC;AACT;AACA;AAAA;AAEE;AAEH;AAAA;AACyW;AAAA;AAAA;AAAA;AAC5W;AAIR;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/components/ui/switch.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE,KAAK,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC9C,8CAA8C;IAC9C,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,iBAAS,MAAM,CAAC,EAAE,SAAS,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,2CAiBrE;AAED,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/ui/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAEhD;;;GAGG;AACH,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAajD;AAED,KAAK,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAEtD;;;GAGG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAQ7D;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAEpD;;;GAGG;AACH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAQzD;AAED,KAAK,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAEtD;;;GAGG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAW7D;AAED,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEhD;;;GAGG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAWvD;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEjD;;;GAGG;AACH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAWzD;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEjD;;;GAGG;AACH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAWzD;AAED,KAAK,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAEzD;;;GAGG;AACH,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CAQ/D;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,KAAK,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAE1C;;;GAGG;AACH,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,WAA0B,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,2CAY3E;AAED,QAAA,MAAM,gBAAgB;;8EAmBrB,CAAC;AAEF,KAAK,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,GAC3C,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExC;;;GAGG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAS5E;AAED,KAAK,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAEhD;;;GAGG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAc7D;AAED,KAAK,gBAAgB,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;AAElD;;;GAGG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAQ7D;AAED,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/components/ui/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAWvD;AAED,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,SAAS,GACT,aAAa,GACb,MAAM,GACN,SAAS,CAAC;AAEd,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAUD,iBAAS,KAAK,CAAC,EACb,KAAK,EACL,WAAW,EACX,OAAmB,EACnB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,2CAgCZ;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toggle-group.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,KAAK,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,GAChD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACzC,CAAC;AAEJ;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAW,EACX,WAA0B,EAC1B,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAsBlB;AAED,KAAK,oBAAoB,GAAG,eAAe,CAAC,KAAK,GAC/C,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtC;;;;GAIG;AACH,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,QAAQ,EACR,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAsBtB;AAED,OAAO,EACL,WAAW,EACX,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAmBnB,CAAC;AAEF,KAAK,WAAW,GAAG,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAE/E;;;GAGG;AACH,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,WAAW,2CAQb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAIrE,KAAK,oBAAoB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;AAE5D;;;GAGG;AACH,iBAAS,eAAe,CAAC,EAAE,KAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,2CAQrE;AAED,KAAK,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhD;;;GAGG;AACH,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,2CAM1C;AAED,KAAK,mBAAmB,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;AAE1D;;;GAGG;AACH,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,2CAExD;AAED,KAAK,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,GACrD,IAAI,CACF,gBAAgB,CAAC,UAAU,CAAC,KAAK,EACjC,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,YAAY,CAChD,CAAC;AAEJ;;;GAGG;AACH,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,IAAY,EACZ,UAAc,EACd,KAAgB,EAChB,WAAe,EACf,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAwBrB;AAED,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-mobile.js","sources":["../../../../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\n/**\n * Detects mobile viewport using matchMedia.\n * Returns `false` during SSR/hydration, then updates reactively on resize.\n *\n * @returns `true` when viewport width < 768px, `false` otherwise\n *\n * @example\n * ```tsx\n * import { useIsMobile } from \"@minidev.fun/ui/hooks/use-mobile\"\n *\n * function ResponsiveLayout() {\n * const isMobile = useIsMobile()\n * return isMobile ? <MobileNav /> : <DesktopNav />\n * }\n * ```\n */\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n"],"names":[],"mappings":";AAEA,MAAM,oBAAoB;AAkBnB,SAAS,cAAc;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM;AAAA,IACpC;AAAA,EAAA;AAGF,QAAM,UAAU,MAAM;AACpB,UAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,CAAC,KAAK;AACvE,UAAM,WAAW,MAAM;AACrB,kBAAY,OAAO,aAAa,iBAAiB;AAAA,IACnD;AACA,QAAI,iBAAiB,UAAU,QAAQ;AACvC,gBAAY,OAAO,aAAa,iBAAiB;AACjD,WAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EACzD,GAAG,CAAA,CAAE;AAEL,SAAO,CAAC,CAAC;AACX;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-mobile.d.ts","sourceRoot":"","sources":["../../src/hooks/use-mobile.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,YAgB1B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -1,107 +0,0 @@
1
- /**
2
- * @internal
3
- * Shared CVA variants used by menu and typography components.
4
- * Not exported publicly - use component props instead:
5
- * - Menu styling: <DropdownMenuItem variant="destructive">
6
- * - Typography: <Text color="muted" size="sm">
7
- */
8
- /**
9
- * Shared menu item variants for DropdownMenuItem, ContextMenuItem, and MenubarItem.
10
- * Provides consistent styling across all menu-style components.
11
- */
12
- export declare const menuItemVariants: (props?: ({
13
- variant?: "default" | "success" | "destructive" | "info" | "warning" | null | undefined;
14
- inset?: boolean | null | undefined;
15
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
16
- /** Variant options for menu items: default, destructive, success, warning, info */
17
- export type MenuItemVariant = "default" | "destructive" | "success" | "warning" | "info";
18
- /**
19
- * Typography color variants shared across Title, Text, Code, ListItem, and Blockquote components.
20
- * Provides semantic color options for consistent text styling.
21
- *
22
- * @example
23
- * ```tsx
24
- * import { typographyColorVariants } from "@minidev.fun/ui/lib/variants"
25
- * import { cn } from "@minidev.fun/ui/lib/utils"
26
- *
27
- * <span className={cn(typographyColorVariants({ color: "muted" }))}>
28
- * Secondary text
29
- * </span>
30
- * ```
31
- */
32
- export declare const typographyColorVariants: (props?: ({
33
- color?: "default" | "success" | "destructive" | "info" | "primary" | "warning" | "muted" | "subtle" | null | undefined;
34
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
35
- /** Semantic color options for typography: default, muted, subtle, destructive, success, warning, info */
36
- export type TypographyColor = "default" | "primary" | "muted" | "subtle" | "destructive" | "success" | "warning" | "info";
37
- /**
38
- * Title order-based size defaults (only used when size prop is not specified).
39
- * Maps heading levels (h1-h6) to responsive font sizes.
40
- *
41
- * @example
42
- * ```tsx
43
- * // order: 1 → "text-3xl md:text-4xl lg:text-5xl"
44
- * // order: 6 → "text-sm md:text-base lg:text-lg"
45
- * ```
46
- */
47
- export declare const titleOrderSizeVariants: (props?: ({
48
- order?: 4 | 1 | 2 | 3 | 5 | 6 | null | undefined;
49
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
50
- /**
51
- * Title order-based style defaults (weight, tracking, leading).
52
- * Provides appropriate font-weight and line-height for each heading level.
53
- *
54
- * @example
55
- * ```tsx
56
- * // order: 1 → "font-bold tracking-tight leading-[1.1]"
57
- * // order: 6 → "font-medium leading-normal"
58
- * ```
59
- */
60
- export declare const titleOrderStyleVariants: (props?: ({
61
- order?: 4 | 1 | 2 | 3 | 5 | 6 | null | undefined;
62
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
63
- /**
64
- * Title component variants for explicit size and weight overrides.
65
- * Use when you need to override the order-based defaults.
66
- *
67
- * @example
68
- * ```tsx
69
- * import { titleVariants } from "@minidev.fun/ui/lib/variants"
70
- * import { cn } from "@minidev.fun/ui/lib/utils"
71
- *
72
- * <h2 className={cn(titleVariants({ size: "4xl", weight: "bold" }))}>
73
- * Large Bold Title
74
- * </h2>
75
- * ```
76
- */
77
- export declare const titleVariants: (props?: ({
78
- size?: "base" | "sm" | "lg" | "xs" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | null | undefined;
79
- weight?: "bold" | "normal" | "medium" | "semibold" | null | undefined;
80
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
81
- /** Heading level 1-6, maps to h1-h6 elements */
82
- export type TitleOrder = 1 | 2 | 3 | 4 | 5 | 6;
83
- /** Font size options from xs to 6xl */
84
- export type TitleSize = "xs" | "sm" | "base" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl";
85
- /** Font weight options: normal, medium, semibold, bold */
86
- export type TitleWeight = "normal" | "medium" | "semibold" | "bold";
87
- /**
88
- * Text component variants with auto-scaling line-height and letter-spacing.
89
- * Provides consistent paragraph and body text styling.
90
- *
91
- * @example
92
- * ```tsx
93
- * import { textVariants } from "@minidev.fun/ui/lib/variants"
94
- * import { cn } from "@minidev.fun/ui/lib/utils"
95
- *
96
- * <p className={cn(textVariants({ size: "lg", weight: "medium", align: "center" }))}>
97
- * Centered large text
98
- * </p>
99
- * ```
100
- */
101
- export declare const textVariants: (props?: ({
102
- size?: "base" | "sm" | "lg" | "xs" | "xl" | "2xl" | null | undefined;
103
- weight?: "bold" | "normal" | "medium" | "semibold" | null | undefined;
104
- align?: "center" | "left" | "right" | null | undefined;
105
- transform?: "capitalize" | "lowercase" | "uppercase" | null | undefined;
106
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
107
- //# sourceMappingURL=variants.d.ts.map