@customafk/lunas-ui 0.0.26 → 0.0.27

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 (364) hide show
  1. package/dist/{alert-dialog-D-oR0YW3.cjs → alert-dialog-26JyobJb.cjs} +1 -1
  2. package/dist/{alert-dialog-D-oR0YW3.cjs.map → alert-dialog-26JyobJb.cjs.map} +1 -1
  3. package/dist/{alert-dialog-CNHyP_A9.js → alert-dialog-Dv0cgymS.js} +1 -1
  4. package/dist/{alert-dialog-CNHyP_A9.js.map → alert-dialog-Dv0cgymS.js.map} +1 -1
  5. package/dist/{button-BmBtMriU.d.ts → button-CPBLm_02.d.ts} +5 -5
  6. package/dist/{button-tCnJHt8O.d.cts → button-ghXW1WTr.d.cts} +5 -5
  7. package/dist/{calendar-CbuOOMpK.js → calendar-B66UT_fu.js} +1 -1
  8. package/dist/{calendar-CbuOOMpK.js.map → calendar-B66UT_fu.js.map} +1 -1
  9. package/dist/{calendar-B8IKzrdN.cjs → calendar-DXegnGRJ.cjs} +1 -1
  10. package/dist/{calendar-B8IKzrdN.cjs.map → calendar-DXegnGRJ.cjs.map} +1 -1
  11. package/dist/{command-Dr2XmKV6.d.cts → command-CE_Qcgo7.d.ts} +12 -12
  12. package/dist/{command-Dvq-HZwH.d.ts → command-CiEjoEnP.d.cts} +12 -12
  13. package/dist/{command-TFZwJmux.js → command-Dbkg10QA.js} +2 -2
  14. package/dist/{command-TFZwJmux.js.map → command-Dbkg10QA.js.map} +1 -1
  15. package/dist/{command-CoB5R5FI.cjs → command-IL3ogESu.cjs} +2 -2
  16. package/dist/{command-CoB5R5FI.cjs.map → command-IL3ogESu.cjs.map} +1 -1
  17. package/dist/data-display/empty.d.cts +2 -2
  18. package/dist/data-display/statistic.d.cts +2 -2
  19. package/dist/data-display/statistic.d.ts +2 -2
  20. package/dist/{dialog-CSDDiHKO.js → dialog-BEdMA5Lp.js} +1 -1
  21. package/dist/{dialog-CSDDiHKO.js.map → dialog-BEdMA5Lp.js.map} +1 -1
  22. package/dist/{dialog-C-DYoapJ.d.ts → dialog-Bw_T5aco.d.cts} +12 -12
  23. package/dist/{dialog-_Cgij9NP.cjs → dialog-C4oHnJNN.cjs} +1 -1
  24. package/dist/{dialog-_Cgij9NP.cjs.map → dialog-C4oHnJNN.cjs.map} +1 -1
  25. package/dist/{dialog-CA0E_tNX.d.cts → dialog-CoH1pTBH.d.ts} +12 -12
  26. package/dist/dialogs/confirm-dialog.cjs +1 -1
  27. package/dist/dialogs/confirm-dialog.js +1 -1
  28. package/dist/dialogs/detail-dialog/component/sidebar.d.cts +4 -4
  29. package/dist/dialogs/detail-dialog/component/sidebar.d.ts +28 -28
  30. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  31. package/dist/dialogs/detail-dialog/index.js +1 -1
  32. package/dist/dialogs/error-dialog.cjs +1 -1
  33. package/dist/dialogs/error-dialog.js +1 -1
  34. package/dist/dialogs/form-dialog.cjs +1 -1
  35. package/dist/dialogs/form-dialog.d.cts +2 -2
  36. package/dist/dialogs/form-dialog.d.ts +2 -2
  37. package/dist/dialogs/form-dialog.js +1 -1
  38. package/dist/dialogs/loading-dialog.cjs +1 -1
  39. package/dist/dialogs/loading-dialog.js +1 -1
  40. package/dist/{error-dialog-D5R5le-W.cjs → error-dialog-C0PDn-pj.cjs} +2 -2
  41. package/dist/{error-dialog-D5R5le-W.cjs.map → error-dialog-C0PDn-pj.cjs.map} +1 -1
  42. package/dist/{error-dialog-Q99thrSD.js → error-dialog-CCdQ8zbQ.js} +2 -2
  43. package/dist/{error-dialog-Q99thrSD.js.map → error-dialog-CCdQ8zbQ.js.map} +1 -1
  44. package/dist/{form-wrapper-CY-stRaQ.cjs → form-wrapper-Cd8c5MIL.cjs} +2 -2
  45. package/dist/{form-wrapper-CY-stRaQ.cjs.map → form-wrapper-Cd8c5MIL.cjs.map} +1 -1
  46. package/dist/{form-wrapper-C2xlvWx0.js → form-wrapper-DntbFqN1.js} +2 -2
  47. package/dist/{form-wrapper-C2xlvWx0.js.map → form-wrapper-DntbFqN1.js.map} +1 -1
  48. package/dist/forms/combobox-field.cjs +1 -1
  49. package/dist/forms/combobox-field.d.cts +2 -2
  50. package/dist/forms/combobox-field.d.ts +2 -2
  51. package/dist/forms/combobox-field.js +1 -1
  52. package/dist/forms/date-field.cjs +1 -1
  53. package/dist/forms/date-field.d.cts +2 -2
  54. package/dist/forms/date-field.d.ts +2 -2
  55. package/dist/forms/date-field.js +1 -1
  56. package/dist/forms/form-wrapper.cjs +1 -1
  57. package/dist/forms/form-wrapper.d.cts +2 -2
  58. package/dist/forms/form-wrapper.d.ts +2 -2
  59. package/dist/forms/form-wrapper.js +1 -1
  60. package/dist/forms/multi-select-field.cjs +1 -1
  61. package/dist/forms/multi-select-field.cjs.map +1 -1
  62. package/dist/forms/multi-select-field.d.cts +2 -2
  63. package/dist/forms/multi-select-field.d.ts +2 -2
  64. package/dist/forms/multi-select-field.js +1 -1
  65. package/dist/forms/number-field.d.cts +2 -2
  66. package/dist/forms/number-field.d.ts +2 -2
  67. package/dist/forms/password-field.d.cts +2 -2
  68. package/dist/forms/password-field.d.ts +2 -2
  69. package/dist/forms/select-field.d.cts +2 -2
  70. package/dist/forms/select-field.d.ts +2 -2
  71. package/dist/forms/switch-field.d.cts +2 -2
  72. package/dist/forms/switch-field.d.ts +2 -2
  73. package/dist/forms/text-field.d.cts +2 -2
  74. package/dist/forms/text-field.d.ts +2 -2
  75. package/dist/forms/textarea-field.d.cts +2 -2
  76. package/dist/forms/textarea-field.d.ts +2 -2
  77. package/dist/{input-CjNcnHb_.d.ts → input-CUDclgoU.d.ts} +3 -3
  78. package/dist/{input-BsXm0_Iq.d.cts → input-y_n-XGys.d.cts} +3 -3
  79. package/dist/layouts/app-layout/index.d.cts +5 -5
  80. package/dist/layouts/app-layout/index.d.ts +3 -3
  81. package/dist/layouts/flex.d.cts +4 -4
  82. package/dist/layouts/flex.d.ts +4 -4
  83. package/dist/layouts/main/index.d.cts +4 -4
  84. package/dist/layouts/main/index.d.ts +4 -4
  85. package/dist/{multi-select-Cjvm4tK5.cjs → multi-select-3yxD9gbY.cjs} +2 -2
  86. package/dist/{multi-select-Cjvm4tK5.cjs.map → multi-select-3yxD9gbY.cjs.map} +1 -1
  87. package/dist/{multi-select-D0bZVOnm.js → multi-select-Cb07NlA7.js} +2 -2
  88. package/dist/{multi-select-D0bZVOnm.js.map → multi-select-Cb07NlA7.js.map} +1 -1
  89. package/dist/{popover-CTFp7ZXi.js → popover-CqAD7HNo.js} +1 -1
  90. package/dist/{popover-CTFp7ZXi.js.map → popover-CqAD7HNo.js.map} +1 -1
  91. package/dist/{popover-DCcPvdz2.cjs → popover-Dd0acCEk.cjs} +1 -1
  92. package/dist/{popover-DCcPvdz2.cjs.map → popover-Dd0acCEk.cjs.map} +1 -1
  93. package/dist/{separator-5FdzRGaJ.d.ts → separator-BLYi41aC.d.ts} +3 -3
  94. package/dist/{separator-DpxrpK_H.d.cts → separator-ClGBPiYE.d.cts} +3 -3
  95. package/dist/table/index.d.cts +2 -2
  96. package/dist/table/index.d.ts +2 -2
  97. package/dist/{toggle-Cx9H5u3p.d.cts → toggle-BWQWsKMA.d.ts} +4 -4
  98. package/dist/{toggle-DH9IssyE.d.ts → toggle-DnGvFJh8.d.cts} +4 -4
  99. package/dist/{tooltip-Djh_dcy5.d.ts → tooltip-Bk8VwHdM.d.ts} +6 -6
  100. package/dist/{tooltip-BAtWdJyX.d.cts → tooltip-cisSpCHG.d.cts} +6 -6
  101. package/dist/typography/paragraph.d.cts +2 -2
  102. package/dist/typography/paragraph.d.ts +2 -2
  103. package/dist/typography/title.d.cts +2 -2
  104. package/dist/typography/title.d.ts +2 -2
  105. package/dist/ui/alert-dialog.cjs +1 -1
  106. package/dist/ui/alert-dialog.d.cts +12 -12
  107. package/dist/ui/alert-dialog.d.ts +12 -12
  108. package/dist/ui/alert-dialog.js +1 -1
  109. package/dist/ui/alert.d.cts +6 -6
  110. package/dist/ui/alert.d.ts +6 -6
  111. package/dist/ui/aspect-ratio.d.cts +2 -2
  112. package/dist/ui/aspect-ratio.d.ts +2 -2
  113. package/dist/ui/avatar.d.cts +4 -4
  114. package/dist/ui/avatar.d.ts +4 -4
  115. package/dist/ui/badge.d.cts +2 -2
  116. package/dist/ui/badge.d.ts +4 -4
  117. package/dist/ui/breadcrumb.d.cts +8 -8
  118. package/dist/ui/breadcrumb.d.ts +8 -8
  119. package/dist/ui/button.d.cts +1 -1
  120. package/dist/ui/button.d.ts +1 -1
  121. package/dist/ui/calendar.cjs +1 -1
  122. package/dist/ui/calendar.d.cts +4 -4
  123. package/dist/ui/calendar.d.ts +4 -4
  124. package/dist/ui/calendar.js +1 -1
  125. package/dist/ui/card.d.cts +8 -8
  126. package/dist/ui/card.d.ts +8 -8
  127. package/dist/ui/carousel.d.cts +7 -7
  128. package/dist/ui/carousel.d.ts +7 -7
  129. package/dist/ui/collapsible.d.cts +4 -4
  130. package/dist/ui/collapsible.d.ts +4 -4
  131. package/dist/ui/command.cjs +1 -1
  132. package/dist/ui/command.d.cts +2 -2
  133. package/dist/ui/command.d.ts +2 -2
  134. package/dist/ui/command.js +1 -1
  135. package/dist/ui/context-menu.d.cts +16 -16
  136. package/dist/ui/context-menu.d.ts +16 -16
  137. package/dist/ui/dialog.cjs +1 -1
  138. package/dist/ui/dialog.d.cts +1 -1
  139. package/dist/ui/dialog.d.ts +1 -1
  140. package/dist/ui/dialog.js +1 -1
  141. package/dist/ui/dropdown-menu.d.cts +16 -16
  142. package/dist/ui/dropdown-menu.d.ts +16 -16
  143. package/dist/ui/file-uploader.d.cts +2 -2
  144. package/dist/ui/file-uploader.d.ts +2 -2
  145. package/dist/ui/form.d.cts +7 -7
  146. package/dist/ui/form.d.ts +7 -7
  147. package/dist/ui/hover-card.d.cts +4 -4
  148. package/dist/ui/hover-card.d.ts +4 -4
  149. package/dist/ui/input-otp.d.cts +5 -5
  150. package/dist/ui/input-otp.d.ts +5 -5
  151. package/dist/ui/input.d.cts +1 -1
  152. package/dist/ui/input.d.ts +1 -1
  153. package/dist/ui/inputs/search-input.d.cts +1 -1
  154. package/dist/ui/inputs/search-input.d.ts +3 -3
  155. package/dist/ui/label.d.cts +2 -2
  156. package/dist/ui/label.d.ts +2 -2
  157. package/dist/ui/menubar.d.cts +17 -17
  158. package/dist/ui/menubar.d.ts +17 -17
  159. package/dist/ui/multi-select.cjs +1 -1
  160. package/dist/ui/multi-select.d.cts +2 -2
  161. package/dist/ui/multi-select.d.ts +2 -2
  162. package/dist/ui/multi-select.js +1 -1
  163. package/dist/ui/navigation-menu.d.cts +11 -11
  164. package/dist/ui/navigation-menu.d.ts +9 -9
  165. package/dist/ui/pagination.d.cts +9 -9
  166. package/dist/ui/pagination.d.ts +9 -9
  167. package/dist/ui/popover.cjs +1 -1
  168. package/dist/ui/popover.d.cts +5 -5
  169. package/dist/ui/popover.d.ts +5 -5
  170. package/dist/ui/popover.js +1 -1
  171. package/dist/ui/progress.d.cts +2 -2
  172. package/dist/ui/progress.d.ts +2 -2
  173. package/dist/ui/radio-group.d.cts +3 -3
  174. package/dist/ui/radio-group.d.ts +3 -3
  175. package/dist/ui/resizable.d.cts +4 -4
  176. package/dist/ui/resizable.d.ts +4 -4
  177. package/dist/ui/scroll-area.d.ts +3 -3
  178. package/dist/ui/select.d.cts +11 -11
  179. package/dist/ui/select.d.ts +11 -11
  180. package/dist/ui/separator.d.cts +1 -1
  181. package/dist/ui/separator.d.ts +1 -1
  182. package/dist/ui/sheet.d.cts +9 -9
  183. package/dist/ui/sheet.d.ts +9 -9
  184. package/dist/ui/sidebar.d.cts +30 -30
  185. package/dist/ui/sidebar.d.ts +30 -30
  186. package/dist/ui/skeleton.d.cts +2 -2
  187. package/dist/ui/skeleton.d.ts +2 -2
  188. package/dist/ui/slider.d.cts +2 -2
  189. package/dist/ui/slider.d.ts +2 -2
  190. package/dist/ui/sonner.d.cts +2 -2
  191. package/dist/ui/sonner.d.ts +2 -2
  192. package/dist/ui/switch.d.cts +2 -2
  193. package/dist/ui/switch.d.ts +2 -2
  194. package/dist/ui/table.d.cts +9 -9
  195. package/dist/ui/table.d.ts +9 -9
  196. package/dist/ui/tabs.d.cts +5 -5
  197. package/dist/ui/tabs.d.ts +5 -5
  198. package/dist/ui/textarea.d.cts +2 -2
  199. package/dist/ui/textarea.d.ts +2 -2
  200. package/dist/ui/toggle-group.d.cts +4 -4
  201. package/dist/ui/toggle-group.d.ts +4 -4
  202. package/dist/ui/toggle.d.cts +1 -1
  203. package/dist/ui/toggle.d.ts +1 -1
  204. package/dist/ui/tooltip.d.cts +1 -1
  205. package/dist/ui/tooltip.d.ts +1 -1
  206. package/package.json +2 -2
  207. package/styles/base.css +29 -0
  208. package/styles/loader.css +113 -0
  209. package/styles/theme.css +104 -0
  210. package/styles/typography.css +6 -0
  211. package/packages/components/cards/simple-card.tsx +0 -23
  212. package/packages/components/data-display/country.tsx +0 -53
  213. package/packages/components/data-display/data-list.tsx +0 -29
  214. package/packages/components/data-display/date-tooltip.tsx +0 -23
  215. package/packages/components/data-display/date.tsx +0 -157
  216. package/packages/components/data-display/empty.tsx +0 -13
  217. package/packages/components/data-display/name.tsx +0 -23
  218. package/packages/components/data-display/phone-number.tsx +0 -14
  219. package/packages/components/data-display/role-badge.tsx +0 -29
  220. package/packages/components/data-display/statistic.tsx +0 -139
  221. package/packages/components/dialogs/confirm-dialog.tsx +0 -44
  222. package/packages/components/dialogs/detail-dialog/component/header.tsx +0 -10
  223. package/packages/components/dialogs/detail-dialog/component/main.tsx +0 -35
  224. package/packages/components/dialogs/detail-dialog/component/sidebar.tsx +0 -618
  225. package/packages/components/dialogs/detail-dialog/component/wrapper.tsx +0 -15
  226. package/packages/components/dialogs/detail-dialog/index.tsx +0 -91
  227. package/packages/components/dialogs/error-dialog.tsx +0 -34
  228. package/packages/components/dialogs/form-dialog.tsx +0 -74
  229. package/packages/components/dialogs/loading-dialog.tsx +0 -20
  230. package/packages/components/forms/combobox-field.tsx +0 -104
  231. package/packages/components/forms/date-field.tsx +0 -62
  232. package/packages/components/forms/form-wrapper.tsx +0 -120
  233. package/packages/components/forms/multi-select-field.tsx +0 -56
  234. package/packages/components/forms/number-field.tsx +0 -54
  235. package/packages/components/forms/password-field.tsx +0 -38
  236. package/packages/components/forms/select-field.tsx +0 -58
  237. package/packages/components/forms/switch-field.tsx +0 -40
  238. package/packages/components/forms/text-field.tsx +0 -73
  239. package/packages/components/forms/textarea-field.tsx +0 -45
  240. package/packages/components/index.tsx +0 -0
  241. package/packages/components/layouts/app-layout/index.tsx +0 -74
  242. package/packages/components/layouts/app-layout/sidebar.tsx +0 -663
  243. package/packages/components/layouts/flex.tsx +0 -99
  244. package/packages/components/layouts/main/content.tsx +0 -11
  245. package/packages/components/layouts/main/header.tsx +0 -41
  246. package/packages/components/layouts/main/index.tsx +0 -3
  247. package/packages/components/layouts/main/wrapper.tsx +0 -5
  248. package/packages/components/table/data-table-pagination.tsx +0 -70
  249. package/packages/components/table/data-table.tsx +0 -241
  250. package/packages/components/table/index.tsx +0 -107
  251. package/packages/components/typography/paragraph.tsx +0 -29
  252. package/packages/components/typography/title.tsx +0 -31
  253. package/packages/components/ui/alert-dialog.tsx +0 -99
  254. package/packages/components/ui/alert.tsx +0 -44
  255. package/packages/components/ui/aspect-ratio.tsx +0 -11
  256. package/packages/components/ui/avatar.tsx +0 -25
  257. package/packages/components/ui/badge.tsx +0 -57
  258. package/packages/components/ui/breadcrumb.tsx +0 -74
  259. package/packages/components/ui/button.tsx +0 -205
  260. package/packages/components/ui/buttons/add-new.tsx +0 -19
  261. package/packages/components/ui/buttons/edit.tsx +0 -14
  262. package/packages/components/ui/buttons/refresh.tsx +0 -19
  263. package/packages/components/ui/buttons/trash.tsx +0 -14
  264. package/packages/components/ui/buttons/upload-image.tsx +0 -25
  265. package/packages/components/ui/calendar.tsx +0 -141
  266. package/packages/components/ui/card.tsx +0 -44
  267. package/packages/components/ui/carousel.tsx +0 -187
  268. package/packages/components/ui/checkbox.tsx +0 -34
  269. package/packages/components/ui/collapsible.tsx +0 -17
  270. package/packages/components/ui/command.tsx +0 -138
  271. package/packages/components/ui/context-menu.tsx +0 -196
  272. package/packages/components/ui/dialog.tsx +0 -119
  273. package/packages/components/ui/dropdown-menu.tsx +0 -249
  274. package/packages/components/ui/file-uploader.tsx +0 -314
  275. package/packages/components/ui/form.tsx +0 -104
  276. package/packages/components/ui/hover-card.tsx +0 -32
  277. package/packages/components/ui/input-otp.tsx +0 -67
  278. package/packages/components/ui/input.tsx +0 -59
  279. package/packages/components/ui/inputs/number-input.tsx +0 -317
  280. package/packages/components/ui/inputs/password-input.tsx +0 -29
  281. package/packages/components/ui/inputs/search-input.tsx +0 -24
  282. package/packages/components/ui/label.tsx +0 -26
  283. package/packages/components/ui/menubar.tsx +0 -212
  284. package/packages/components/ui/multi-select.tsx +0 -626
  285. package/packages/components/ui/navigation-menu.tsx +0 -124
  286. package/packages/components/ui/pagination.tsx +0 -70
  287. package/packages/components/ui/popover.tsx +0 -49
  288. package/packages/components/ui/progress.tsx +0 -19
  289. package/packages/components/ui/radio-group.tsx +0 -36
  290. package/packages/components/ui/resizable.tsx +0 -47
  291. package/packages/components/ui/scroll-area.tsx +0 -35
  292. package/packages/components/ui/select.tsx +0 -199
  293. package/packages/components/ui/separator.tsx +0 -25
  294. package/packages/components/ui/sheet.tsx +0 -119
  295. package/packages/components/ui/sidebar.tsx +0 -675
  296. package/packages/components/ui/skeleton.tsx +0 -8
  297. package/packages/components/ui/slider.tsx +0 -45
  298. package/packages/components/ui/sonner.tsx +0 -40
  299. package/packages/components/ui/switch.tsx +0 -46
  300. package/packages/components/ui/table.tsx +0 -66
  301. package/packages/components/ui/tabs.tsx +0 -53
  302. package/packages/components/ui/textarea.tsx +0 -46
  303. package/packages/components/ui/toggle-group.tsx +0 -63
  304. package/packages/components/ui/toggle.tsx +0 -34
  305. package/packages/components/ui/tooltip.tsx +0 -53
  306. package/packages/constants.tsx +0 -45
  307. package/packages/hooks/use-callback-ref.ts +0 -22
  308. package/packages/hooks/use-controllable-state.ts +0 -58
  309. package/packages/hooks/use-mobile.ts +0 -19
  310. package/packages/index.css +0 -133
  311. package/packages/lib/utils.ts +0 -24
  312. package/packages/stories/1.Guideline.mdx +0 -3
  313. package/packages/stories/2.Colors.mdx +0 -145
  314. package/packages/stories/3.Pypography.mdx +0 -51
  315. package/packages/stories/cards/simple-card.stories.tsx +0 -24
  316. package/packages/stories/data-display/data-list.stories.tsx +0 -22
  317. package/packages/stories/data-display/empty.stories.tsx +0 -13
  318. package/packages/stories/data-display/form-dialog.stories.tsx +0 -27
  319. package/packages/stories/data-display/name.stories.tsx +0 -25
  320. package/packages/stories/data-display/phone-number.stories.tsx +0 -17
  321. package/packages/stories/data-display/statistic.stories.tsx +0 -41
  322. package/packages/stories/dialogs/confirm-dialog.stories.tsx +0 -26
  323. package/packages/stories/dialogs/detail-dialog.stories.tsx +0 -34
  324. package/packages/stories/dialogs/error-dialog.stories.tsx +0 -27
  325. package/packages/stories/dialogs/loading-dialog.stories.tsx +0 -16
  326. package/packages/stories/forms/combobox-field.stories.tsx +0 -38
  327. package/packages/stories/forms/form-wrapper.stories.tsx +0 -59
  328. package/packages/stories/forms/multi-select-field.stories.tsx +0 -42
  329. package/packages/stories/forms/number-field.stories.tsx +0 -35
  330. package/packages/stories/forms/select-field.stories.tsx +0 -39
  331. package/packages/stories/forms/switch-field.stories.tsx +0 -36
  332. package/packages/stories/forms/text-field.stories.tsx +0 -41
  333. package/packages/stories/forms/textarea-field.stories.tsx +0 -34
  334. package/packages/stories/layouts/app-layout.stories.tsx +0 -49
  335. package/packages/stories/typography/paragraph.stories.tsx +0 -45
  336. package/packages/stories/typography/title.stories.tsx +0 -39
  337. package/packages/stories/ui/alert-dialog.stories.tsx +0 -49
  338. package/packages/stories/ui/alert.stories.tsx +0 -63
  339. package/packages/stories/ui/aspect-ratio.stories.tsx +0 -22
  340. package/packages/stories/ui/badge.stories.tsx +0 -170
  341. package/packages/stories/ui/breadcrumb.stories.tsx +0 -172
  342. package/packages/stories/ui/button.stories.tsx +0 -181
  343. package/packages/stories/ui/card.stories.tsx +0 -58
  344. package/packages/stories/ui/checkbox.stories.tsx +0 -48
  345. package/packages/stories/ui/command.stories.tsx +0 -58
  346. package/packages/stories/ui/dialog.stories.tsx +0 -55
  347. package/packages/stories/ui/dropdown-menu.stories.tsx +0 -89
  348. package/packages/stories/ui/file-uploader.stories.tsx +0 -18
  349. package/packages/stories/ui/input.stories.tsx +0 -38
  350. package/packages/stories/ui/label.stories.tsx +0 -17
  351. package/packages/stories/ui/multi-select.stories.tsx +0 -29
  352. package/packages/stories/ui/popover.stories.tsx +0 -52
  353. package/packages/stories/ui/progress.stories.tsx +0 -17
  354. package/packages/stories/ui/radio-group.stories.tsx +0 -31
  355. package/packages/stories/ui/select.stories.tsx +0 -31
  356. package/packages/stories/ui/separator.stories.tsx +0 -31
  357. package/packages/stories/ui/sheet.stories.tsx +0 -50
  358. package/packages/stories/ui/skeleton.stories.tsx +0 -27
  359. package/packages/stories/ui/switch.stories.tsx +0 -21
  360. package/packages/stories/ui/table.stories.tsx +0 -82
  361. package/packages/stories/ui/tabs.stories.tsx +0 -70
  362. package/packages/stories/ui/textarea.stories.tsx +0 -15
  363. package/packages/stories/ui/toaster.stories.tsx +0 -87
  364. package/packages/types.ts +0 -50
@@ -1,663 +0,0 @@
1
- import React from 'react'
2
- import { Slot as SlotPrimitive } from 'radix-ui'
3
- import { cva, type VariantProps } from 'class-variance-authority'
4
- import { MenuIcon } from 'lucide-react'
5
-
6
- import { Button } from '@/components/ui/button'
7
- import { Separator } from '@/components/ui/separator'
8
- import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet'
9
- import { Skeleton } from '@/components/ui/skeleton'
10
- import { TooltipProvider } from '@/components/ui/tooltip'
11
- import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
12
-
13
- import { useIsMobile } from '@/hooks/use-mobile'
14
- import { cn } from '@/lib/utils'
15
-
16
- const SIDEBAR_COOKIE_NAME = 'sidebar_state'
17
- const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
18
- const SIDEBAR_WIDTH = '16rem'
19
- const SIDEBAR_WIDTH_MOBILE = '18rem'
20
- const SIDEBAR_WIDTH_ICON = '3rem'
21
- const SIDEBAR_KEYBOARD_SHORTCUT = 'b'
22
-
23
- type SidebarContextProps = {
24
- state: 'expanded' | 'collapsed'
25
- open: boolean
26
- setOpen: (open: boolean) => void
27
- openMobile: boolean
28
- setOpenMobile: (open: boolean) => void
29
- isMobile: boolean
30
- toggleSidebar: () => void
31
- }
32
-
33
- const SidebarContext = React.createContext<SidebarContextProps | null>(null)
34
-
35
- function useSidebar() {
36
- const context = React.useContext(SidebarContext)
37
- if (!context) {
38
- throw new Error('useSidebar must be used within a SidebarProvider.')
39
- }
40
-
41
- return context
42
- }
43
-
44
- function SidebarProvider({
45
- defaultOpen = true,
46
- open: openProp,
47
- onOpenChange: setOpenProp,
48
- className,
49
- style,
50
- children,
51
- ...props
52
- }: React.ComponentProps<'div'> & {
53
- defaultOpen?: boolean
54
- open?: boolean
55
- onOpenChange?: (open: boolean) => void
56
- }) {
57
- const isMobile = useIsMobile()
58
- const [openMobile, setOpenMobile] = React.useState(false)
59
-
60
- // This is the internal state of the sidebar.
61
- // We use openProp and setOpenProp for control from outside the component.
62
- const [_open, _setOpen] = React.useState(defaultOpen)
63
- const open = openProp ?? _open
64
- const setOpen = React.useCallback(
65
- (value: boolean | ((value: boolean) => boolean)) => {
66
- const openState = typeof value === 'function' ? value(open) : value
67
- if (setOpenProp) {
68
- setOpenProp(openState)
69
- } else {
70
- _setOpen(openState)
71
- }
72
-
73
- // This sets the cookie to keep the sidebar state.
74
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
75
- },
76
- [setOpenProp, open],
77
- )
78
-
79
- // Helper to toggle the sidebar.
80
- const toggleSidebar = React.useCallback(() => {
81
- return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)
82
- }, [isMobile, setOpen, setOpenMobile])
83
-
84
- // Adds a keyboard shortcut to toggle the sidebar.
85
- React.useEffect(() => {
86
- const handleKeyDown = (event: KeyboardEvent) => {
87
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
88
- event.preventDefault()
89
- toggleSidebar()
90
- }
91
- }
92
-
93
- window.addEventListener('keydown', handleKeyDown)
94
- return () => window.removeEventListener('keydown', handleKeyDown)
95
- }, [toggleSidebar])
96
-
97
- // We add a state so that we can do data-state="expanded" or "collapsed".
98
- // This makes it easier to style the sidebar with Tailwind classes.
99
- const state = open ? 'expanded' : 'collapsed'
100
-
101
- const contextValue = React.useMemo<SidebarContextProps>(
102
- () => ({
103
- state,
104
- isMobile,
105
-
106
- toggleSidebar,
107
-
108
- open,
109
- setOpen,
110
-
111
- openMobile,
112
- setOpenMobile,
113
- }),
114
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],
115
- )
116
-
117
- return (
118
- <SidebarContext.Provider value={contextValue}>
119
- <TooltipProvider delayDuration={0}>
120
- <div
121
- data-slot="sidebar-wrapper"
122
- style={
123
- {
124
- '--sidebar-width': SIDEBAR_WIDTH,
125
- '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,
126
- ...style,
127
- } as React.CSSProperties
128
- }
129
- className={cn('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-svh w-full', className)}
130
- {...props}
131
- >
132
- {children}
133
- </div>
134
- </TooltipProvider>
135
- </SidebarContext.Provider>
136
- )
137
- }
138
-
139
- function Sidebar({
140
- side = 'left',
141
- variant = 'sidebar',
142
- collapsible = 'offcanvas',
143
- className,
144
- children,
145
- ...props
146
- }: React.ComponentProps<'div'> & {
147
- side?: 'left' | 'right'
148
- variant?: 'sidebar' | 'floating' | 'inset'
149
- collapsible?: 'offcanvas' | 'icon' | 'none'
150
- }) {
151
- const { isMobile, state, openMobile, setOpenMobile } = useSidebar()
152
-
153
- if (collapsible === 'none') {
154
- return (
155
- <aside data-slot="sidebar" className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', className)} {...props}>
156
- {children}
157
- </aside>
158
- )
159
- }
160
-
161
- if (isMobile) {
162
- return (
163
- <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>
164
- <SheetContent
165
- data-sidebar="sidebar"
166
- data-slot="sidebar"
167
- data-mobile="true"
168
- className="bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden"
169
- style={
170
- {
171
- '--sidebar-width': SIDEBAR_WIDTH_MOBILE,
172
- } as React.CSSProperties
173
- }
174
- side={side}
175
- >
176
- <SheetHeader className="sr-only">
177
- <SheetTitle>Sidebar</SheetTitle>
178
- <SheetDescription>Displays the mobile sidebar.</SheetDescription>
179
- </SheetHeader>
180
- <div className="flex h-full w-full flex-col">{children}</div>
181
- </SheetContent>
182
- </Sheet>
183
- )
184
- }
185
-
186
- return (
187
- <aside
188
- className="group peer text-sidebar-foreground bg-card hidden md:block"
189
- data-state={state}
190
- data-collapsible={state === 'collapsed' ? collapsible : ''}
191
- data-variant={variant}
192
- data-side={side}
193
- data-slot="sidebar"
194
- >
195
- {/* This is what handles the sidebar gap on desktop */}
196
- <div
197
- data-slot="sidebar-gap"
198
- className={cn(
199
- 'relative',
200
- 'bg-transparent',
201
- 'transition-[width] duration-200 ease-linear',
202
- 'h-14 w-(--sidebar-width)',
203
- 'group-data-[collapsible=offcanvas]:w-0',
204
- 'group-data-[side=right]:rotate-180',
205
- variant === 'floating' || variant === 'inset'
206
- ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'
207
- : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',
208
- )}
209
- />
210
- <div
211
- data-slot="sidebar-container"
212
- className={cn(
213
- 'hidden md:flex',
214
- 'shadow-nav fixed inset-y-0 top-14 z-10',
215
- 'h-[calc(100svh-3.5rem)] w-(--sidebar-width)',
216
- 'transition-[left,right,width] duration-200 ease-linear',
217
- side === 'left' && 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',
218
- side === 'right' && 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',
219
- // Adjust the padding for floating and inset variants.
220
- variant === 'floating' || variant === 'inset'
221
- ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'
222
- : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',
223
- className,
224
- )}
225
- {...props}
226
- >
227
- <div
228
- data-sidebar="sidebar"
229
- data-slot="sidebar-inner"
230
- className={cn(
231
- 'flex size-full flex-col',
232
- 'group-data-[variant=floating]:rounded-lg',
233
- 'group-data-[variant=floating]:border',
234
- 'group-data-[variant=floating]:border-sidebar-border',
235
- 'group-data-[variant=floating]:shadow-sm',
236
- )}
237
- >
238
- {children}
239
- </div>
240
- </div>
241
- </aside>
242
- )
243
- }
244
-
245
- function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {
246
- const { toggleSidebar } = useSidebar()
247
-
248
- return (
249
- <Button
250
- data-sidebar="trigger"
251
- data-slot="sidebar-trigger"
252
- variant="ghost"
253
- color="muted"
254
- size="icon"
255
- className={cn('size-10 rounded-full', className)}
256
- onClick={(event) => {
257
- onClick?.(event)
258
- toggleSidebar()
259
- }}
260
- {...props}
261
- >
262
- <MenuIcon className="!size-6" />
263
- <span className="sr-only">Toggle Sidebar</span>
264
- </Button>
265
- )
266
- }
267
-
268
- function SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {
269
- const { toggleSidebar } = useSidebar()
270
-
271
- return (
272
- <button
273
- data-sidebar="rail"
274
- data-slot="sidebar-rail"
275
- aria-label="Toggle Sidebar"
276
- tabIndex={-1}
277
- onClick={toggleSidebar}
278
- title="Toggle Sidebar"
279
- className={cn(
280
- 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',
281
- 'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',
282
- 'group-data-[side=left]:-right-4',
283
- 'group-data-[side=right]:left-0',
284
- 'in-data-[side=left]:cursor-w-resize',
285
- 'in-data-[side=right]:cursor-e-resize',
286
- 'hover:after:bg-sidebar-border',
287
- 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',
288
- 'group-data-[collapsible=offcanvas]:translate-x-0',
289
- 'group-data-[collapsible=offcanvas]:after:left-full',
290
- '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',
291
- '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
292
- '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
293
- '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
294
- className,
295
- )}
296
- {...props}
297
- />
298
- )
299
- }
300
-
301
- function SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {
302
- return (
303
- <main data-slot="sidebar-inset" className={cn('w-full', 'relative', 'flex flex-1 flex-col', className)} {...props}>
304
- <div className="h-14 w-full" />
305
- <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>
306
- </main>
307
- )
308
- }
309
-
310
- function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {
311
- return <div data-slot="sidebar-header" data-sidebar="header" className={cn('flex flex-col gap-2 p-2', className)} {...props} />
312
- }
313
-
314
- function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {
315
- return <div data-slot="sidebar-footer" data-sidebar="footer" className={cn('flex flex-col gap-2 p-2', className)} {...props} />
316
- }
317
-
318
- function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {
319
- return <Separator data-slot="sidebar-separator" data-sidebar="separator" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />
320
- }
321
-
322
- function SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {
323
- return (
324
- <div
325
- data-slot="sidebar-content"
326
- data-sidebar="content"
327
- className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}
328
- {...props}
329
- />
330
- )
331
- }
332
-
333
- function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {
334
- return <div data-slot="sidebar-group" data-sidebar="group" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />
335
- }
336
-
337
- function SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {
338
- const Comp = asChild ? SlotPrimitive.Slot : 'div'
339
-
340
- return (
341
- <Comp
342
- data-slot="sidebar-group-label"
343
- data-sidebar="group-label"
344
- className={cn(
345
- 'flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2',
346
- 'text-sidebar-foreground/70',
347
- 'ring-sidebar-ring',
348
- '[&>svg]:size-4',
349
- '[&>svg]:shrink-0',
350
- 'group-data-[collapsible=icon]:-mt-8',
351
- 'group-data-[collapsible=icon]:opacity-0',
352
- className,
353
- )}
354
- {...props}
355
- />
356
- )
357
- }
358
-
359
- function SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {
360
- const Comp = asChild ? SlotPrimitive.Slot : 'button'
361
-
362
- return (
363
- <Comp
364
- data-slot="sidebar-group-action"
365
- data-sidebar="group-action"
366
- className={cn(
367
- 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',
368
- 'focus-visible:ring-2',
369
- '[&>svg]:size-4',
370
- '[&>svg]:shrink-0',
371
- // Increases the hit area of the button on mobile.
372
- 'after:absolute after:-inset-2 md:after:hidden',
373
- 'group-data-[collapsible=icon]:hidden',
374
- className,
375
- )}
376
- {...props}
377
- />
378
- )
379
- }
380
-
381
- function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {
382
- return <div data-slot="sidebar-group-content" data-sidebar="group-content" className={cn('w-full text-sm', className)} {...props} />
383
- }
384
-
385
- function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {
386
- return <ul data-slot="sidebar-menu" data-sidebar="menu" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />
387
- }
388
-
389
- function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {
390
- return <li data-slot="sidebar-menu-item" data-sidebar="menu-item" className={cn('group/menu-item relative', className)} {...props} />
391
- }
392
-
393
- const sidebarMenuButtonVariants = cva(
394
- [
395
- 'peer/menu-button',
396
- 'cursor-pointer',
397
- 'flex w-full items-center gap-2',
398
- 'overflow-hidden rounded-md p-2 text-left text-sm outline-hidden',
399
- 'ring-sidebar-ring transition-[width,height,padding]',
400
- 'focus-visible:ring-2',
401
- 'hover:bg-sidebar-accent',
402
- 'hover:text-sidebar-accent-foreground',
403
- 'active:bg-sidebar-accent',
404
- 'active:text-sidebar-accent-foreground',
405
- 'disabled:pointer-events-none',
406
- 'disabled:opacity-50',
407
- 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',
408
- 'aria-disabled:pointer-events-none',
409
- 'aria-disabled:opacity-50',
410
- 'data-[active=true]:bg-sidebar-accent',
411
- 'data-[active=true]:font-medium',
412
- 'data-[active=true]:text-sidebar-accent-foreground',
413
- 'data-[state=open]:hover:bg-sidebar-accent',
414
- 'data-[state=open]:hover:text-sidebar-accent-foreground',
415
- 'group-data-[collapsible=icon]:size-8!',
416
- 'group-data-[collapsible=icon]:p-2!',
417
- '[&>span:last-child]:truncate',
418
- '[&>svg]:size-4',
419
- '[&>svg]:shrink-0',
420
- ],
421
- {
422
- variants: {
423
- variant: {
424
- default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
425
- outline:
426
- 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',
427
- },
428
- size: {
429
- default: 'h-8 text-sm',
430
- sm: 'h-7 text-xs',
431
- lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',
432
- },
433
- },
434
- defaultVariants: {
435
- variant: 'default',
436
- size: 'default',
437
- },
438
- },
439
- )
440
-
441
- function SidebarMenuButton({
442
- asChild = false,
443
- isActive = false,
444
- variant = 'default',
445
- size = 'default',
446
- tooltip,
447
- className,
448
- ...props
449
- }: React.ComponentProps<'button'> & {
450
- asChild?: boolean
451
- isActive?: boolean
452
- tooltip?: string | React.ComponentProps<typeof TooltipContent>
453
- } & VariantProps<typeof sidebarMenuButtonVariants>) {
454
- const Comp = asChild ? SlotPrimitive.Slot : 'button'
455
- const { isMobile, state } = useSidebar()
456
-
457
- const button = (
458
- <Comp
459
- data-slot="sidebar-menu-button"
460
- data-sidebar="menu-button"
461
- data-size={size}
462
- data-active={isActive}
463
- className={cn(sidebarMenuButtonVariants({ variant, size }), className)}
464
- {...props}
465
- />
466
- )
467
-
468
- if (!tooltip) {
469
- return button
470
- }
471
-
472
- if (typeof tooltip === 'string') {
473
- tooltip = {
474
- children: tooltip,
475
- }
476
- }
477
-
478
- return (
479
- <Tooltip>
480
- <TooltipTrigger asChild>{button}</TooltipTrigger>
481
- <TooltipContent side="right" align="center" hidden={state !== 'collapsed' || isMobile} {...tooltip} />
482
- </Tooltip>
483
- )
484
- }
485
-
486
- function SidebarMenuAction({
487
- className,
488
- asChild = false,
489
- showOnHover = false,
490
- ...props
491
- }: React.ComponentProps<'button'> & {
492
- asChild?: boolean
493
- showOnHover?: boolean
494
- }) {
495
- const Comp = asChild ? SlotPrimitive.Slot : 'button'
496
-
497
- return (
498
- <Comp
499
- data-slot="sidebar-menu-action"
500
- data-sidebar="menu-action"
501
- className={cn(
502
- '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 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',
503
- 'focus-visible:ring-2',
504
- '[&>svg]:size-4',
505
- '[&>svg]:shrink-0',
506
- // Increases the hit area of the button on mobile.
507
- 'after:absolute after:-inset-2 md:after:hidden',
508
- 'peer-data-[size=sm]/menu-button:top-1',
509
- 'peer-data-[size=default]/menu-button:top-1.5',
510
- 'peer-data-[size=lg]/menu-button:top-2.5',
511
- 'group-data-[collapsible=icon]:hidden',
512
- showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',
513
- showOnHover && 'group-focus-within/menu-item:opacity-100',
514
- showOnHover && 'group-hover/menu-item:opacity-100',
515
- showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',
516
- className,
517
- )}
518
- {...props}
519
- />
520
- )
521
- }
522
-
523
- function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {
524
- return (
525
- <div
526
- data-slot="sidebar-menu-badge"
527
- data-sidebar="menu-badge"
528
- className={cn(
529
- 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',
530
- 'peer-hover/menu-button:text-sidebar-accent-foreground',
531
- 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',
532
- 'peer-data-[size=sm]/menu-button:top-1',
533
- 'peer-data-[size=default]/menu-button:top-1.5',
534
- 'peer-data-[size=lg]/menu-button:top-2.5',
535
- 'group-data-[collapsible=icon]:hidden',
536
- className,
537
- )}
538
- {...props}
539
- />
540
- )
541
- }
542
-
543
- function SidebarMenuSkeleton({
544
- className,
545
- showIcon = false,
546
- ...props
547
- }: React.ComponentProps<'div'> & {
548
- showIcon?: boolean
549
- }) {
550
- // Random width between 50 to 90%.
551
- const width = React.useMemo(() => {
552
- return `${Math.floor(Math.random() * 40) + 50}%`
553
- }, [])
554
-
555
- return (
556
- <div data-slot="sidebar-menu-skeleton" data-sidebar="menu-skeleton" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>
557
- {showIcon && <Skeleton className="size-4 rounded-md" data-sidebar="menu-skeleton-icon" />}
558
- <Skeleton
559
- className="h-4 max-w-(--skeleton-width) flex-1"
560
- data-sidebar="menu-skeleton-text"
561
- style={
562
- {
563
- '--skeleton-width': width,
564
- } as React.CSSProperties
565
- }
566
- />
567
- </div>
568
- )
569
- }
570
-
571
- function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {
572
- return (
573
- <ul
574
- data-slot="sidebar-menu-sub"
575
- data-sidebar="menu-sub"
576
- className={cn(
577
- 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',
578
- 'group-data-[collapsible=icon]:hidden',
579
- className,
580
- )}
581
- {...props}
582
- />
583
- )
584
- }
585
-
586
- function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {
587
- return <li data-slot="sidebar-menu-sub-item" data-sidebar="menu-sub-item" className={cn('group/menu-sub-item relative', className)} {...props} />
588
- }
589
-
590
- function SidebarMenuSubButton({
591
- asChild = false,
592
- size = 'md',
593
- isActive = false,
594
- className,
595
- ...props
596
- }: React.ComponentProps<'a'> & {
597
- asChild?: boolean
598
- size?: 'sm' | 'md'
599
- isActive?: boolean
600
- }) {
601
- const Comp = asChild ? SlotPrimitive.Slot : 'a'
602
-
603
- return (
604
- <Comp
605
- data-slot="sidebar-menu-sub-button"
606
- data-sidebar="menu-sub-button"
607
- data-size={size}
608
- data-active={isActive}
609
- className={cn(
610
- 'text-sidebar-foreground',
611
- 'ring-sidebar-ring',
612
- 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',
613
- 'focus-visible:ring-2',
614
- 'hover:bg-sidebar-accent',
615
- 'hover:text-sidebar-accent-foreground',
616
- 'active:bg-sidebar-accent',
617
- 'active:text-sidebar-accent-foreground',
618
- 'disabled:pointer-events-none',
619
- 'disabled:opacity-50',
620
- 'aria-disabled:pointer-events-none',
621
- 'aria-disabled:opacity-50',
622
- '[&>svg]:size-4',
623
- '[&>svg]:shrink-0',
624
- '[&>svg]:text-sidebar-accent-foreground',
625
- '[&>span:last-child]:truncate',
626
- 'data-[active=true]:bg-sidebar-accent',
627
- 'data-[active=true]:text-sidebar-accent-foreground',
628
- size === 'sm' && 'text-xs',
629
- size === 'md' && 'text-sm',
630
- 'group-data-[collapsible=icon]:hidden',
631
- className,
632
- )}
633
- {...props}
634
- />
635
- )
636
- }
637
-
638
- export {
639
- Sidebar,
640
- SidebarContent,
641
- SidebarFooter,
642
- SidebarGroup,
643
- SidebarGroupAction,
644
- SidebarGroupContent,
645
- SidebarGroupLabel,
646
- SidebarHeader,
647
- SidebarInset,
648
- SidebarMenu,
649
- SidebarMenuAction,
650
- SidebarMenuBadge,
651
- SidebarMenuButton,
652
- SidebarMenuItem,
653
- SidebarMenuSkeleton,
654
- SidebarMenuSub,
655
- SidebarMenuSubButton,
656
- SidebarMenuSubItem,
657
- SidebarProvider,
658
- SidebarRail,
659
- SidebarSeparator,
660
- SidebarTrigger,
661
- // eslint-disable-next-line react-refresh/only-export-components
662
- useSidebar,
663
- }