@minidev.fun/ui 1.0.4 → 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 (318) hide show
  1. package/dist/components/minidev.fun/color-mode/color-mode-initializer.js.map +1 -0
  2. package/dist/{src/components → components}/minidev.fun/color-mode/color-mode-toggle.js +6 -6
  3. package/dist/components/minidev.fun/color-mode/color-mode-toggle.js.map +1 -0
  4. package/dist/components/minidev.fun/color-mode/index.d.ts +4 -0
  5. package/dist/components/minidev.fun/color-mode/index.js +9 -0
  6. package/dist/components/minidev.fun/color-mode/use-color-mode.js.map +1 -0
  7. package/dist/components/minidev.fun/first-light/first-light-filters.js +114 -0
  8. package/dist/components/minidev.fun/first-light/first-light-filters.js.map +1 -0
  9. package/dist/components/minidev.fun/first-light/index.d.ts +2 -0
  10. package/dist/components/minidev.fun/first-light/index.js +5 -0
  11. package/dist/components/minidev.fun/first-light/index.js.map +1 -0
  12. package/dist/components/minidev.fun/typography/blockquote.js +23 -0
  13. package/dist/components/minidev.fun/typography/blockquote.js.map +1 -0
  14. package/dist/components/minidev.fun/typography/code.js +23 -0
  15. package/dist/components/minidev.fun/typography/code.js.map +1 -0
  16. package/dist/components/minidev.fun/typography/index.d.ts +6 -0
  17. package/dist/components/minidev.fun/typography/index.js +15 -0
  18. package/dist/components/minidev.fun/typography/index.js.map +1 -0
  19. package/dist/components/minidev.fun/typography/list-item.js +19 -0
  20. package/dist/components/minidev.fun/typography/list-item.js.map +1 -0
  21. package/dist/components/minidev.fun/typography/text.js +59 -0
  22. package/dist/components/minidev.fun/typography/text.js.map +1 -0
  23. package/dist/components/minidev.fun/typography/title.js +47 -0
  24. package/dist/components/minidev.fun/typography/title.js.map +1 -0
  25. package/dist/components/ui/accordion.d.ts +27 -0
  26. package/dist/components/ui/{src/components/ui/accordion.js → accordion.js} +8 -8
  27. package/dist/components/ui/accordion.js.map +1 -0
  28. package/dist/components/ui/alert-dialog.d.ts +47 -0
  29. package/dist/components/ui/{src/components/ui/alert-dialog.js → alert-dialog.js} +9 -9
  30. package/dist/components/ui/alert-dialog.js.map +1 -0
  31. package/dist/components/ui/alert.d.ts +30 -0
  32. package/dist/components/ui/{src/components/ui/alert.js → alert.js} +2 -2
  33. package/dist/components/ui/alert.js.map +1 -0
  34. package/dist/components/ui/aspect-ratio.d.ts +11 -0
  35. package/dist/components/ui/{src/components/ui/aspect-ratio.js → aspect-ratio.js} +1 -1
  36. package/dist/components/ui/aspect-ratio.js.map +1 -0
  37. package/dist/components/ui/avatar.d.ts +42 -0
  38. package/dist/components/ui/{src/components/ui/avatar.js → avatar.js} +4 -4
  39. package/dist/components/ui/avatar.js.map +1 -0
  40. package/dist/components/ui/badge.d.ts +16 -0
  41. package/dist/components/ui/{src/components/ui/badge.js → badge.js} +4 -4
  42. package/dist/components/ui/badge.js.map +1 -0
  43. package/dist/components/ui/breadcrumb.d.ts +39 -0
  44. package/dist/components/ui/{src/components/ui/breadcrumb.js → breadcrumb.js} +5 -5
  45. package/dist/components/ui/breadcrumb.js.map +1 -0
  46. package/dist/components/ui/button-group.d.ts +26 -0
  47. package/dist/components/ui/{src/components/ui/button-group.js → button-group.js} +4 -4
  48. package/dist/components/ui/button-group.js.map +1 -0
  49. package/dist/components/ui/button.d.ts +41 -0
  50. package/dist/components/ui/{src/components/ui/button.js → button.js} +3 -3
  51. package/dist/components/ui/button.js.map +1 -0
  52. package/dist/components/ui/calendar.d.ts +20 -0
  53. package/dist/components/ui/{src/components/ui/calendar.js → calendar.js} +4 -4
  54. package/dist/components/ui/calendar.js.map +1 -0
  55. package/dist/components/ui/card.d.ts +30 -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/carousel.d.ts +56 -0
  59. package/dist/components/ui/{src/components/ui/carousel.js → carousel.js} +3 -3
  60. package/dist/components/ui/carousel.js.map +1 -0
  61. package/dist/components/ui/chart.d.ts +73 -0
  62. package/dist/components/ui/{src/components/ui/chart.js → chart.js} +1 -1
  63. package/dist/components/ui/chart.js.map +1 -0
  64. package/dist/components/ui/checkbox.d.ts +11 -0
  65. package/dist/components/ui/{src/components/ui/checkbox.js → checkbox.js} +4 -4
  66. package/dist/components/ui/checkbox.js.map +1 -0
  67. package/dist/components/ui/collapsible.d.ts +21 -0
  68. package/dist/components/ui/{src/components/ui/collapsible.js → collapsible.js} +3 -3
  69. package/dist/components/ui/collapsible.js.map +1 -0
  70. package/dist/components/ui/combobox.d.ts +80 -0
  71. package/dist/components/ui/{src/components/ui/combobox.js → combobox.js} +23 -23
  72. package/dist/components/ui/combobox.js.map +1 -0
  73. package/dist/components/ui/command.d.ts +63 -0
  74. package/dist/components/ui/{src/components/ui/command.js → command.js} +4 -4
  75. package/dist/components/ui/command.js.map +1 -0
  76. package/dist/components/ui/context-menu.d.ts +64 -0
  77. package/dist/components/ui/{src/components/ui/context-menu.js → context-menu.js} +20 -20
  78. package/dist/components/ui/context-menu.js.map +1 -0
  79. package/dist/components/ui/dialog.d.ts +69 -0
  80. package/dist/components/ui/{src/components/ui/dialog.js → dialog.js} +10 -10
  81. package/dist/components/ui/dialog.js.map +1 -0
  82. package/dist/components/ui/drawer.d.ts +40 -0
  83. package/dist/components/ui/{src/components/ui/drawer.js → drawer.js} +2 -2
  84. package/dist/components/ui/drawer.js.map +1 -0
  85. package/dist/components/ui/dropdown-menu.d.ts +88 -0
  86. package/dist/components/ui/{src/components/ui/dropdown-menu.js → dropdown-menu.js} +20 -20
  87. package/dist/components/ui/dropdown-menu.js.map +1 -0
  88. package/dist/components/ui/empty.d.ts +41 -0
  89. package/dist/components/ui/{src/components/ui/empty.js → empty.js} +2 -2
  90. package/dist/components/ui/empty.js.map +1 -0
  91. package/dist/components/ui/field.d.ts +78 -0
  92. package/dist/components/ui/{src/components/ui/field.js → field.js} +2 -2
  93. package/dist/components/ui/field.js.map +1 -0
  94. package/dist/components/ui/hover-card.d.ts +21 -0
  95. package/dist/components/ui/{src/components/ui/hover-card.js → hover-card.js} +6 -6
  96. package/dist/components/ui/hover-card.js.map +1 -0
  97. package/dist/components/ui/input-group.d.ts +50 -0
  98. package/dist/components/ui/{src/components/ui/input-group.js → input-group.js} +2 -2
  99. package/dist/components/ui/input-group.js.map +1 -0
  100. package/dist/components/ui/input-otp.d.ts +34 -0
  101. package/dist/components/ui/{src/components/ui/input-otp.js → input-otp.js} +2 -2
  102. package/dist/components/ui/input-otp.js.map +1 -0
  103. package/dist/components/ui/input.d.ts +11 -0
  104. package/dist/components/ui/{src/components/ui/input.js → input.js} +2 -2
  105. package/dist/components/ui/input.js.map +1 -0
  106. package/dist/components/ui/item.d.ts +69 -0
  107. package/dist/components/ui/{src/components/ui/item.js → item.js} +4 -4
  108. package/dist/components/ui/item.js.map +1 -0
  109. package/dist/components/ui/kbd.d.ts +14 -0
  110. package/dist/components/ui/{src/components/ui/kbd.js → kbd.js} +1 -1
  111. package/dist/components/ui/kbd.js.map +1 -0
  112. package/dist/components/ui/label.d.ts +9 -0
  113. package/dist/components/ui/{src/components/ui/label.js → label.js} +1 -1
  114. package/dist/components/ui/label.js.map +1 -0
  115. package/dist/components/ui/menubar.d.ts +87 -0
  116. package/dist/components/ui/{src/components/ui/menubar.js → menubar.js} +9 -9
  117. package/dist/components/ui/menubar.js.map +1 -0
  118. package/dist/components/ui/modal.d.ts +41 -0
  119. package/dist/components/ui/{src/components/ui/modal.js → modal.js} +9 -9
  120. package/dist/components/ui/modal.js.map +1 -0
  121. package/dist/components/ui/navigation-menu.d.ts +52 -0
  122. package/dist/components/ui/{src/components/ui/navigation-menu.js → navigation-menu.js} +14 -14
  123. package/dist/components/ui/navigation-menu.js.map +1 -0
  124. package/dist/components/ui/pagination.d.ts +42 -0
  125. package/dist/components/ui/{src/components/ui/pagination.js → pagination.js} +4 -4
  126. package/dist/components/ui/pagination.js.map +1 -0
  127. package/dist/components/ui/popover.d.ts +42 -0
  128. package/dist/components/ui/{src/components/ui/popover.js → popover.js} +8 -8
  129. package/dist/components/ui/popover.js.map +1 -0
  130. package/dist/components/ui/progress.d.ts +30 -0
  131. package/dist/components/ui/{src/components/ui/progress.js → progress.js} +6 -6
  132. package/dist/components/ui/progress.js.map +1 -0
  133. package/dist/components/ui/radio-group.d.ts +16 -0
  134. package/dist/components/ui/{src/components/ui/radio-group.js → radio-group.js} +5 -5
  135. package/dist/components/ui/radio-group.js.map +1 -0
  136. package/dist/components/ui/resizable.d.ts +38 -0
  137. package/dist/components/ui/{src/components/ui/resizable.js → resizable.js} +2 -2
  138. package/dist/components/ui/resizable.js.map +1 -0
  139. package/dist/components/ui/scroll-area.d.ts +64 -0
  140. package/dist/components/ui/{src/components/ui/scroll-area.js → scroll-area.js} +6 -6
  141. package/dist/components/ui/scroll-area.js.map +1 -0
  142. package/dist/components/ui/select.d.ts +58 -0
  143. package/dist/components/ui/{src/components/ui/select.js → select.js} +20 -20
  144. package/dist/components/ui/select.js.map +1 -0
  145. package/dist/components/ui/separator.d.ts +9 -0
  146. package/dist/components/ui/{src/components/ui/separator.js → separator.js} +2 -2
  147. package/dist/components/ui/separator.js.map +1 -0
  148. package/dist/components/ui/sheet.d.ts +51 -0
  149. package/dist/components/ui/{src/components/ui/sheet.js → sheet.js} +10 -10
  150. package/dist/components/ui/sheet.js.map +1 -0
  151. package/dist/components/ui/sidebar.d.ts +172 -0
  152. package/dist/components/ui/{src/components/ui/sidebar.js → sidebar.js} +6 -6
  153. package/dist/components/ui/sidebar.js.map +1 -0
  154. package/dist/components/ui/skeleton.d.ts +8 -0
  155. package/dist/components/ui/{src/components/ui/skeleton.js → skeleton.js} +1 -1
  156. package/dist/components/ui/skeleton.js.map +1 -0
  157. package/dist/components/ui/slider.d.ts +21 -0
  158. package/dist/components/ui/{src/components/ui/slider.js → slider.js} +6 -6
  159. package/dist/components/ui/slider.js.map +1 -0
  160. package/dist/components/ui/sonner.d.ts +21 -0
  161. package/dist/components/ui/{src/components/ui/sonner.js → sonner.js} +7 -7
  162. package/dist/components/ui/sonner.js.map +1 -0
  163. package/dist/components/ui/spinner.d.ts +8 -0
  164. package/dist/components/ui/{src/components/ui/spinner.js → spinner.js} +2 -2
  165. package/dist/components/ui/spinner.js.map +1 -0
  166. package/dist/components/ui/switch.d.ts +12 -0
  167. package/dist/components/ui/{src/components/ui/switch.js → switch.js} +3 -3
  168. package/dist/components/ui/switch.js.map +1 -0
  169. package/dist/components/ui/table.d.ts +51 -0
  170. package/dist/components/ui/{src/components/ui/table.js → table.js} +1 -1
  171. package/dist/components/ui/table.js.map +1 -0
  172. package/dist/components/ui/tabs.d.ts +31 -0
  173. package/dist/components/ui/{src/components/ui/tabs.js → tabs.js} +6 -6
  174. package/dist/components/ui/tabs.js.map +1 -0
  175. package/dist/components/ui/textarea.d.ts +18 -0
  176. package/dist/components/ui/{src/components/ui/textarea.js → textarea.js} +1 -1
  177. package/dist/components/ui/textarea.js.map +1 -0
  178. package/dist/components/ui/toast.d.ts +11 -0
  179. package/dist/components/ui/{src/components/ui/toast.js → toast.js} +6 -6
  180. package/dist/components/ui/toast.js.map +1 -0
  181. package/dist/components/ui/toggle-group.d.ts +26 -0
  182. package/dist/components/ui/{src/components/ui/toggle-group.js → toggle-group.js} +3 -3
  183. package/dist/components/ui/toggle-group.js.map +1 -0
  184. package/dist/components/ui/toggle.d.ts +14 -0
  185. package/dist/components/ui/{src/components/ui/toggle.js → toggle.js} +3 -3
  186. package/dist/components/ui/toggle.js.map +1 -0
  187. package/dist/components/ui/tooltip.d.ts +27 -0
  188. package/dist/components/ui/{src/components/ui/tooltip.js → tooltip.js} +8 -8
  189. package/dist/components/ui/tooltip.js.map +1 -0
  190. package/dist/hooks/use-mobile.d.ts +18 -0
  191. package/dist/hooks/use-mobile.js.map +1 -0
  192. package/dist/lib/utils.d.ts +23 -2
  193. package/dist/lib/variants.js +129 -0
  194. package/dist/lib/variants.js.map +1 -0
  195. package/package.json +1 -1
  196. package/dist/components/minidev.fun/undefined/index.d.ts +0 -2
  197. package/dist/components/minidev.fun/undefined/index.js +0 -9
  198. package/dist/components/ui/src/components/ui/accordion.d.ts +0 -2
  199. package/dist/components/ui/src/components/ui/accordion.js.map +0 -1
  200. package/dist/components/ui/src/components/ui/alert-dialog.d.ts +0 -2
  201. package/dist/components/ui/src/components/ui/alert-dialog.js.map +0 -1
  202. package/dist/components/ui/src/components/ui/alert.d.ts +0 -2
  203. package/dist/components/ui/src/components/ui/alert.js.map +0 -1
  204. package/dist/components/ui/src/components/ui/aspect-ratio.d.ts +0 -2
  205. package/dist/components/ui/src/components/ui/aspect-ratio.js.map +0 -1
  206. package/dist/components/ui/src/components/ui/avatar.d.ts +0 -2
  207. package/dist/components/ui/src/components/ui/avatar.js.map +0 -1
  208. package/dist/components/ui/src/components/ui/badge.d.ts +0 -2
  209. package/dist/components/ui/src/components/ui/badge.js.map +0 -1
  210. package/dist/components/ui/src/components/ui/breadcrumb.d.ts +0 -2
  211. package/dist/components/ui/src/components/ui/breadcrumb.js.map +0 -1
  212. package/dist/components/ui/src/components/ui/button-group.d.ts +0 -2
  213. package/dist/components/ui/src/components/ui/button-group.js.map +0 -1
  214. package/dist/components/ui/src/components/ui/button.d.ts +0 -2
  215. package/dist/components/ui/src/components/ui/button.js.map +0 -1
  216. package/dist/components/ui/src/components/ui/calendar.d.ts +0 -2
  217. package/dist/components/ui/src/components/ui/calendar.js.map +0 -1
  218. package/dist/components/ui/src/components/ui/card.d.ts +0 -2
  219. package/dist/components/ui/src/components/ui/card.js.map +0 -1
  220. package/dist/components/ui/src/components/ui/carousel.d.ts +0 -2
  221. package/dist/components/ui/src/components/ui/carousel.js.map +0 -1
  222. package/dist/components/ui/src/components/ui/chart.d.ts +0 -2
  223. package/dist/components/ui/src/components/ui/chart.js.map +0 -1
  224. package/dist/components/ui/src/components/ui/checkbox.d.ts +0 -2
  225. package/dist/components/ui/src/components/ui/checkbox.js.map +0 -1
  226. package/dist/components/ui/src/components/ui/collapsible.d.ts +0 -2
  227. package/dist/components/ui/src/components/ui/collapsible.js.map +0 -1
  228. package/dist/components/ui/src/components/ui/combobox.d.ts +0 -2
  229. package/dist/components/ui/src/components/ui/combobox.js.map +0 -1
  230. package/dist/components/ui/src/components/ui/command.d.ts +0 -2
  231. package/dist/components/ui/src/components/ui/command.js.map +0 -1
  232. package/dist/components/ui/src/components/ui/context-menu.d.ts +0 -2
  233. package/dist/components/ui/src/components/ui/context-menu.js.map +0 -1
  234. package/dist/components/ui/src/components/ui/dialog.d.ts +0 -2
  235. package/dist/components/ui/src/components/ui/dialog.js.map +0 -1
  236. package/dist/components/ui/src/components/ui/drawer.d.ts +0 -2
  237. package/dist/components/ui/src/components/ui/drawer.js.map +0 -1
  238. package/dist/components/ui/src/components/ui/dropdown-menu.d.ts +0 -2
  239. package/dist/components/ui/src/components/ui/dropdown-menu.js.map +0 -1
  240. package/dist/components/ui/src/components/ui/empty.d.ts +0 -2
  241. package/dist/components/ui/src/components/ui/empty.js.map +0 -1
  242. package/dist/components/ui/src/components/ui/field.d.ts +0 -2
  243. package/dist/components/ui/src/components/ui/field.js.map +0 -1
  244. package/dist/components/ui/src/components/ui/hover-card.d.ts +0 -2
  245. package/dist/components/ui/src/components/ui/hover-card.js.map +0 -1
  246. package/dist/components/ui/src/components/ui/input-group.d.ts +0 -2
  247. package/dist/components/ui/src/components/ui/input-group.js.map +0 -1
  248. package/dist/components/ui/src/components/ui/input-otp.d.ts +0 -2
  249. package/dist/components/ui/src/components/ui/input-otp.js.map +0 -1
  250. package/dist/components/ui/src/components/ui/input.d.ts +0 -2
  251. package/dist/components/ui/src/components/ui/input.js.map +0 -1
  252. package/dist/components/ui/src/components/ui/item.d.ts +0 -2
  253. package/dist/components/ui/src/components/ui/item.js.map +0 -1
  254. package/dist/components/ui/src/components/ui/kbd.d.ts +0 -2
  255. package/dist/components/ui/src/components/ui/kbd.js.map +0 -1
  256. package/dist/components/ui/src/components/ui/label.d.ts +0 -2
  257. package/dist/components/ui/src/components/ui/label.js.map +0 -1
  258. package/dist/components/ui/src/components/ui/menubar.d.ts +0 -2
  259. package/dist/components/ui/src/components/ui/menubar.js.map +0 -1
  260. package/dist/components/ui/src/components/ui/modal.d.ts +0 -2
  261. package/dist/components/ui/src/components/ui/modal.js.map +0 -1
  262. package/dist/components/ui/src/components/ui/navigation-menu.d.ts +0 -2
  263. package/dist/components/ui/src/components/ui/navigation-menu.js.map +0 -1
  264. package/dist/components/ui/src/components/ui/pagination.d.ts +0 -2
  265. package/dist/components/ui/src/components/ui/pagination.js.map +0 -1
  266. package/dist/components/ui/src/components/ui/popover.d.ts +0 -2
  267. package/dist/components/ui/src/components/ui/popover.js.map +0 -1
  268. package/dist/components/ui/src/components/ui/progress.d.ts +0 -2
  269. package/dist/components/ui/src/components/ui/progress.js.map +0 -1
  270. package/dist/components/ui/src/components/ui/radio-group.d.ts +0 -2
  271. package/dist/components/ui/src/components/ui/radio-group.js.map +0 -1
  272. package/dist/components/ui/src/components/ui/resizable.d.ts +0 -2
  273. package/dist/components/ui/src/components/ui/resizable.js.map +0 -1
  274. package/dist/components/ui/src/components/ui/scroll-area.d.ts +0 -2
  275. package/dist/components/ui/src/components/ui/scroll-area.js.map +0 -1
  276. package/dist/components/ui/src/components/ui/select.d.ts +0 -2
  277. package/dist/components/ui/src/components/ui/select.js.map +0 -1
  278. package/dist/components/ui/src/components/ui/separator.d.ts +0 -2
  279. package/dist/components/ui/src/components/ui/separator.js.map +0 -1
  280. package/dist/components/ui/src/components/ui/sheet.d.ts +0 -2
  281. package/dist/components/ui/src/components/ui/sheet.js.map +0 -1
  282. package/dist/components/ui/src/components/ui/sidebar.d.ts +0 -2
  283. package/dist/components/ui/src/components/ui/sidebar.js.map +0 -1
  284. package/dist/components/ui/src/components/ui/skeleton.d.ts +0 -2
  285. package/dist/components/ui/src/components/ui/skeleton.js.map +0 -1
  286. package/dist/components/ui/src/components/ui/slider.d.ts +0 -2
  287. package/dist/components/ui/src/components/ui/slider.js.map +0 -1
  288. package/dist/components/ui/src/components/ui/sonner.d.ts +0 -2
  289. package/dist/components/ui/src/components/ui/sonner.js.map +0 -1
  290. package/dist/components/ui/src/components/ui/spinner.d.ts +0 -2
  291. package/dist/components/ui/src/components/ui/spinner.js.map +0 -1
  292. package/dist/components/ui/src/components/ui/switch.d.ts +0 -2
  293. package/dist/components/ui/src/components/ui/switch.js.map +0 -1
  294. package/dist/components/ui/src/components/ui/table.d.ts +0 -2
  295. package/dist/components/ui/src/components/ui/table.js.map +0 -1
  296. package/dist/components/ui/src/components/ui/tabs.d.ts +0 -2
  297. package/dist/components/ui/src/components/ui/tabs.js.map +0 -1
  298. package/dist/components/ui/src/components/ui/textarea.d.ts +0 -2
  299. package/dist/components/ui/src/components/ui/textarea.js.map +0 -1
  300. package/dist/components/ui/src/components/ui/toast.d.ts +0 -2
  301. package/dist/components/ui/src/components/ui/toast.js.map +0 -1
  302. package/dist/components/ui/src/components/ui/toggle-group.d.ts +0 -2
  303. package/dist/components/ui/src/components/ui/toggle-group.js.map +0 -1
  304. package/dist/components/ui/src/components/ui/toggle.d.ts +0 -2
  305. package/dist/components/ui/src/components/ui/toggle.js.map +0 -1
  306. package/dist/components/ui/src/components/ui/tooltip.d.ts +0 -2
  307. package/dist/components/ui/src/components/ui/tooltip.js.map +0 -1
  308. package/dist/hooks/src/hooks/use-mobile.d.ts +0 -2
  309. package/dist/hooks/src/hooks/use-mobile.js.map +0 -1
  310. package/dist/src/components/minidev.fun/color-mode/color-mode-initializer.js.map +0 -1
  311. package/dist/src/components/minidev.fun/color-mode/color-mode-toggle.js.map +0 -1
  312. package/dist/src/components/minidev.fun/color-mode/use-color-mode.js.map +0 -1
  313. package/dist/src/lib/variants.js +0 -27
  314. package/dist/src/lib/variants.js.map +0 -1
  315. /package/dist/{src/components → components}/minidev.fun/color-mode/color-mode-initializer.js +0 -0
  316. /package/dist/components/minidev.fun/{undefined → color-mode}/index.js.map +0 -0
  317. /package/dist/{src/components → components}/minidev.fun/color-mode/use-color-mode.js +0 -0
  318. /package/dist/hooks/{src/hooks/use-mobile.js → use-mobile.js} +0 -0
@@ -0,0 +1 @@
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;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ type SkeletonProps = React.ComponentProps<"div">;
2
+ /**
3
+ * Skeleton loading placeholder with pulse animation.
4
+ * Use to indicate content is loading while maintaining layout structure.
5
+ */
6
+ declare function Skeleton({ className, ...props }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
7
+ export { Skeleton, type SkeletonProps };
8
+ //# sourceMappingURL=skeleton.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { cn } from "../../../../../lib/utils.js";
2
+ import { cn } from "../../lib/utils.js";
3
3
  function Skeleton({ className, ...props }) {
4
4
  return /* @__PURE__ */ jsx(
5
5
  "div",
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,21 @@
1
+ import { Slider as SliderPrimitive } from '@base-ui/react/slider';
2
+ type SliderProps = SliderPrimitive.Root.Props;
3
+ /**
4
+ * Slider for selecting single values or ranges with one or more draggable thumbs.
5
+ * Supports horizontal and vertical orientations with keyboard navigation.
6
+ *
7
+ * @example
8
+ * // Single value slider
9
+ * <Slider defaultValue={[50]} min={0} max={100} />
10
+ *
11
+ * @example
12
+ * // Range slider (two thumbs)
13
+ * <Slider defaultValue={[25, 75]} min={0} max={100} />
14
+ *
15
+ * @example
16
+ * // Controlled slider with step
17
+ * <Slider value={value} onValueChange={setValue} min={0} max={100} step={10} />
18
+ */
19
+ declare function Slider({ className, defaultValue, value, min, max, ...props }: SliderProps): import("react/jsx-runtime").JSX.Element;
20
+ export { Slider, type SliderProps };
21
+ //# sourceMappingURL=slider.d.ts.map
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { cn } from "../../../../../lib/utils.js";
5
- import { SliderRoot } from "../../../../../node_modules/@base-ui/react/esm/slider/root/SliderRoot.js";
6
- import { SliderControl } from "../../../../../node_modules/@base-ui/react/esm/slider/control/SliderControl.js";
7
- import { SliderTrack } from "../../../../../node_modules/@base-ui/react/esm/slider/track/SliderTrack.js";
8
- import { SliderIndicator } from "../../../../../node_modules/@base-ui/react/esm/slider/indicator/SliderIndicator.js";
9
- import { SliderThumb } from "../../../../../node_modules/@base-ui/react/esm/slider/thumb/SliderThumb.js";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { SliderRoot } from "../../node_modules/@base-ui/react/esm/slider/root/SliderRoot.js";
6
+ import { SliderControl } from "../../node_modules/@base-ui/react/esm/slider/control/SliderControl.js";
7
+ import { SliderTrack } from "../../node_modules/@base-ui/react/esm/slider/track/SliderTrack.js";
8
+ import { SliderIndicator } from "../../node_modules/@base-ui/react/esm/slider/indicator/SliderIndicator.js";
9
+ import { SliderThumb } from "../../node_modules/@base-ui/react/esm/slider/thumb/SliderThumb.js";
10
10
  function Slider({
11
11
  className,
12
12
  defaultValue,
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,21 @@
1
+ import { toast, ToasterProps } from 'sonner';
2
+ type ToasterComponentProps = ToasterProps;
3
+ /**
4
+ * Toast notification container with themed icons and color system integration.
5
+ *
6
+ * Provides a pre-configured Sonner toaster with custom icons for each toast type
7
+ * and automatic theme integration. Use the exported `toast` function to trigger notifications.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * // Add to your app root
12
+ * <Toaster position="bottom-right" />
13
+ *
14
+ * // Trigger toasts anywhere
15
+ * toast.success("Saved successfully")
16
+ * toast.error("Failed to save", { description: error.message })
17
+ * ```
18
+ */
19
+ declare function Toaster({ theme, richColors, ...props }: ToasterComponentProps): import("react/jsx-runtime").JSX.Element;
20
+ export { Toaster, toast, type ToasterComponentProps };
21
+ //# sourceMappingURL=sonner.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { Toaster as Toaster$1 } from "../../../../../node_modules/sonner/dist/index.js";
3
- import { toast } from "../../../../../node_modules/sonner/dist/index.js";
4
- import LoaderCircle from "../../../../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
5
- import OctagonX from "../../../../../node_modules/lucide-react/dist/esm/icons/octagon-x.js";
6
- import TriangleAlert from "../../../../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js";
7
- import Info from "../../../../../node_modules/lucide-react/dist/esm/icons/info.js";
8
- import CircleCheck from "../../../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
2
+ import { Toaster as Toaster$1 } from "../../node_modules/sonner/dist/index.js";
3
+ import { toast } from "../../node_modules/sonner/dist/index.js";
4
+ import LoaderCircle from "../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
5
+ import OctagonX from "../../node_modules/lucide-react/dist/esm/icons/octagon-x.js";
6
+ import TriangleAlert from "../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js";
7
+ import Info from "../../node_modules/lucide-react/dist/esm/icons/info.js";
8
+ import CircleCheck from "../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
9
9
  function Toaster({
10
10
  theme = "system",
11
11
  richColors = true,
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,8 @@
1
+ type SpinnerProps = React.ComponentProps<"svg">;
2
+ /**
3
+ * Animated loading spinner for indicating processing states.
4
+ * Uses Lucide's Loader2 icon with continuous rotation animation.
5
+ */
6
+ declare function Spinner({ className, ...props }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
7
+ export { Spinner, type SpinnerProps };
8
+ //# sourceMappingURL=spinner.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { cn } from "../../../../../lib/utils.js";
3
- import LoaderCircle from "../../../../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
2
+ import { cn } from "../../lib/utils.js";
3
+ import LoaderCircle from "../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
4
4
  function Spinner({ className, ...props }) {
5
5
  return /* @__PURE__ */ jsx(
6
6
  LoaderCircle,
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,12 @@
1
+ import { Switch as SwitchPrimitive } from '@base-ui/react/switch';
2
+ type SwitchProps = SwitchPrimitive.Root.Props & {
3
+ /** Switch size variant. @default "default" */
4
+ size?: "sm" | "default";
5
+ };
6
+ /**
7
+ * Toggle switch for binary on/off settings.
8
+ * Renders a styled switch with automatic focus management and form integration.
9
+ */
10
+ declare function Switch({ className, size, ...props }: SwitchProps): import("react/jsx-runtime").JSX.Element;
11
+ export { Switch, type SwitchProps };
12
+ //# sourceMappingURL=switch.d.ts.map
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { cn } from "../../../../../lib/utils.js";
4
- import { SwitchRoot } from "../../../../../node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js";
5
- import { SwitchThumb } from "../../../../../node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { SwitchRoot } from "../../node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js";
5
+ import { SwitchThumb } from "../../node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js";
6
6
  function Switch({ className, size = "default", ...props }) {
7
7
  return /* @__PURE__ */ jsx(
8
8
  SwitchRoot,
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,51 @@
1
+ import * as React from "react";
2
+ type TableProps = React.ComponentProps<"table">;
3
+ /**
4
+ * Root table component with automatic horizontal scrolling container.
5
+ * Wraps standard HTML table element with responsive overflow behavior.
6
+ */
7
+ declare function Table({ className, ...props }: TableProps): import("react/jsx-runtime").JSX.Element;
8
+ type TableHeaderProps = React.ComponentProps<"thead">;
9
+ /**
10
+ * Table header section for column headings.
11
+ * Use with TableHead for individual header cells.
12
+ */
13
+ declare function TableHeader({ className, ...props }: TableHeaderProps): import("react/jsx-runtime").JSX.Element;
14
+ type TableBodyProps = React.ComponentProps<"tbody">;
15
+ /**
16
+ * Table body section for data rows.
17
+ * Use with TableRow and TableCell for row content.
18
+ */
19
+ declare function TableBody({ className, ...props }: TableBodyProps): import("react/jsx-runtime").JSX.Element;
20
+ type TableFooterProps = React.ComponentProps<"tfoot">;
21
+ /**
22
+ * Table footer section for summary rows.
23
+ * Typically used for totals or aggregated data.
24
+ */
25
+ declare function TableFooter({ className, ...props }: TableFooterProps): import("react/jsx-runtime").JSX.Element;
26
+ type TableRowProps = React.ComponentProps<"tr">;
27
+ /**
28
+ * Table row with hover and selection states.
29
+ * Add `data-state="selected"` attribute to highlight row.
30
+ */
31
+ declare function TableRow({ className, ...props }: TableRowProps): import("react/jsx-runtime").JSX.Element;
32
+ type TableHeadProps = React.ComponentProps<"th">;
33
+ /**
34
+ * Table header cell for column titles.
35
+ * Use within TableHeader > TableRow.
36
+ */
37
+ declare function TableHead({ className, ...props }: TableHeadProps): import("react/jsx-runtime").JSX.Element;
38
+ type TableCellProps = React.ComponentProps<"td">;
39
+ /**
40
+ * Table data cell for row content.
41
+ * Use within TableBody > TableRow.
42
+ */
43
+ declare function TableCell({ className, ...props }: TableCellProps): import("react/jsx-runtime").JSX.Element;
44
+ type TableCaptionProps = React.ComponentProps<"caption">;
45
+ /**
46
+ * Table caption for accessibility and description.
47
+ * Rendered below the table by default.
48
+ */
49
+ declare function TableCaption({ className, ...props }: TableCaptionProps): import("react/jsx-runtime").JSX.Element;
50
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, type TableProps, type TableHeaderProps, type TableBodyProps, type TableFooterProps, type TableHeadProps, type TableRowProps, type TableCellProps, type TableCaptionProps, };
51
+ //# sourceMappingURL=table.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import "react";
3
- import { cn } from "../../../../../lib/utils.js";
3
+ import { cn } from "../../lib/utils.js";
4
4
  function Table({ className, ...props }) {
5
5
  return /* @__PURE__ */ jsx(
6
6
  "div",
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,31 @@
1
+ import { Tabs as TabsPrimitive } from '@base-ui/react/tabs';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ type TabsProps = TabsPrimitive.Root.Props;
4
+ /**
5
+ * Root container for tabs component that manages tab state and orientation.
6
+ * Supports both controlled and uncontrolled usage with horizontal or vertical layout.
7
+ */
8
+ declare function Tabs({ className, orientation, ...props }: TabsProps): import("react/jsx-runtime").JSX.Element;
9
+ declare const tabsListVariants: (props?: ({
10
+ variant?: "line" | "default" | null | undefined;
11
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
12
+ type TabsListProps = TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>;
13
+ /**
14
+ * Container for tab triggers with two visual variants.
15
+ * @param variant - Visual style: "default" (background highlight) or "line" (underline indicator). @default "default"
16
+ */
17
+ declare function TabsList({ className, variant, ...props }: TabsListProps): import("react/jsx-runtime").JSX.Element;
18
+ type TabsTriggerProps = TabsPrimitive.Tab.Props;
19
+ /**
20
+ * Individual tab button that activates the corresponding panel.
21
+ * Supports icons, badges, and disabled state. Active tab has visual highlight or underline based on variant.
22
+ */
23
+ declare function TabsTrigger({ className, ...props }: TabsTriggerProps): import("react/jsx-runtime").JSX.Element;
24
+ type TabsContentProps = TabsPrimitive.Panel.Props;
25
+ /**
26
+ * Content panel that displays when its corresponding tab is active.
27
+ * Automatically hidden/shown based on active tab value.
28
+ */
29
+ declare function TabsContent({ className, ...props }: TabsContentProps): import("react/jsx-runtime").JSX.Element;
30
+ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants, type TabsProps, type TabsListProps, type TabsTriggerProps, type TabsContentProps, };
31
+ //# sourceMappingURL=tabs.d.ts.map
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { cva } from "../../../../../node_modules/class-variance-authority/dist/index.js";
4
- import { cn } from "../../../../../lib/utils.js";
5
- import { TabsRoot } from "../../../../../node_modules/@base-ui/react/esm/tabs/root/TabsRoot.js";
6
- import { TabsPanel } from "../../../../../node_modules/@base-ui/react/esm/tabs/panel/TabsPanel.js";
7
- import { TabsList as TabsList$1 } from "../../../../../node_modules/@base-ui/react/esm/tabs/list/TabsList.js";
8
- import { TabsTab } from "../../../../../node_modules/@base-ui/react/esm/tabs/tab/TabsTab.js";
3
+ import { cva } from "../../node_modules/class-variance-authority/dist/index.js";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { TabsRoot } from "../../node_modules/@base-ui/react/esm/tabs/root/TabsRoot.js";
6
+ import { TabsPanel } from "../../node_modules/@base-ui/react/esm/tabs/panel/TabsPanel.js";
7
+ import { TabsList as TabsList$1 } from "../../node_modules/@base-ui/react/esm/tabs/list/TabsList.js";
8
+ import { TabsTab } from "../../node_modules/@base-ui/react/esm/tabs/tab/TabsTab.js";
9
9
  function Tabs({ className, orientation = "horizontal", ...props }) {
10
10
  return /* @__PURE__ */ jsx(
11
11
  TabsRoot,
@@ -0,0 +1 @@
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;;;;;;;;"}
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ type TextareaProps = React.ComponentProps<"textarea">;
3
+ /**
4
+ * Multi-line text input with auto-grow behavior and validation states.
5
+ *
6
+ * Features:
7
+ * - Auto-grows vertically with content (field-sizing-content)
8
+ * - Error state via aria-invalid
9
+ * - Supports all native textarea props (rows, disabled, etc.)
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * <Textarea placeholder="Enter description..." rows={4} />
14
+ * ```
15
+ */
16
+ declare function Textarea({ className, ...props }: TextareaProps): import("react/jsx-runtime").JSX.Element;
17
+ export { Textarea, type TextareaProps };
18
+ //# sourceMappingURL=textarea.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import "react";
3
- import { cn } from "../../../../../lib/utils.js";
3
+ import { cn } from "../../lib/utils.js";
4
4
  function Textarea({ className, ...props }) {
5
5
  return /* @__PURE__ */ jsx(
6
6
  "textarea",
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ export type ToastVariant = "default" | "success" | "destructive" | "info" | "loading";
3
+ interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ title?: string;
5
+ description?: string;
6
+ variant?: ToastVariant;
7
+ onClose?: () => void;
8
+ }
9
+ declare function Toast({ title, description, variant, className, onClose, children, ...props }: ToastProps): import("react/jsx-runtime").JSX.Element;
10
+ export { Toast, type ToastProps };
11
+ //# sourceMappingURL=toast.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import "react";
3
- import { cn } from "../../../../../lib/utils.js";
4
- import X from "../../../../../node_modules/lucide-react/dist/esm/icons/x.js";
5
- import LoaderCircle from "../../../../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
6
- import Info from "../../../../../node_modules/lucide-react/dist/esm/icons/info.js";
7
- import CircleAlert from "../../../../../node_modules/lucide-react/dist/esm/icons/circle-alert.js";
8
- import CircleCheck from "../../../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
3
+ import { cn } from "../../lib/utils.js";
4
+ import X from "../../node_modules/lucide-react/dist/esm/icons/x.js";
5
+ import LoaderCircle from "../../node_modules/lucide-react/dist/esm/icons/loader-circle.js";
6
+ import Info from "../../node_modules/lucide-react/dist/esm/icons/info.js";
7
+ import CircleAlert from "../../node_modules/lucide-react/dist/esm/icons/circle-alert.js";
8
+ import CircleCheck from "../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
9
9
  const variantIcons = {
10
10
  default: null,
11
11
  success: /* @__PURE__ */ jsx(CircleCheck, { className: "size-5 text-success" }),
@@ -0,0 +1 @@
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;"}
@@ -0,0 +1,26 @@
1
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
2
+ import { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { toggleVariants } from './toggle';
5
+ type ToggleGroupProps = ToggleGroupPrimitive.Props & VariantProps<typeof toggleVariants> & {
6
+ /** Gap between items in spacing units. Set to 0 for joined buttons. @default 0 */
7
+ spacing?: number;
8
+ /** Layout direction of the toggle group. @default "horizontal" */
9
+ orientation?: "horizontal" | "vertical";
10
+ };
11
+ /**
12
+ * Container for a group of toggle buttons that share state. Supports both single and multiple selection modes.
13
+ *
14
+ * By default, the toggle group allows multiple selection. Use `multiple={false}` for single selection.
15
+ * All items inherit variant and size from the group unless explicitly overridden.
16
+ */
17
+ declare function ToggleGroup({ className, variant, size, spacing, orientation, children, ...props }: ToggleGroupProps): import("react/jsx-runtime").JSX.Element;
18
+ type ToggleGroupItemProps = TogglePrimitive.Props & VariantProps<typeof toggleVariants>;
19
+ /**
20
+ * Individual toggle button within a ToggleGroup. Inherits variant and size from parent group context.
21
+ *
22
+ * When spacing={0}, items are joined together with shared borders. Use `aria-label` for icon-only buttons.
23
+ */
24
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: ToggleGroupItemProps): import("react/jsx-runtime").JSX.Element;
25
+ export { ToggleGroup, ToggleGroupItem, type ToggleGroupProps, type ToggleGroupItemProps, };
26
+ //# sourceMappingURL=toggle-group.d.ts.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { cn } from "../../../../../lib/utils.js";
4
+ import { cn } from "../../lib/utils.js";
5
5
  import { toggleVariants } from "./toggle.js";
6
- import { ToggleGroup as ToggleGroup$1 } from "../../../../../node_modules/@base-ui/react/esm/toggle-group/ToggleGroup.js";
7
- import { Toggle } from "../../../../../node_modules/@base-ui/react/esm/toggle/Toggle.js";
6
+ import { ToggleGroup as ToggleGroup$1 } from "../../node_modules/@base-ui/react/esm/toggle-group/ToggleGroup.js";
7
+ import { Toggle } from "../../node_modules/@base-ui/react/esm/toggle/Toggle.js";
8
8
  const ToggleGroupContext = React.createContext({
9
9
  size: "default",
10
10
  variant: "default",
@@ -0,0 +1 @@
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;;;;;"}
@@ -0,0 +1,14 @@
1
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ declare const toggleVariants: (props?: ({
4
+ variant?: "default" | "outline" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ type ToggleProps = TogglePrimitive.Props & VariantProps<typeof toggleVariants>;
8
+ /**
9
+ * Two-state button that can be pressed (on) or unpressed (off).
10
+ * Supports icons, text, or both. Commonly used for formatting toolbars, view mode toggles, and preference switches.
11
+ */
12
+ declare function Toggle({ className, variant, size, ...props }: ToggleProps): import("react/jsx-runtime").JSX.Element;
13
+ export { Toggle, toggleVariants, type ToggleProps };
14
+ //# sourceMappingURL=toggle.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { cva } from "../../../../../node_modules/class-variance-authority/dist/index.js";
3
- import { cn } from "../../../../../lib/utils.js";
4
- import { Toggle as Toggle$1 } from "../../../../../node_modules/@base-ui/react/esm/toggle/Toggle.js";
2
+ import { cva } from "../../node_modules/class-variance-authority/dist/index.js";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { Toggle as Toggle$1 } from "../../node_modules/@base-ui/react/esm/toggle/Toggle.js";
5
5
  const toggleVariants = cva(
6
6
  "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",
7
7
  {
@@ -0,0 +1 @@
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;"}