@customafk/lunas-ui 0.2.28 → 0.2.30

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 (239) hide show
  1. package/dist/{alert-6_f_JgU-.cjs → alert-4rfsFtN6.cjs} +1 -1
  2. package/dist/{alert-6_f_JgU-.cjs.map → alert-4rfsFtN6.cjs.map} +1 -1
  3. package/dist/{alert-Ck2z0ECv.d.mts → alert-B7978FZb.d.mts} +5 -5
  4. package/dist/{alert-BSAtkBnX.mjs → alert-BC5Nss8t.mjs} +1 -1
  5. package/dist/{alert-BSAtkBnX.mjs.map → alert-BC5Nss8t.mjs.map} +1 -1
  6. package/dist/{alert-Bbooe3K0.d.cts → alert-DOsSwv1-.d.cts} +7 -7
  7. package/dist/{badge-BUDQIgSz.d.mts → badge-Bt62wY4t.d.cts} +4 -4
  8. package/dist/{badge-Dxa365-r.d.cts → badge-DXiJn9XY.d.mts} +4 -4
  9. package/dist/{button-C7IuBgb_.d.cts → button-BHCmEoty.d.cts} +5 -5
  10. package/dist/{button-u7M3BQF5.d.mts → button-CPYKtYVF.d.mts} +3 -3
  11. package/dist/{calendar-ChaYPTJO.cjs → calendar-Bt0rlJ89.cjs} +1 -1
  12. package/dist/{calendar-ChaYPTJO.cjs.map → calendar-Bt0rlJ89.cjs.map} +1 -1
  13. package/dist/{calendar-CHVujBHK.mjs → calendar-D8aRFw_F.mjs} +1 -1
  14. package/dist/{calendar-CHVujBHK.mjs.map → calendar-D8aRFw_F.mjs.map} +1 -1
  15. package/dist/{cms-layout-COfACv3M.cjs → cms-layout-DDs0pHWh.cjs} +1 -1
  16. package/dist/{cms-layout-COfACv3M.cjs.map → cms-layout-DDs0pHWh.cjs.map} +1 -1
  17. package/dist/{cms-layout--NUD8VVh.mjs → cms-layout-DHzRHAoI.mjs} +1 -1
  18. package/dist/{cms-layout--NUD8VVh.mjs.map → cms-layout-DHzRHAoI.mjs.map} +1 -1
  19. package/dist/data-display/country.d.mts +1 -1
  20. package/dist/data-display/role-badge.d.mts +1 -1
  21. package/dist/{dialog-CvPMWn6Y.d.mts → dialog-CEaSFdY9.d.cts} +12 -12
  22. package/dist/{dialog-DE7tIKD6.d.cts → dialog-DWWtnPg0.d.mts} +12 -12
  23. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +1 -1
  24. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +26 -26
  25. package/dist/drawer-C3o6IEeq.cjs +2 -0
  26. package/dist/drawer-C3o6IEeq.cjs.map +1 -0
  27. package/dist/drawer-j9wcVE50.mjs +2 -0
  28. package/dist/drawer-j9wcVE50.mjs.map +1 -0
  29. package/dist/features/descriptions/index.d.cts +6 -6
  30. package/dist/features/descriptions/index.d.mts +4 -4
  31. package/dist/features/tables/index.d.cts +1 -1
  32. package/dist/features/tables/index.d.mts +2 -2
  33. package/dist/features/tanstack-form/index.cjs +1 -1
  34. package/dist/features/tanstack-form/index.d.cts +1 -1
  35. package/dist/features/tanstack-form/index.d.mts +1 -1
  36. package/dist/features/tanstack-form/index.mjs +1 -1
  37. package/dist/features/text-editor/index.cjs +1 -1
  38. package/dist/features/text-editor/index.d.cts +1 -1
  39. package/dist/features/text-editor/index.d.mts +1 -1
  40. package/dist/features/text-editor/index.mjs +1 -1
  41. package/dist/{field-Bh7Hq4Lo.mjs → field-B8RhxRCu.mjs} +1 -1
  42. package/dist/{field-Bh7Hq4Lo.mjs.map → field-B8RhxRCu.mjs.map} +1 -1
  43. package/dist/{field-DTGEedKl.cjs → field-BxFpcOV1.cjs} +1 -1
  44. package/dist/{field-DTGEedKl.cjs.map → field-BxFpcOV1.cjs.map} +1 -1
  45. package/dist/{index-UfOfYRNf.d.cts → index-BJiTJozG.d.cts} +558 -312
  46. package/dist/{index-C3dXDjdR.d.mts → index-Cotq70wL.d.cts} +6 -6
  47. package/dist/{index-DPnJrJS9.d.mts → index-D6UbdtXa.d.mts} +558 -312
  48. package/dist/{index-rE1M5FGs.d.mts → index-DDYTIEq3.d.mts} +28 -28
  49. package/dist/{index-CyBWPhx7.d.cts → index-DpqGxieY.d.cts} +27 -27
  50. package/dist/{index-DpdXz-q5.d.cts → index-TvuUzBSW.d.mts} +6 -6
  51. package/dist/index.cjs +1 -1
  52. package/dist/index.d.cts +8 -8
  53. package/dist/index.d.mts +8 -8
  54. package/dist/index.mjs +1 -1
  55. package/dist/{input-ZL65yvYU.d.mts → input-B4ZV1tKO.d.cts} +6 -6
  56. package/dist/{input-B9XN8dsE.d.cts → input-Che86SWz.d.mts} +6 -6
  57. package/dist/layouts/cms-layout/index.cjs +1 -1
  58. package/dist/layouts/cms-layout/index.mjs +1 -1
  59. package/dist/layouts/flex.d.cts +3 -3
  60. package/dist/layouts/flex.d.mts +5 -5
  61. package/dist/layouts/payment-layout/index.cjs +1 -1
  62. package/dist/layouts/payment-layout/index.mjs +1 -1
  63. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  64. package/dist/pages/FeatureDeveloping.d.mts +2 -2
  65. package/dist/pages/FeatureFixing.d.cts +2 -2
  66. package/dist/pages/FeatureFixing.d.mts +2 -2
  67. package/dist/pages/LoginPage.cjs +1 -1
  68. package/dist/pages/LoginPage.d.cts +2 -2
  69. package/dist/pages/LoginPage.mjs +1 -1
  70. package/dist/pages/NotAuthorized.d.mts +2 -2
  71. package/dist/pages/NotFound.d.cts +2 -2
  72. package/dist/pages/NotFound.d.mts +2 -2
  73. package/dist/pages/RegisterPage.cjs +1 -1
  74. package/dist/pages/RegisterPage.d.cts +2 -2
  75. package/dist/pages/RegisterPage.d.mts +2 -2
  76. package/dist/pages/RegisterPage.mjs +1 -1
  77. package/dist/pages/VerifyEmailPage.cjs +1 -1
  78. package/dist/pages/VerifyEmailPage.d.cts +2 -2
  79. package/dist/pages/VerifyEmailPage.mjs +1 -1
  80. package/dist/{payment-layout-8rRJJa0f.cjs → payment-layout-BkSC6JkI.cjs} +1 -1
  81. package/dist/{payment-layout-8rRJJa0f.cjs.map → payment-layout-BkSC6JkI.cjs.map} +1 -1
  82. package/dist/{payment-layout-BdGZbGO-.mjs → payment-layout-CafCw6lS.mjs} +1 -1
  83. package/dist/{payment-layout-BdGZbGO-.mjs.map → payment-layout-CafCw6lS.mjs.map} +1 -1
  84. package/dist/{radio-group-KMvVXCIk.cjs → radio-group-Bv6w2woK.cjs} +1 -1
  85. package/dist/{radio-group-KMvVXCIk.cjs.map → radio-group-Bv6w2woK.cjs.map} +1 -1
  86. package/dist/{radio-group-CsmpBZTK.mjs → radio-group-KR6Ck-B9.mjs} +1 -1
  87. package/dist/{radio-group-CsmpBZTK.mjs.map → radio-group-KR6Ck-B9.mjs.map} +1 -1
  88. package/dist/switch-0-9Zt33o.cjs +2 -0
  89. package/dist/switch-0-9Zt33o.cjs.map +1 -0
  90. package/dist/switch-DHsjxnFP.mjs +2 -0
  91. package/dist/switch-DHsjxnFP.mjs.map +1 -0
  92. package/dist/tables-BQ-QiA1V.mjs.map +1 -1
  93. package/dist/tables-LRWPOv2a.cjs.map +1 -1
  94. package/dist/tanstack-form-B9CugNS5.cjs +2 -0
  95. package/dist/tanstack-form-B9CugNS5.cjs.map +1 -0
  96. package/dist/tanstack-form-DJ90sBFl.mjs +2 -0
  97. package/dist/tanstack-form-DJ90sBFl.mjs.map +1 -0
  98. package/dist/{text-editor-Dy3_hyNw.cjs → text-editor-CE_GkI7o.cjs} +1 -1
  99. package/dist/{text-editor-Dy3_hyNw.cjs.map → text-editor-CE_GkI7o.cjs.map} +1 -1
  100. package/dist/{text-editor-D182J9Y5.mjs → text-editor-CqC44BkO.mjs} +1 -1
  101. package/dist/{text-editor-D182J9Y5.mjs.map → text-editor-CqC44BkO.mjs.map} +1 -1
  102. package/dist/{textarea-SPXNe-iZ.cjs → textarea-BB2WynyM.cjs} +1 -1
  103. package/dist/{textarea-SPXNe-iZ.cjs.map → textarea-BB2WynyM.cjs.map} +1 -1
  104. package/dist/{textarea-Cvdq7UAn.mjs → textarea-D0-Gltw6.mjs} +1 -1
  105. package/dist/{textarea-Cvdq7UAn.mjs.map → textarea-D0-Gltw6.mjs.map} +1 -1
  106. package/dist/{types-wApFGHmV.d.mts → types-B2PQbMJL.d.mts} +1 -1
  107. package/dist/typography/paragraph.d.cts +2 -2
  108. package/dist/typography/paragraph.d.mts +2 -2
  109. package/dist/ui/alert-dialog.d.cts +12 -12
  110. package/dist/ui/alert-dialog.d.mts +12 -12
  111. package/dist/ui/alert.cjs +1 -1
  112. package/dist/ui/alert.d.cts +1 -1
  113. package/dist/ui/alert.d.mts +1 -1
  114. package/dist/ui/alert.mjs +1 -1
  115. package/dist/ui/aspect-ratio.d.cts +2 -2
  116. package/dist/ui/aspect-ratio.d.mts +2 -2
  117. package/dist/ui/avatar.d.cts +4 -4
  118. package/dist/ui/avatar.d.mts +4 -4
  119. package/dist/ui/badge.d.cts +1 -1
  120. package/dist/ui/badge.d.mts +1 -1
  121. package/dist/ui/breadcrumb.d.cts +8 -8
  122. package/dist/ui/breadcrumb.d.mts +8 -8
  123. package/dist/ui/button-group.d.cts +4 -4
  124. package/dist/ui/button-group.d.mts +4 -4
  125. package/dist/ui/button.d.cts +1 -1
  126. package/dist/ui/button.d.mts +1 -1
  127. package/dist/ui/calendar.cjs +1 -1
  128. package/dist/ui/calendar.d.cts +4 -4
  129. package/dist/ui/calendar.d.mts +1 -1
  130. package/dist/ui/calendar.mjs +1 -1
  131. package/dist/ui/card.d.cts +8 -8
  132. package/dist/ui/card.d.mts +8 -8
  133. package/dist/ui/carousel.d.cts +7 -7
  134. package/dist/ui/carousel.d.mts +7 -7
  135. package/dist/ui/checkbox.d.cts +2 -2
  136. package/dist/ui/checkbox.d.mts +2 -2
  137. package/dist/ui/collapsible.d.cts +4 -4
  138. package/dist/ui/collapsible.d.mts +4 -4
  139. package/dist/ui/command.d.cts +11 -11
  140. package/dist/ui/command.d.mts +11 -11
  141. package/dist/ui/context-menu.d.cts +16 -16
  142. package/dist/ui/context-menu.d.mts +16 -16
  143. package/dist/ui/dialog.d.cts +1 -1
  144. package/dist/ui/dialog.d.mts +1 -1
  145. package/dist/ui/drawer.cjs +1 -2
  146. package/dist/ui/drawer.d.cts +11 -11
  147. package/dist/ui/drawer.d.mts +11 -11
  148. package/dist/ui/drawer.mjs +1 -2
  149. package/dist/ui/dropdown-menu.d.cts +16 -16
  150. package/dist/ui/dropdown-menu.d.mts +16 -16
  151. package/dist/ui/empty.d.cts +9 -9
  152. package/dist/ui/empty.d.mts +7 -7
  153. package/dist/ui/field.cjs +1 -1
  154. package/dist/ui/field.d.cts +23 -23
  155. package/dist/ui/field.d.mts +21 -21
  156. package/dist/ui/field.mjs +1 -1
  157. package/dist/ui/file-uploader.d.cts +2 -2
  158. package/dist/ui/file-uploader.d.mts +2 -2
  159. package/dist/ui/form.cjs +1 -1
  160. package/dist/ui/form.d.cts +10 -10
  161. package/dist/ui/form.d.mts +10 -10
  162. package/dist/ui/form.mjs +1 -1
  163. package/dist/ui/hover-card.d.cts +4 -4
  164. package/dist/ui/hover-card.d.mts +4 -4
  165. package/dist/ui/input-otp.d.cts +5 -5
  166. package/dist/ui/input-otp.d.mts +5 -5
  167. package/dist/ui/input.d.cts +1 -1
  168. package/dist/ui/input.d.mts +1 -1
  169. package/dist/ui/inputs/search-input.d.cts +3 -3
  170. package/dist/ui/inputs/search-input.d.mts +3 -3
  171. package/dist/ui/item.d.cts +14 -14
  172. package/dist/ui/item.d.mts +14 -14
  173. package/dist/ui/label.d.cts +2 -2
  174. package/dist/ui/label.d.mts +2 -2
  175. package/dist/ui/menubar.d.cts +17 -17
  176. package/dist/ui/menubar.d.mts +17 -17
  177. package/dist/ui/multi-select.d.cts +2 -2
  178. package/dist/ui/multi-select.d.mts +3 -3
  179. package/dist/ui/navigation-menu.d.cts +11 -11
  180. package/dist/ui/navigation-menu.d.mts +9 -9
  181. package/dist/ui/pagination.d.cts +9 -9
  182. package/dist/ui/pagination.d.mts +9 -9
  183. package/dist/ui/popover.d.cts +6 -6
  184. package/dist/ui/popover.d.mts +6 -6
  185. package/dist/ui/progress.d.cts +2 -2
  186. package/dist/ui/progress.d.mts +2 -2
  187. package/dist/ui/radio-group.cjs +1 -1
  188. package/dist/ui/radio-group.d.cts +3 -3
  189. package/dist/ui/radio-group.d.mts +3 -3
  190. package/dist/ui/radio-group.mjs +1 -1
  191. package/dist/ui/resizable.d.cts +9 -9
  192. package/dist/ui/resizable.d.mts +1 -1
  193. package/dist/ui/scroll-area.d.cts +5 -5
  194. package/dist/ui/scroll-area.d.mts +5 -5
  195. package/dist/ui/select.d.cts +9 -9
  196. package/dist/ui/select.d.mts +9 -9
  197. package/dist/ui/separator.d.cts +2 -2
  198. package/dist/ui/separator.d.mts +2 -2
  199. package/dist/ui/sheet.d.cts +9 -9
  200. package/dist/ui/sheet.d.mts +9 -9
  201. package/dist/ui/sidebar.cjs +1 -1
  202. package/dist/ui/sidebar.cjs.map +1 -1
  203. package/dist/ui/sidebar.d.cts +28 -28
  204. package/dist/ui/sidebar.d.mts +28 -28
  205. package/dist/ui/sidebar.mjs +1 -1
  206. package/dist/ui/sidebar.mjs.map +1 -1
  207. package/dist/ui/skeleton.d.cts +2 -2
  208. package/dist/ui/skeleton.d.mts +2 -2
  209. package/dist/ui/slider.d.cts +2 -2
  210. package/dist/ui/slider.d.mts +2 -2
  211. package/dist/ui/sonner.d.cts +2 -2
  212. package/dist/ui/sonner.d.mts +2 -2
  213. package/dist/ui/spinner.d.cts +2 -2
  214. package/dist/ui/spinner.d.mts +2 -2
  215. package/dist/ui/switch.cjs +1 -2
  216. package/dist/ui/switch.d.cts +2 -2
  217. package/dist/ui/switch.d.mts +2 -2
  218. package/dist/ui/switch.mjs +1 -2
  219. package/dist/ui/table.d.mts +17 -17
  220. package/dist/ui/tabs.d.cts +5 -5
  221. package/dist/ui/tabs.d.mts +5 -5
  222. package/dist/ui/textarea.cjs +1 -1
  223. package/dist/ui/textarea.d.cts +2 -2
  224. package/dist/ui/textarea.mjs +1 -1
  225. package/dist/ui/toggle-group.d.cts +3 -3
  226. package/dist/ui/toggle-group.d.mts +3 -3
  227. package/dist/ui/toggle.d.cts +4 -4
  228. package/dist/ui/toggle.d.mts +4 -4
  229. package/dist/ui/tooltip.d.cts +5 -5
  230. package/dist/ui/tooltip.d.mts +5 -5
  231. package/package.json +1 -1
  232. package/dist/tanstack-form--I4H53bf.cjs +0 -2
  233. package/dist/tanstack-form--I4H53bf.cjs.map +0 -1
  234. package/dist/tanstack-form-DKIudGKP.mjs +0 -2
  235. package/dist/tanstack-form-DKIudGKP.mjs.map +0 -1
  236. package/dist/ui/drawer.cjs.map +0 -1
  237. package/dist/ui/drawer.mjs.map +0 -1
  238. package/dist/ui/switch.cjs.map +0 -1
  239. package/dist/ui/switch.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- "use client";const e=require(`../chunk-Bmb41Sf3.cjs`);require(`../button.variants-tnhb123u.cjs`);const t=require(`../button-Bu4ejNOW.cjs`),n=require(`../skeleton-CHympz8k.cjs`),r=require(`../tooltip-DC6i1A25.cjs`),i=require(`../separator-jytY1CPq.cjs`),a=require(`../input-1ceJxxFI.cjs`),o=require(`./drawer.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`),f=require(`radix-ui`),p=require(`@customafk/react-toolkit/hooks/useMobile`);const m=`sidebar_state`,h=3600*24*7,g=`16rem`,_=`18rem`,v=`3rem`,y=`b`,b=(0,c.createContext)(null);function x(){let e=(0,c.use)(b);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function S({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let u=(0,p.useIsMobile)(),[f,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)(e),_=t??h,v=(0,c.useCallback)(e=>{let t=typeof e==`function`?e(_):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,_]),y=(0,c.useCallback)(()=>u?m(e=>!e):v(e=>!e),[u,v,m]);(0,c.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y]);let x=_?`expanded`:`collapsed`,S=(0,c.useMemo)(()=>({state:x,isMobile:u,toggleSidebar:y,open:_,setOpen:v,openMobile:f,setOpenMobile:m}),[x,_,v,u,f,m,y]);return(0,d.jsx)(b.Provider,{value:S,children:(0,d.jsx)(r.r,{delayDuration:0,children:(0,d.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,l.cn)(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-dvh w-full`,i),...s,children:o})})})}function C({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:s,state:c,openMobile:u,setOpenMobile:f}=x();return n===`none`?(0,d.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,l.cn)(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,`border-r`,r),...a,children:i}):s?(0,d.jsx)(o.Drawer,{open:u,onOpenChange:f,direction:`left`,children:(0,d.jsxs)(o.DrawerContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`18rem`},children:[(0,d.jsxs)(o.DrawerHeader,{className:`sr-only`,children:[(0,d.jsx)(o.DrawerContent,{children:`Sidebar`}),(0,d.jsx)(o.DrawerDescription,{children:`Displays the mobile sidebar.`})]}),(0,d.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,d.jsxs)(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":c,"data-collapsible":c===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,d.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,l.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-14 w-(--sidebar-width)`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,d.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,l.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`border-r`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0`,e===`left`&&`group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0`,e===`right`&&`group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:(0,d.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,l.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:i})})]})}function w({className:e,onClick:n,...r}){let{toggleSidebar:i}=x();return(0,d.jsxs)(t.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,size:`icon`,className:(0,l.cn)(`size-10 rounded-full`,e),onClick:e=>{n?.(e),i()},...r,children:[(0,d.jsx)(s.MenuIcon,{className:`!size-6`}),(0,d.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function T({className:e,...t}){let{toggleSidebar:n}=x();return(0,d.jsx)(`button`,{"data-sidebar":`rail`,"data-slot":`sidebar-rail`,"aria-label":`Toggle Sidebar`,tabIndex:-1,onClick:n,title:`Toggle Sidebar`,className:(0,l.cn)(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex`,`after:absolute`,`after:inset-y-0`,`after:left-1/2`,`after:w-0.5`,`group-data-[side=left]:-right-4`,`group-data-[side=right]:left-0`,`in-data-[side=left]:cursor-w-resize`,`in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize`,`[[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`hover:after:bg-sidebar-border`,`hover:group-data-[collapsible=offcanvas]:bg-sidebar`,`group-data-[collapsible=offcanvas]:translate-x-0`,`group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,e),...t})}function E({className:e,children:t,...n}){return(0,d.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,l.cn)(`w-full`,`relative`,`flex flex-1 flex-col`,e),...n,children:[(0,d.jsx)(`div`,{className:`h-14 w-full`}),(0,d.jsx)(`div`,{className:(0,l.cn)(`flex-1 inset-shadow-sm`),children:t})]})}function D({className:e,...t}){return(0,d.jsx)(a.t,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,l.cn)(`bg-background h-8 w-full shadow-none`,e),...t})}function O({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function k({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function A({className:e,...t}){return(0,d.jsx)(i.t,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,l.cn)(`bg-sidebar-border mx-2 w-auto`,e),...t})}function j({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,l.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function M({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,l.cn)(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function N({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,l.cn)(`text-sidebar-foreground/70`,`ring-sidebar-ring 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`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function P({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-group-action`,"data-sidebar":`group-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`group-data-[collapsible=icon]:hidden`,e),...n})}function F({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,l.cn)(`w-full text-sm`,e),...t})}function I({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,l.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function L({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,l.cn)(`group/menu-item relative`,e),...t})}const R=(0,u.cva)([`peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:font-medium`,`data-[active=true]:text-sidebar-accent-foreground`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8!`,`group-data-[collapsible=icon]:p-2!`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`],{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`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))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function z({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:i=`default`,tooltip:a,className:o,...s}){let c=e?f.Slot.Slot:`button`,{isMobile:u,state:p}=x(),m=(0,d.jsx)(c,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":t,className:(0,l.cn)(R({variant:n,size:i}),o),...s});return a?(typeof a==`string`&&(a={children:a}),(0,d.jsxs)(r.t,{children:[(0,d.jsx)(r.i,{asChild:!0,children:m}),(0,d.jsx)(r.n,{side:`right`,align:`center`,hidden:p!==`collapsed`||u,...a})]})):m}function B({className:e,asChild:t=!1,showOnHover:n=!1,...r}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-menu-action`,"data-sidebar":`menu-action`,className:(0,l.cn)(`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`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,n&&`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,n&&`group-focus-within/menu-item:opacity-100`,n&&`group-hover/menu-item:opacity-100`,n&&`data-[state=open]:opacity-100 md:opacity-0`,e),...r})}function V({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-menu-badge`,"data-sidebar":`menu-badge`,className:(0,l.cn)(`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`,`peer-hover/menu-button:text-sidebar-accent-foreground`,`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function H({className:e,showIcon:t=!1,...r}){let i=(0,c.useMemo)(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return(0,d.jsxs)(`div`,{"data-slot":`sidebar-menu-skeleton`,"data-sidebar":`menu-skeleton`,className:(0,l.cn)(`flex h-8 items-center gap-2 rounded-md px-2`,e),...r,children:[t&&(0,d.jsx)(n.t,{className:`size-4 rounded-md`,"data-sidebar":`menu-skeleton-icon`}),(0,d.jsx)(n.t,{className:`h-4 max-w-(--skeleton-width) flex-1`,"data-sidebar":`menu-skeleton-text`,style:{"--skeleton-width":i}})]})}function U({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu-sub`,"data-sidebar":`menu-sub`,className:(0,l.cn)(`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`,`group-data-[collapsible=icon]:hidden`,e),...t})}function W({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-sub-item`,"data-sidebar":`menu-sub-item`,className:(0,l.cn)(`group/menu-sub-item relative`,e),...t})}function G({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,d.jsx)(e?f.Slot.Slot:`a`,{"data-slot":`sidebar-menu-sub-button`,"data-sidebar":`menu-sub-button`,"data-size":t,"data-active":n,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`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`,`[&>svg]:text-sidebar-accent-foreground`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:text-sidebar-accent-foreground`,t===`sm`&&`text-xs`,t===`md`&&`text-sm`,`group-data-[collapsible=icon]:hidden`,r),...i})}exports.Sidebar=C,exports.SidebarContent=j,exports.SidebarFooter=k,exports.SidebarGroup=M,exports.SidebarGroupAction=P,exports.SidebarGroupContent=F,exports.SidebarGroupLabel=N,exports.SidebarHeader=O,exports.SidebarInput=D,exports.SidebarInset=E,exports.SidebarMenu=I,exports.SidebarMenuAction=B,exports.SidebarMenuBadge=V,exports.SidebarMenuButton=z,exports.SidebarMenuItem=L,exports.SidebarMenuSkeleton=H,exports.SidebarMenuSub=U,exports.SidebarMenuSubButton=G,exports.SidebarMenuSubItem=W,exports.SidebarProvider=S,exports.SidebarRail=T,exports.SidebarSeparator=A,exports.SidebarTrigger=w,exports.useSidebar=x;
1
+ "use client";const e=require(`../chunk-Bmb41Sf3.cjs`);require(`../button.variants-tnhb123u.cjs`);const t=require(`../button-Bu4ejNOW.cjs`),n=require(`../skeleton-CHympz8k.cjs`),r=require(`../tooltip-DC6i1A25.cjs`),i=require(`../separator-jytY1CPq.cjs`),a=require(`../input-1ceJxxFI.cjs`),o=require(`../drawer-C3o6IEeq.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`),f=require(`radix-ui`),p=require(`@customafk/react-toolkit/hooks/useMobile`);const m=`sidebar_state`,h=3600*24*7,g=`16rem`,_=`18rem`,v=`3rem`,y=`b`,b=(0,c.createContext)(null);function x(){let e=(0,c.use)(b);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function S({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let u=(0,p.useIsMobile)(),[f,m]=(0,c.useState)(!1),[h,g]=(0,c.useState)(e),_=t??h,v=(0,c.useCallback)(e=>{let t=typeof e==`function`?e(_):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,_]),y=(0,c.useCallback)(()=>u?m(e=>!e):v(e=>!e),[u,v,m]);(0,c.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y]);let x=_?`expanded`:`collapsed`,S=(0,c.useMemo)(()=>({state:x,isMobile:u,toggleSidebar:y,open:_,setOpen:v,openMobile:f,setOpenMobile:m}),[x,_,v,u,f,m,y]);return(0,d.jsx)(b.Provider,{value:S,children:(0,d.jsx)(r.r,{delayDuration:0,children:(0,d.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,l.cn)(`group/sidebar-wrapper`,`has-data-[variant=inset]:bg-sidebar`,`flex h-dvh w-full`,i),...s,children:o})})})}function C({side:e=`left`,variant:t=`sidebar`,collapsible:n=`offcanvas`,className:r,children:i,...a}){let{isMobile:s,state:c,openMobile:u,setOpenMobile:f}=x();return n===`none`?(0,d.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,l.cn)(`bg-sidebar`,`text-sidebar-foreground`,`flex h-full w-(--sidebar-width) flex-col`,`border-r`,r),...a,children:i}):s?(0,d.jsx)(o.t,{open:u,onOpenChange:f,direction:`left`,children:(0,d.jsxs)(o.r,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden`,style:{"--sidebar-width":`18rem`},children:[(0,d.jsxs)(o.o,{className:`sr-only`,children:[(0,d.jsx)(o.r,{children:`Sidebar`}),(0,d.jsx)(o.i,{children:`Displays the mobile sidebar.`})]}),(0,d.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:i})]})}):(0,d.jsxs)(`aside`,{className:`group peer text-sidebar-foreground bg-card hidden md:block`,"data-state":c,"data-collapsible":c===`collapsed`?n:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,d.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,l.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-14 w-(--sidebar-width)`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,d.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,l.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`border-r`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0`,e===`left`&&`group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0`,e===`right`&&`group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,r),...a,children:(0,d.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,l.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:i})})]})}function w({className:e,onClick:n,...r}){let{toggleSidebar:i}=x();return(0,d.jsxs)(t.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,size:`icon`,className:(0,l.cn)(`size-10 rounded-full`,e),onClick:e=>{n?.(e),i()},...r,children:[(0,d.jsx)(s.MenuIcon,{className:`!size-6`}),(0,d.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]})}function T({className:e,...t}){let{toggleSidebar:n}=x();return(0,d.jsx)(`button`,{"data-sidebar":`rail`,"data-slot":`sidebar-rail`,"aria-label":`Toggle Sidebar`,tabIndex:-1,onClick:n,title:`Toggle Sidebar`,className:(0,l.cn)(`absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex`,`after:absolute`,`after:inset-y-0`,`after:left-1/2`,`after:w-0.5`,`group-data-[side=left]:-right-4`,`group-data-[side=right]:left-0`,`in-data-[side=left]:cursor-w-resize`,`in-data-[side=right]:cursor-e-resize`,`[[data-side=left][data-state=collapsed]_&]:cursor-e-resize`,`[[data-side=right][data-state=collapsed]_&]:cursor-w-resize`,`hover:after:bg-sidebar-border`,`hover:group-data-[collapsible=offcanvas]:bg-sidebar`,`group-data-[collapsible=offcanvas]:translate-x-0`,`group-data-[collapsible=offcanvas]:after:left-full`,`[[data-side=left][data-collapsible=offcanvas]_&]:-right-2`,`[[data-side=right][data-collapsible=offcanvas]_&]:-left-2`,e),...t})}function E({className:e,children:t,...n}){return(0,d.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,l.cn)(`w-full`,`relative`,`flex flex-1 flex-col`,e),...n,children:[(0,d.jsx)(`div`,{className:`h-14 w-full`}),(0,d.jsx)(`div`,{className:(0,l.cn)(`flex-1 inset-shadow-sm`),children:t})]})}function D({className:e,...t}){return(0,d.jsx)(a.t,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,l.cn)(`bg-background h-8 w-full shadow-none`,e),...t})}function O({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function k({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,l.cn)(`flex flex-col gap-2 p-2`,e),...t})}function A({className:e,...t}){return(0,d.jsx)(i.t,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,l.cn)(`bg-sidebar-border mx-2 w-auto`,e),...t})}function j({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,l.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function M({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,l.cn)(`relative flex w-full min-w-0 flex-col p-2`,e),...t})}function N({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,l.cn)(`text-sidebar-foreground/70`,`ring-sidebar-ring 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`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8`,`group-data-[collapsible=icon]:opacity-0`,e),...n})}function P({className:e,asChild:t=!1,...n}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-group-action`,"data-sidebar":`group-action`,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform`,`focus-visible:ring-2`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`group-data-[collapsible=icon]:hidden`,e),...n})}function F({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,l.cn)(`w-full text-sm`,e),...t})}function I({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,l.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function L({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,l.cn)(`group/menu-item relative`,e),...t})}const R=(0,u.cva)([`peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:font-medium`,`data-[active=true]:text-sidebar-accent-foreground`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-8!`,`group-data-[collapsible=icon]:p-2!`,`[&>span:last-child]:truncate`,`[&>svg]:size-4`,`[&>svg]:shrink-0`],{variants:{variant:{default:`hover:bg-sidebar-accent hover:text-sidebar-accent-foreground`,outline:`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))]`},size:{default:`h-8 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function z({asChild:e=!1,isActive:t=!1,variant:n=`default`,size:i=`default`,tooltip:a,className:o,...s}){let c=e?f.Slot.Slot:`button`,{isMobile:u,state:p}=x(),m=(0,d.jsx)(c,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":i,"data-active":t,className:(0,l.cn)(R({variant:n,size:i}),o),...s});return a?(typeof a==`string`&&(a={children:a}),(0,d.jsxs)(r.t,{children:[(0,d.jsx)(r.i,{asChild:!0,children:m}),(0,d.jsx)(r.n,{side:`right`,align:`center`,hidden:p!==`collapsed`||u,...a})]})):m}function B({className:e,asChild:t=!1,showOnHover:n=!1,...r}){return(0,d.jsx)(t?f.Slot.Slot:`button`,{"data-slot":`sidebar-menu-action`,"data-sidebar":`menu-action`,className:(0,l.cn)(`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`,`focus-visible:ring-2`,`[&>svg]:size-4`,`[&>svg]:shrink-0`,`after:absolute after:-inset-2 md:after:hidden`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,n&&`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,n&&`group-focus-within/menu-item:opacity-100`,n&&`group-hover/menu-item:opacity-100`,n&&`data-[state=open]:opacity-100 md:opacity-0`,e),...r})}function V({className:e,...t}){return(0,d.jsx)(`div`,{"data-slot":`sidebar-menu-badge`,"data-sidebar":`menu-badge`,className:(0,l.cn)(`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`,`peer-hover/menu-button:text-sidebar-accent-foreground`,`peer-data-[active=true]/menu-button:text-sidebar-accent-foreground`,`peer-data-[size=sm]/menu-button:top-1`,`peer-data-[size=default]/menu-button:top-1.5`,`peer-data-[size=lg]/menu-button:top-2.5`,`group-data-[collapsible=icon]:hidden`,e),...t})}function H({className:e,showIcon:t=!1,...r}){let i=(0,c.useMemo)(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return(0,d.jsxs)(`div`,{"data-slot":`sidebar-menu-skeleton`,"data-sidebar":`menu-skeleton`,className:(0,l.cn)(`flex h-8 items-center gap-2 rounded-md px-2`,e),...r,children:[t&&(0,d.jsx)(n.t,{className:`size-4 rounded-md`,"data-sidebar":`menu-skeleton-icon`}),(0,d.jsx)(n.t,{className:`h-4 max-w-(--skeleton-width) flex-1`,"data-sidebar":`menu-skeleton-text`,style:{"--skeleton-width":i}})]})}function U({className:e,...t}){return(0,d.jsx)(`ul`,{"data-slot":`sidebar-menu-sub`,"data-sidebar":`menu-sub`,className:(0,l.cn)(`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`,`group-data-[collapsible=icon]:hidden`,e),...t})}function W({className:e,...t}){return(0,d.jsx)(`li`,{"data-slot":`sidebar-menu-sub-item`,"data-sidebar":`menu-sub-item`,className:(0,l.cn)(`group/menu-sub-item relative`,e),...t})}function G({asChild:e=!1,size:t=`md`,isActive:n=!1,className:r,...i}){return(0,d.jsx)(e?f.Slot.Slot:`a`,{"data-slot":`sidebar-menu-sub-button`,"data-sidebar":`menu-sub-button`,"data-size":t,"data-active":n,className:(0,l.cn)(`text-sidebar-foreground ring-sidebar-ring`,`flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`focus-visible:ring-2`,`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`,`[&>svg]:text-sidebar-accent-foreground`,`data-[active=true]:bg-sidebar-accent`,`data-[active=true]:text-sidebar-accent-foreground`,t===`sm`&&`text-xs`,t===`md`&&`text-sm`,`group-data-[collapsible=icon]:hidden`,r),...i})}exports.Sidebar=C,exports.SidebarContent=j,exports.SidebarFooter=k,exports.SidebarGroup=M,exports.SidebarGroupAction=P,exports.SidebarGroupContent=F,exports.SidebarGroupLabel=N,exports.SidebarHeader=O,exports.SidebarInput=D,exports.SidebarInset=E,exports.SidebarMenu=I,exports.SidebarMenuAction=B,exports.SidebarMenuBadge=V,exports.SidebarMenuButton=z,exports.SidebarMenuItem=L,exports.SidebarMenuSkeleton=H,exports.SidebarMenuSub=U,exports.SidebarMenuSubButton=G,exports.SidebarMenuSubItem=W,exports.SidebarProvider=S,exports.SidebarRail=T,exports.SidebarSeparator=A,exports.SidebarTrigger=w,exports.useSidebar=x;
2
2
  //# sourceMappingURL=sidebar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.cjs","names":["open","TooltipProvider","Drawer","DrawerContent","DrawerHeader","DrawerDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../../packages/components/ui/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader } from './drawer';\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 = createContext<SidebarContextProps | null>(null);\n\n/**\n * Hook that returns the current sidebar state and control methods from the nearest SidebarProvider.\n * Must be used within a `<SidebarProvider>`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state, mobile drawer, keyboard shortcut (Ctrl+B), and CSS variables for all child Sidebar components.\n *\n * @example\n * ```tsx\n * import {\n * SidebarProvider, Sidebar, SidebarHeader, SidebarContent,\n * SidebarMenu, SidebarMenuItem, SidebarMenuButton,\n * SidebarInset, SidebarTrigger,\n * } from '@customafk/lunas-ui/ui/sidebar';\n *\n * <SidebarProvider>\n * <Sidebar>\n * <SidebarHeader>Logo</SidebarHeader>\n * <SidebarContent>\n * <SidebarMenu>\n * <SidebarMenuItem>\n * <SidebarMenuButton asChild isActive>\n * <a href=\"/dashboard\">Dashboard</a>\n * </SidebarMenuButton>\n * </SidebarMenuItem>\n * </SidebarMenu>\n * </SidebarContent>\n * </Sidebar>\n * <SidebarInset>\n * <SidebarTrigger />\n * <main>Page content</main>\n * </SidebarInset>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar starts expanded. @default true */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = 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] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = 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 = 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 useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\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 = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\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('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.\n *\n * @param side - Which edge of the viewport the sidebar attaches to. @default `'left'`\n * @param variant - Visual style: `'sidebar'` (default), `'floating'`, or `'inset'`.\n * @param collapsible - Collapse mode: `'offcanvas'` (slides out), `'icon'` (icon-only), or `'none'` (always visible).\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', 'border-r', className)}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Drawer open={openMobile} onOpenChange={setOpenMobile} direction=\"left\">\n <DrawerContent\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 {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n // side={side}\n >\n <DrawerHeader className=\"sr-only\">\n <DrawerContent>Sidebar</DrawerContent>\n <DrawerDescription>Displays the mobile sidebar.</DrawerDescription>\n </DrawerHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\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 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-14 w-(--sidebar-width)',\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 )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'border-r',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0',\n side === 'left' && 'group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0',\n side === 'right' && '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 className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\n/** Icon button that toggles the sidebar open/collapsed state. */\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\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 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute',\n 'after:inset-y-0',\n 'after:left-1/2',\n 'after:w-0.5',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n '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\n/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('w-full', 'relative', 'flex flex-1 flex-col', className)} {...props}>\n <div className=\"h-14 w-full\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n );\n}\n\n/** A compact search input styled for use inside a sidebar header. */\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('bg-background h-8 w-full shadow-none', className)} {...props} />;\n}\n\n/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** A horizontal Separator styled for use between sections inside a Sidebar. */\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />;\n}\n\n/** Scrollable middle section of the Sidebar that grows to fill available space. */\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\n/** A logical section within SidebarContent, grouping related SidebarMenu items. */\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />;\n}\n\n/**\n * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Action button (e.g. \"Add\") positioned absolutely at the top-right of a SidebarGroup label.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\n/** Vertical list `<ul>` that holds SidebarMenuItems. */\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\n/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-accent-foreground',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8!',\n 'group-data-[collapsible=icon]:p-2!',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n '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))]',\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\n/**\n * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.\n *\n * @param asChild - When true, renders as the child element via Radix Slot (useful for router links).\n * @param isActive - Marks the button as the currently active route.\n * @param tooltip - A string or TooltipContent props shown when the sidebar is collapsed to icon-only mode.\n * @param variant - `'default'` or `'outline'`.\n * @param size - `'default'`, `'sm'`, or `'lg'`.\n */\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\n/**\n * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param showOnHover - When true, the action is only visible on hover or when the menu item is focused.\n */\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\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 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n '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',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.\n *\n * @param showIcon - When true, also renders a small square skeleton for the icon slot.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <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}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\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\n/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\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 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** A single `<li>` entry inside a SidebarMenuSub. */\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\n/**\n * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param size - `'sm'` for smaller text, `'md'` for normal text.\n * @param isActive - Highlights the button as the currently active sub-route.\n */\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\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 // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.cjs","names":["open","TooltipProvider","Drawer","DrawerContent","DrawerHeader","DrawerDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../../packages/components/ui/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader } from './drawer';\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 = createContext<SidebarContextProps | null>(null);\n\n/**\n * Hook that returns the current sidebar state and control methods from the nearest SidebarProvider.\n * Must be used within a `<SidebarProvider>`.\n */\nfunction useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Context provider that manages sidebar open/collapsed state, mobile drawer, keyboard shortcut (Ctrl+B), and CSS variables for all child Sidebar components.\n *\n * @example\n * ```tsx\n * import {\n * SidebarProvider, Sidebar, SidebarHeader, SidebarContent,\n * SidebarMenu, SidebarMenuItem, SidebarMenuButton,\n * SidebarInset, SidebarTrigger,\n * } from '@customafk/lunas-ui/ui/sidebar';\n *\n * <SidebarProvider>\n * <Sidebar>\n * <SidebarHeader>Logo</SidebarHeader>\n * <SidebarContent>\n * <SidebarMenu>\n * <SidebarMenuItem>\n * <SidebarMenuButton asChild isActive>\n * <a href=\"/dashboard\">Dashboard</a>\n * </SidebarMenuButton>\n * </SidebarMenuItem>\n * </SidebarMenu>\n * </SidebarContent>\n * </Sidebar>\n * <SidebarInset>\n * <SidebarTrigger />\n * <main>Page content</main>\n * </SidebarInset>\n * </SidebarProvider>\n * ```\n */\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Whether the sidebar starts expanded. @default true */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = 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] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = 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 = 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 useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\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 = useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\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('group/sidebar-wrapper', 'has-data-[variant=inset]:bg-sidebar', 'flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.\n *\n * @param side - Which edge of the viewport the sidebar attaches to. @default `'left'`\n * @param variant - Visual style: `'sidebar'` (default), `'floating'`, or `'inset'`.\n * @param collapsible - Collapse mode: `'offcanvas'` (slides out), `'icon'` (icon-only), or `'none'` (always visible).\n */\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn('bg-sidebar', 'text-sidebar-foreground', 'flex h-full w-(--sidebar-width) flex-col', 'border-r', className)}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Drawer open={openMobile} onOpenChange={setOpenMobile} direction=\"left\">\n <DrawerContent\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 {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n // side={side}\n >\n <DrawerHeader className=\"sr-only\">\n <DrawerContent>Sidebar</DrawerContent>\n <DrawerDescription>Displays the mobile sidebar.</DrawerDescription>\n </DrawerHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\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 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-14 w-(--sidebar-width)',\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 )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'border-r',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0',\n side === 'left' && 'group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0',\n side === 'right' && '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 className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\n/** Icon button that toggles the sidebar open/collapsed state. */\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n/** Invisible drag-rail along the sidebar edge that toggles collapse on click. */\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\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 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear sm:flex',\n 'after:absolute',\n 'after:inset-y-0',\n 'after:left-1/2',\n 'after:w-0.5',\n 'group-data-[side=left]:-right-4',\n 'group-data-[side=right]:left-0',\n 'in-data-[side=left]:cursor-w-resize',\n 'in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize',\n '[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:after:bg-sidebar-border',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n '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\n/** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('w-full', 'relative', 'flex flex-1 flex-col', className)} {...props}>\n <div className=\"h-14 w-full\" />\n <div className={cn('flex-1 inset-shadow-sm')}>{children}</div>\n </main>\n );\n}\n\n/** A compact search input styled for use inside a sidebar header. */\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('bg-background h-8 w-full shadow-none', className)} {...props} />;\n}\n\n/** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** Sticky bottom section of the Sidebar, typically holding user account info or settings. */\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\n/** A horizontal Separator styled for use between sections inside a Sidebar. */\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('bg-sidebar-border mx-2 w-auto', className)} {...props} />;\n}\n\n/** Scrollable middle section of the Sidebar that grows to fill available space. */\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\n/** A logical section within SidebarContent, grouping related SidebarMenu items. */\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col p-2', className)} {...props} />;\n}\n\n/**\n * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70',\n 'ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8',\n 'group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Action button (e.g. \"Add\") positioned absolutely at the top-right of a SidebarGroup label.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n */\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\n/** Vertical list `<ul>` that holds SidebarMenuItems. */\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\n/** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:font-medium',\n 'data-[active=true]:text-sidebar-accent-foreground',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-8!',\n 'group-data-[collapsible=icon]:p-2!',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n '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))]',\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\n/**\n * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.\n *\n * @param asChild - When true, renders as the child element via Radix Slot (useful for router links).\n * @param isActive - Marks the button as the currently active route.\n * @param tooltip - A string or TooltipContent props shown when the sidebar is collapsed to icon-only mode.\n * @param variant - `'default'` or `'outline'`.\n * @param size - `'default'`, `'sm'`, or `'lg'`.\n */\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\n/**\n * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param showOnHover - When true, the action is only visible on hover or when the menu item is focused.\n */\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\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 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover && 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n showOnHover && 'group-focus-within/menu-item:opacity-100',\n showOnHover && 'group-hover/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n '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',\n 'peer-hover/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.\n *\n * @param showIcon - When true, also renders a small square skeleton for the icon slot.\n */\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <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}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\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\n/** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\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 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/** A single `<li>` entry inside a SidebarMenuSub. */\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\n/**\n * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.\n *\n * @param asChild - When true, renders as the child element via Radix Slot.\n * @param size - `'sm'` for smaller text, `'md'` for normal text.\n * @param isActive - Highlights the button as the currently active sub-route.\n */\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring',\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n '[&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent',\n 'data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\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 // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { t as Button } from "../button-C7IuBgb_.cjs";
1
+ import { t as Button } from "../button-BHCmEoty.cjs";
2
2
  import { Separator } from "./separator.cjs";
3
3
  import { TooltipContent } from "./tooltip.cjs";
4
- import { t as Input } from "../input-B9XN8dsE.cjs";
5
- import * as react257 from "react";
6
- import * as class_variance_authority_types9 from "class-variance-authority/types";
4
+ import { t as Input } from "../input-B4ZV1tKO.cjs";
5
+ import * as react273 from "react";
6
+ import * as class_variance_authority_types11 from "class-variance-authority/types";
7
7
  import { VariantProps } from "class-variance-authority";
8
8
 
9
9
  //#region packages/components/ui/sidebar.d.ts
@@ -67,7 +67,7 @@ declare function SidebarProvider({
67
67
  open?: boolean;
68
68
  /** Callback fired when the open state changes. */
69
69
  onOpenChange?: (open: boolean) => void;
70
- }): react257.JSX.Element;
70
+ }): react273.JSX.Element;
71
71
  /**
72
72
  * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.
73
73
  *
@@ -86,54 +86,54 @@ declare function Sidebar({
86
86
  side?: 'left' | 'right';
87
87
  variant?: 'sidebar' | 'floating' | 'inset';
88
88
  collapsible?: 'offcanvas' | 'icon' | 'none';
89
- }): react257.JSX.Element;
89
+ }): react273.JSX.Element;
90
90
  /** Icon button that toggles the sidebar open/collapsed state. */
91
91
  declare function SidebarTrigger({
92
92
  className,
93
93
  onClick,
94
94
  ...props
95
- }: React.ComponentProps<typeof Button>): react257.JSX.Element;
95
+ }: React.ComponentProps<typeof Button>): react273.JSX.Element;
96
96
  /** Invisible drag-rail along the sidebar edge that toggles collapse on click. */
97
97
  declare function SidebarRail({
98
98
  className,
99
99
  ...props
100
- }: React.ComponentProps<'button'>): react257.JSX.Element;
100
+ }: React.ComponentProps<'button'>): react273.JSX.Element;
101
101
  /** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */
102
102
  declare function SidebarInset({
103
103
  className,
104
104
  children,
105
105
  ...props
106
- }: React.ComponentProps<'main'>): react257.JSX.Element;
106
+ }: React.ComponentProps<'main'>): react273.JSX.Element;
107
107
  /** A compact search input styled for use inside a sidebar header. */
108
108
  declare function SidebarInput({
109
109
  className,
110
110
  ...props
111
- }: React.ComponentProps<typeof Input>): react257.JSX.Element;
111
+ }: React.ComponentProps<typeof Input>): react273.JSX.Element;
112
112
  /** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */
113
113
  declare function SidebarHeader({
114
114
  className,
115
115
  ...props
116
- }: React.ComponentProps<'div'>): react257.JSX.Element;
116
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
117
117
  /** Sticky bottom section of the Sidebar, typically holding user account info or settings. */
118
118
  declare function SidebarFooter({
119
119
  className,
120
120
  ...props
121
- }: React.ComponentProps<'div'>): react257.JSX.Element;
121
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
122
122
  /** A horizontal Separator styled for use between sections inside a Sidebar. */
123
123
  declare function SidebarSeparator({
124
124
  className,
125
125
  ...props
126
- }: React.ComponentProps<typeof Separator>): react257.JSX.Element;
126
+ }: React.ComponentProps<typeof Separator>): react273.JSX.Element;
127
127
  /** Scrollable middle section of the Sidebar that grows to fill available space. */
128
128
  declare function SidebarContent({
129
129
  className,
130
130
  ...props
131
- }: React.ComponentProps<'div'>): react257.JSX.Element;
131
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
132
132
  /** A logical section within SidebarContent, grouping related SidebarMenu items. */
133
133
  declare function SidebarGroup({
134
134
  className,
135
135
  ...props
136
- }: React.ComponentProps<'div'>): react257.JSX.Element;
136
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
137
137
  /**
138
138
  * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.
139
139
  *
@@ -145,7 +145,7 @@ declare function SidebarGroupLabel({
145
145
  ...props
146
146
  }: React.ComponentProps<'div'> & {
147
147
  asChild?: boolean;
148
- }): react257.JSX.Element;
148
+ }): react273.JSX.Element;
149
149
  /**
150
150
  * Action button (e.g. "Add") positioned absolutely at the top-right of a SidebarGroup label.
151
151
  *
@@ -157,26 +157,26 @@ declare function SidebarGroupAction({
157
157
  ...props
158
158
  }: React.ComponentProps<'button'> & {
159
159
  asChild?: boolean;
160
- }): react257.JSX.Element;
160
+ }): react273.JSX.Element;
161
161
  /** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */
162
162
  declare function SidebarGroupContent({
163
163
  className,
164
164
  ...props
165
- }: React.ComponentProps<'div'>): react257.JSX.Element;
165
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
166
166
  /** Vertical list `<ul>` that holds SidebarMenuItems. */
167
167
  declare function SidebarMenu({
168
168
  className,
169
169
  ...props
170
- }: React.ComponentProps<'ul'>): react257.JSX.Element;
170
+ }: React.ComponentProps<'ul'>): react273.JSX.Element;
171
171
  /** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */
172
172
  declare function SidebarMenuItem({
173
173
  className,
174
174
  ...props
175
- }: React.ComponentProps<'li'>): react257.JSX.Element;
175
+ }: React.ComponentProps<'li'>): react273.JSX.Element;
176
176
  declare const sidebarMenuButtonVariants: (props?: ({
177
177
  variant?: "default" | "outline" | null | undefined;
178
178
  size?: "sm" | "lg" | "default" | null | undefined;
179
- } & class_variance_authority_types9.ClassProp) | undefined) => string;
179
+ } & class_variance_authority_types11.ClassProp) | undefined) => string;
180
180
  /**
181
181
  * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.
182
182
  *
@@ -198,7 +198,7 @@ declare function SidebarMenuButton({
198
198
  asChild?: boolean;
199
199
  isActive?: boolean;
200
200
  tooltip?: string | React.ComponentProps<typeof TooltipContent>;
201
- } & VariantProps<typeof sidebarMenuButtonVariants>): react257.JSX.Element;
201
+ } & VariantProps<typeof sidebarMenuButtonVariants>): react273.JSX.Element;
202
202
  /**
203
203
  * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.
204
204
  *
@@ -213,12 +213,12 @@ declare function SidebarMenuAction({
213
213
  }: React.ComponentProps<'button'> & {
214
214
  asChild?: boolean;
215
215
  showOnHover?: boolean;
216
- }): react257.JSX.Element;
216
+ }): react273.JSX.Element;
217
217
  /** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */
218
218
  declare function SidebarMenuBadge({
219
219
  className,
220
220
  ...props
221
- }: React.ComponentProps<'div'>): react257.JSX.Element;
221
+ }: React.ComponentProps<'div'>): react273.JSX.Element;
222
222
  /**
223
223
  * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.
224
224
  *
@@ -230,17 +230,17 @@ declare function SidebarMenuSkeleton({
230
230
  ...props
231
231
  }: React.ComponentProps<'div'> & {
232
232
  showIcon?: boolean;
233
- }): react257.JSX.Element;
233
+ }): react273.JSX.Element;
234
234
  /** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */
235
235
  declare function SidebarMenuSub({
236
236
  className,
237
237
  ...props
238
- }: React.ComponentProps<'ul'>): react257.JSX.Element;
238
+ }: React.ComponentProps<'ul'>): react273.JSX.Element;
239
239
  /** A single `<li>` entry inside a SidebarMenuSub. */
240
240
  declare function SidebarMenuSubItem({
241
241
  className,
242
242
  ...props
243
- }: React.ComponentProps<'li'>): react257.JSX.Element;
243
+ }: React.ComponentProps<'li'>): react273.JSX.Element;
244
244
  /**
245
245
  * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.
246
246
  *
@@ -258,7 +258,7 @@ declare function SidebarMenuSubButton({
258
258
  asChild?: boolean;
259
259
  size?: 'sm' | 'md';
260
260
  isActive?: boolean;
261
- }): react257.JSX.Element;
261
+ }): react273.JSX.Element;
262
262
  //#endregion
263
263
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
264
264
  //# sourceMappingURL=sidebar.d.cts.map
@@ -1,10 +1,10 @@
1
- import { t as Button } from "../button-u7M3BQF5.mjs";
1
+ import { t as Button } from "../button-CPYKtYVF.mjs";
2
2
  import { Separator } from "./separator.mjs";
3
3
  import { TooltipContent } from "./tooltip.mjs";
4
- import { t as Input } from "../input-ZL65yvYU.mjs";
5
- import * as react276 from "react";
4
+ import { t as Input } from "../input-Che86SWz.mjs";
5
+ import * as react290 from "react";
6
6
  import { VariantProps } from "class-variance-authority";
7
- import * as class_variance_authority_types12 from "class-variance-authority/types";
7
+ import * as class_variance_authority_types11 from "class-variance-authority/types";
8
8
 
9
9
  //#region packages/components/ui/sidebar.d.ts
10
10
  type SidebarContextProps = {
@@ -67,7 +67,7 @@ declare function SidebarProvider({
67
67
  open?: boolean;
68
68
  /** Callback fired when the open state changes. */
69
69
  onOpenChange?: (open: boolean) => void;
70
- }): react276.JSX.Element;
70
+ }): react290.JSX.Element;
71
71
  /**
72
72
  * The main sidebar panel; renders as a Drawer on mobile and a fixed `<aside>` on desktop with optional collapse behavior.
73
73
  *
@@ -86,54 +86,54 @@ declare function Sidebar({
86
86
  side?: 'left' | 'right';
87
87
  variant?: 'sidebar' | 'floating' | 'inset';
88
88
  collapsible?: 'offcanvas' | 'icon' | 'none';
89
- }): react276.JSX.Element;
89
+ }): react290.JSX.Element;
90
90
  /** Icon button that toggles the sidebar open/collapsed state. */
91
91
  declare function SidebarTrigger({
92
92
  className,
93
93
  onClick,
94
94
  ...props
95
- }: React.ComponentProps<typeof Button>): react276.JSX.Element;
95
+ }: React.ComponentProps<typeof Button>): react290.JSX.Element;
96
96
  /** Invisible drag-rail along the sidebar edge that toggles collapse on click. */
97
97
  declare function SidebarRail({
98
98
  className,
99
99
  ...props
100
- }: React.ComponentProps<'button'>): react276.JSX.Element;
100
+ }: React.ComponentProps<'button'>): react290.JSX.Element;
101
101
  /** The main content area that sits beside the Sidebar; expands to fill the remaining viewport width. */
102
102
  declare function SidebarInset({
103
103
  className,
104
104
  children,
105
105
  ...props
106
- }: React.ComponentProps<'main'>): react276.JSX.Element;
106
+ }: React.ComponentProps<'main'>): react290.JSX.Element;
107
107
  /** A compact search input styled for use inside a sidebar header. */
108
108
  declare function SidebarInput({
109
109
  className,
110
110
  ...props
111
- }: React.ComponentProps<typeof Input>): react276.JSX.Element;
111
+ }: React.ComponentProps<typeof Input>): react290.JSX.Element;
112
112
  /** Sticky top section of the Sidebar, typically holding a logo or workspace switcher. */
113
113
  declare function SidebarHeader({
114
114
  className,
115
115
  ...props
116
- }: React.ComponentProps<'div'>): react276.JSX.Element;
116
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
117
117
  /** Sticky bottom section of the Sidebar, typically holding user account info or settings. */
118
118
  declare function SidebarFooter({
119
119
  className,
120
120
  ...props
121
- }: React.ComponentProps<'div'>): react276.JSX.Element;
121
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
122
122
  /** A horizontal Separator styled for use between sections inside a Sidebar. */
123
123
  declare function SidebarSeparator({
124
124
  className,
125
125
  ...props
126
- }: React.ComponentProps<typeof Separator>): react276.JSX.Element;
126
+ }: React.ComponentProps<typeof Separator>): react290.JSX.Element;
127
127
  /** Scrollable middle section of the Sidebar that grows to fill available space. */
128
128
  declare function SidebarContent({
129
129
  className,
130
130
  ...props
131
- }: React.ComponentProps<'div'>): react276.JSX.Element;
131
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
132
132
  /** A logical section within SidebarContent, grouping related SidebarMenu items. */
133
133
  declare function SidebarGroup({
134
134
  className,
135
135
  ...props
136
- }: React.ComponentProps<'div'>): react276.JSX.Element;
136
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
137
137
  /**
138
138
  * Small all-caps heading label at the top of a SidebarGroup; hidden automatically in icon-only collapse mode.
139
139
  *
@@ -145,7 +145,7 @@ declare function SidebarGroupLabel({
145
145
  ...props
146
146
  }: React.ComponentProps<'div'> & {
147
147
  asChild?: boolean;
148
- }): react276.JSX.Element;
148
+ }): react290.JSX.Element;
149
149
  /**
150
150
  * Action button (e.g. "Add") positioned absolutely at the top-right of a SidebarGroup label.
151
151
  *
@@ -157,26 +157,26 @@ declare function SidebarGroupAction({
157
157
  ...props
158
158
  }: React.ComponentProps<'button'> & {
159
159
  asChild?: boolean;
160
- }): react276.JSX.Element;
160
+ }): react290.JSX.Element;
161
161
  /** The content area of a SidebarGroup, typically wrapping a SidebarMenu. */
162
162
  declare function SidebarGroupContent({
163
163
  className,
164
164
  ...props
165
- }: React.ComponentProps<'div'>): react276.JSX.Element;
165
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
166
166
  /** Vertical list `<ul>` that holds SidebarMenuItems. */
167
167
  declare function SidebarMenu({
168
168
  className,
169
169
  ...props
170
- }: React.ComponentProps<'ul'>): react276.JSX.Element;
170
+ }: React.ComponentProps<'ul'>): react290.JSX.Element;
171
171
  /** A single `<li>` entry in a SidebarMenu that may include a button, action, and badge. */
172
172
  declare function SidebarMenuItem({
173
173
  className,
174
174
  ...props
175
- }: React.ComponentProps<'li'>): react276.JSX.Element;
175
+ }: React.ComponentProps<'li'>): react290.JSX.Element;
176
176
  declare const sidebarMenuButtonVariants: (props?: ({
177
177
  variant?: "default" | "outline" | null | undefined;
178
178
  size?: "sm" | "lg" | "default" | null | undefined;
179
- } & class_variance_authority_types12.ClassProp) | undefined) => string;
179
+ } & class_variance_authority_types11.ClassProp) | undefined) => string;
180
180
  /**
181
181
  * The primary clickable button within a SidebarMenuItem; collapses to an icon-only view when the sidebar is in icon-collapse mode and optionally shows a tooltip.
182
182
  *
@@ -198,7 +198,7 @@ declare function SidebarMenuButton({
198
198
  asChild?: boolean;
199
199
  isActive?: boolean;
200
200
  tooltip?: string | React.ComponentProps<typeof TooltipContent>;
201
- } & VariantProps<typeof sidebarMenuButtonVariants>): react276.JSX.Element;
201
+ } & VariantProps<typeof sidebarMenuButtonVariants>): react290.JSX.Element;
202
202
  /**
203
203
  * An icon action button (e.g. more-options) positioned at the right of a SidebarMenuButton.
204
204
  *
@@ -213,12 +213,12 @@ declare function SidebarMenuAction({
213
213
  }: React.ComponentProps<'button'> & {
214
214
  asChild?: boolean;
215
215
  showOnHover?: boolean;
216
- }): react276.JSX.Element;
216
+ }): react290.JSX.Element;
217
217
  /** Small numeric or text badge rendered at the right of a SidebarMenuButton (e.g. unread count). */
218
218
  declare function SidebarMenuBadge({
219
219
  className,
220
220
  ...props
221
- }: React.ComponentProps<'div'>): react276.JSX.Element;
221
+ }: React.ComponentProps<'div'>): react290.JSX.Element;
222
222
  /**
223
223
  * Placeholder skeleton row rendered in place of a SidebarMenuButton while menu items are loading.
224
224
  *
@@ -230,17 +230,17 @@ declare function SidebarMenuSkeleton({
230
230
  ...props
231
231
  }: React.ComponentProps<'div'> & {
232
232
  showIcon?: boolean;
233
- }): react276.JSX.Element;
233
+ }): react290.JSX.Element;
234
234
  /** Indented nested list of SidebarMenuSubItems rendered below a parent SidebarMenuItem. */
235
235
  declare function SidebarMenuSub({
236
236
  className,
237
237
  ...props
238
- }: React.ComponentProps<'ul'>): react276.JSX.Element;
238
+ }: React.ComponentProps<'ul'>): react290.JSX.Element;
239
239
  /** A single `<li>` entry inside a SidebarMenuSub. */
240
240
  declare function SidebarMenuSubItem({
241
241
  className,
242
242
  ...props
243
- }: React.ComponentProps<'li'>): react276.JSX.Element;
243
+ }: React.ComponentProps<'li'>): react290.JSX.Element;
244
244
  /**
245
245
  * The clickable link/button for a nested sub-menu entry inside a SidebarMenuSub.
246
246
  *
@@ -258,7 +258,7 @@ declare function SidebarMenuSubButton({
258
258
  asChild?: boolean;
259
259
  size?: 'sm' | 'md';
260
260
  isActive?: boolean;
261
- }): react276.JSX.Element;
261
+ }): react290.JSX.Element;
262
262
  //#endregion
263
263
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
264
264
  //# sourceMappingURL=sidebar.d.mts.map