@fabio.caffarello/react-design-system 3.8.0 → 3.9.0

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 (411) hide show
  1. package/README.md +2 -1
  2. package/dist/granular/index.js +445 -0
  3. package/dist/granular/index.js.map +1 -0
  4. package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
  5. package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
  6. package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
  7. package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
  8. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
  9. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
  10. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
  11. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
  12. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
  13. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
  14. package/dist/granular/ui/components/Card/Card.js +113 -0
  15. package/dist/granular/ui/components/Card/Card.js.map +1 -0
  16. package/dist/granular/ui/components/Card/CardActions.js +51 -0
  17. package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
  18. package/dist/granular/ui/components/Card/CardBody.js +32 -0
  19. package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
  20. package/dist/granular/ui/components/Card/CardHeader.js +47 -0
  21. package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
  22. package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
  23. package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
  24. package/dist/granular/ui/components/Card/CardTitle.js +61 -0
  25. package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
  26. package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
  27. package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
  28. package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
  29. package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
  30. package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
  31. package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
  32. package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
  33. package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
  34. package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
  35. package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
  36. package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
  37. package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
  38. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
  39. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
  40. package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
  41. package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
  42. package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
  43. package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
  44. package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
  45. package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
  46. package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
  47. package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
  48. package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
  49. package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
  50. package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
  51. package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
  52. package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
  53. package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
  54. package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
  55. package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
  56. package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
  57. package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
  58. package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
  59. package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
  60. package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
  61. package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
  62. package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
  63. package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
  64. package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
  65. package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
  66. package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
  67. package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
  68. package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
  69. package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
  70. package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
  71. package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
  72. package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
  73. package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
  74. package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
  75. package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
  76. package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
  77. package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
  78. package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
  79. package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
  80. package/dist/granular/ui/components/Form/Form.js +184 -0
  81. package/dist/granular/ui/components/Form/Form.js.map +1 -0
  82. package/dist/granular/ui/components/Form/FormContext.js +19 -0
  83. package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
  84. package/dist/granular/ui/components/Form/FormField.js +66 -0
  85. package/dist/granular/ui/components/Form/FormField.js.map +1 -0
  86. package/dist/granular/ui/components/Form/FormProvider.js +17 -0
  87. package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
  88. package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
  89. package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
  90. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
  91. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
  92. package/dist/granular/ui/components/Header/Header.js +98 -0
  93. package/dist/granular/ui/components/Header/Header.js.map +1 -0
  94. package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
  95. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
  96. package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
  97. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
  98. package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
  99. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
  100. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
  101. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
  102. package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
  103. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
  104. package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
  105. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
  106. package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
  107. package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
  108. package/dist/granular/ui/components/Menu/Menu.js +45 -0
  109. package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
  110. package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
  111. package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
  112. package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
  113. package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
  114. package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
  115. package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
  116. package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
  117. package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
  118. package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
  119. package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
  120. package/dist/granular/ui/components/Modal/Modal.js +171 -0
  121. package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
  122. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
  123. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
  124. package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
  125. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
  126. package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
  127. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
  128. package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
  129. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
  130. package/dist/granular/ui/components/Popover/Popover.js +171 -0
  131. package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
  132. package/dist/granular/ui/components/Rating/Rating.js +110 -0
  133. package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
  134. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
  135. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
  136. package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
  137. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
  138. package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
  139. package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
  140. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
  141. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
  142. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
  143. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
  144. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
  145. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
  146. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
  147. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
  148. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
  149. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
  150. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
  151. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
  152. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
  153. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
  154. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
  155. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
  156. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
  157. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
  158. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
  159. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
  160. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
  161. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
  162. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
  163. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
  164. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
  165. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
  166. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
  167. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
  168. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
  169. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
  170. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
  171. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
  172. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
  173. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
  174. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
  175. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
  176. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
  177. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
  178. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
  179. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
  180. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
  181. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
  182. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
  183. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
  184. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
  185. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
  186. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
  187. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
  188. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
  189. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
  190. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
  191. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
  192. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
  193. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
  194. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
  195. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
  196. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
  197. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
  198. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
  199. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
  200. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
  201. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
  202. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
  203. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
  204. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
  205. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
  206. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
  207. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
  208. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
  209. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
  210. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
  211. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
  212. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
  213. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
  214. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
  215. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
  216. package/dist/granular/ui/components/Stat/Stat.js +84 -0
  217. package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
  218. package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
  219. package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
  220. package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
  221. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
  222. package/dist/granular/ui/components/Table/Table.js +162 -0
  223. package/dist/granular/ui/components/Table/Table.js.map +1 -0
  224. package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
  225. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
  226. package/dist/granular/ui/components/Table/TableActions.js +44 -0
  227. package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
  228. package/dist/granular/ui/components/Table/TableBody.js +134 -0
  229. package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
  230. package/dist/granular/ui/components/Table/TableCell.js +40 -0
  231. package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
  232. package/dist/granular/ui/components/Table/TableContext.js +19 -0
  233. package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
  234. package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
  235. package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
  236. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
  237. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
  238. package/dist/granular/ui/components/Table/TableFilters.js +48 -0
  239. package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
  240. package/dist/granular/ui/components/Table/TableHeader.js +45 -0
  241. package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
  242. package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
  243. package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
  244. package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
  245. package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
  246. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
  247. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
  248. package/dist/granular/ui/components/Table/TablePagination.js +56 -0
  249. package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
  250. package/dist/granular/ui/components/Table/TableProvider.js +244 -0
  251. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
  252. package/dist/granular/ui/components/Table/TableRow.js +95 -0
  253. package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
  254. package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
  255. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
  256. package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
  257. package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
  258. package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
  259. package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
  260. package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
  261. package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
  262. package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
  263. package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
  264. package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
  265. package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
  266. package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
  267. package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
  268. package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
  269. package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
  270. package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
  271. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
  272. package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
  273. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
  274. package/dist/granular/ui/components/Toast/Toast.js +159 -0
  275. package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
  276. package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
  277. package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
  278. package/dist/granular/ui/components/Toast/useToast.js +64 -0
  279. package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
  280. package/dist/granular/ui/hooks/createGenericContext.js +27 -0
  281. package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
  282. package/dist/granular/ui/hooks/focusable.js +14 -0
  283. package/dist/granular/ui/hooks/focusable.js.map +1 -0
  284. package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
  285. package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
  286. package/dist/granular/ui/hooks/useCollapsible.js +37 -0
  287. package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
  288. package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
  289. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
  290. package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
  291. package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
  292. package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
  293. package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
  294. package/dist/granular/ui/layouts/Container/Container.js +73 -0
  295. package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
  296. package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
  297. package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
  298. package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
  299. package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
  300. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
  301. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
  302. package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
  303. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
  304. package/dist/granular/ui/primitives/Button/Button.js +288 -0
  305. package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
  306. package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
  307. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
  308. package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
  309. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
  310. package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
  311. package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
  312. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
  313. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
  314. package/dist/granular/ui/primitives/Info/Info.js +57 -0
  315. package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
  316. package/dist/granular/ui/primitives/Input/Input.js +351 -0
  317. package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
  318. package/dist/granular/ui/primitives/Label/Label.js +61 -0
  319. package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
  320. package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
  321. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
  322. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
  323. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
  324. package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
  325. package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
  326. package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
  327. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
  328. package/dist/granular/ui/primitives/Select/Select.js +210 -0
  329. package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
  330. package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
  331. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
  332. package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
  333. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
  334. package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
  335. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
  336. package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
  337. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
  338. package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
  339. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
  340. package/dist/granular/ui/primitives/Text/Text.js +118 -0
  341. package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
  342. package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
  343. package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
  344. package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
  345. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
  346. package/dist/granular/ui/providers/AppProvider.js +50 -0
  347. package/dist/granular/ui/providers/AppProvider.js.map +1 -0
  348. package/dist/granular/ui/providers/ConfigProvider.js +95 -0
  349. package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
  350. package/dist/granular/ui/providers/DialogContext.js +20 -0
  351. package/dist/granular/ui/providers/DialogContext.js.map +1 -0
  352. package/dist/granular/ui/providers/DialogProvider.js +32 -0
  353. package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
  354. package/dist/granular/ui/providers/ThemeProvider.js +56 -0
  355. package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
  356. package/dist/granular/ui/providers/ToastContext.js +20 -0
  357. package/dist/granular/ui/providers/ToastContext.js.map +1 -0
  358. package/dist/granular/ui/providers/ToastProvider.js +47 -0
  359. package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
  360. package/dist/granular/ui/providers/providers-bundle.js +23 -0
  361. package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
  362. package/dist/granular/ui/tokens/animations.js +106 -0
  363. package/dist/granular/ui/tokens/animations.js.map +1 -0
  364. package/dist/granular/ui/tokens/borders.js +54 -0
  365. package/dist/granular/ui/tokens/borders.js.map +1 -0
  366. package/dist/granular/ui/tokens/breakpoints.js +43 -0
  367. package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
  368. package/dist/granular/ui/tokens/colors/brand.js +67 -0
  369. package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
  370. package/dist/granular/ui/tokens/colors/index.js +25 -0
  371. package/dist/granular/ui/tokens/colors/index.js.map +1 -0
  372. package/dist/granular/ui/tokens/colors/primitives.js +320 -0
  373. package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
  374. package/dist/granular/ui/tokens/colors/semantic.js +212 -0
  375. package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
  376. package/dist/granular/ui/tokens/colors/types.js +18 -0
  377. package/dist/granular/ui/tokens/colors/types.js.map +1 -0
  378. package/dist/granular/ui/tokens/colors/utils.js +131 -0
  379. package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
  380. package/dist/granular/ui/tokens/opacity.js +59 -0
  381. package/dist/granular/ui/tokens/opacity.js.map +1 -0
  382. package/dist/granular/ui/tokens/radius.js +76 -0
  383. package/dist/granular/ui/tokens/radius.js.map +1 -0
  384. package/dist/granular/ui/tokens/shadows.js +63 -0
  385. package/dist/granular/ui/tokens/shadows.js.map +1 -0
  386. package/dist/granular/ui/tokens/sidebar.js +92 -0
  387. package/dist/granular/ui/tokens/sidebar.js.map +1 -0
  388. package/dist/granular/ui/tokens/spacing.js +143 -0
  389. package/dist/granular/ui/tokens/spacing.js.map +1 -0
  390. package/dist/granular/ui/tokens/switch.js +51 -0
  391. package/dist/granular/ui/tokens/switch.js.map +1 -0
  392. package/dist/granular/ui/tokens/typography.js +146 -0
  393. package/dist/granular/ui/tokens/typography.js.map +1 -0
  394. package/dist/granular/ui/tokens/z-index.js +79 -0
  395. package/dist/granular/ui/tokens/z-index.js.map +1 -0
  396. package/dist/granular/ui/utils/cn.js +10 -0
  397. package/dist/granular/ui/utils/cn.js.map +1 -0
  398. package/dist/granular/ui/utils/cva.js +14 -0
  399. package/dist/granular/ui/utils/cva.js.map +1 -0
  400. package/dist/granular/ui/utils/mergeRefs.js +11 -0
  401. package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
  402. package/dist/granular/vite.svg +1 -0
  403. package/dist/index.cjs +37 -37
  404. package/dist/index.cjs.map +1 -1
  405. package/dist/index.js +1052 -1053
  406. package/dist/index.js.map +1 -1
  407. package/dist/server/index.cjs +23 -23
  408. package/dist/server/index.cjs.map +1 -1
  409. package/dist/server/index.js +858 -1193
  410. package/dist/server/index.js.map +1 -1
  411. package/package.json +9 -2
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { useContext as t, createContext as n } from "react";
3
+ const r = n(null);
4
+ function o() {
5
+ return t(r);
6
+ }
7
+ function u() {
8
+ const e = t(r);
9
+ if (!e)
10
+ throw new Error(
11
+ "useSidebarRequired must be used within a SideNavbar.Sidebar component"
12
+ );
13
+ return e;
14
+ }
15
+ export {
16
+ r as SidebarContext,
17
+ o as useSidebar,
18
+ u as useSidebarRequired
19
+ };
20
+ //# sourceMappingURL=SidebarContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SidebarContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\nimport type { SidebarContextValue } from \"../types\";\n\n/**\n * Context for the Sidebar subcomponent\n *\n * Provides sidebar-specific state that inherits from the root SideNavbar context.\n * Must be used within a Sidebar component.\n */\nexport const SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access Sidebar context (returns null if outside Sidebar)\n */\nexport function useSidebar(): SidebarContextValue | null {\n return useContext(SidebarContext);\n}\n\n/**\n * Hook to access Sidebar context (throws if outside Sidebar)\n * @throws Error if used outside of Sidebar component\n */\nexport function useSidebarRequired(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\n \"useSidebarRequired must be used within a SideNavbar.Sidebar component\",\n );\n }\n return context;\n}\n\nexport default SidebarContext;\n"],"names":["SidebarContext","createContext","useSidebar","useContext","useSidebarRequired","context"],"mappings":";;AAYO,MAAMA,IAAiBC,EAA0C,IAAI;AAKrE,SAASC,IAAyC;AACvD,SAAOC,EAAWH,CAAc;AAClC;AAMO,SAASI,IAA0C;AACxD,QAAMC,IAAUF,EAAWH,CAAc;AACzC,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { createContext as o, useContext as t } from "react";
3
+ const r = o(
4
+ null
5
+ );
6
+ function i() {
7
+ return t(r);
8
+ }
9
+ function u() {
10
+ const e = t(r);
11
+ if (!e)
12
+ throw new Error(
13
+ "useSidebarSlotRequired must be used within SidebarSlotProvider"
14
+ );
15
+ return e;
16
+ }
17
+ export {
18
+ r as SidebarSlotContext,
19
+ i as useSidebarSlot,
20
+ u as useSidebarSlotRequired
21
+ };
22
+ //# sourceMappingURL=SidebarSlotContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SidebarSlotContext.js","sources":["../../../../../../src/ui/components/SideNavbar/contexts/SidebarSlotContext.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SidebarSlotContextValue } from \"../types\";\n\n/**\n * Sidebar Slot Context\n *\n * Provides slot management for dynamic sidebar content.\n * Allows registering and switching between different content slots.\n */\nexport const SidebarSlotContext = createContext<SidebarSlotContextValue | null>(\n null,\n);\n\n/**\n * Hook to access sidebar slot context\n * Returns null if used outside provider\n */\nexport function useSidebarSlot(): SidebarSlotContextValue | null {\n return useContext(SidebarSlotContext);\n}\n\n/**\n * Hook to access sidebar slot context (required)\n * Throws error if used outside provider\n */\nexport function useSidebarSlotRequired(): SidebarSlotContextValue {\n const context = useContext(SidebarSlotContext);\n if (!context) {\n throw new Error(\n \"useSidebarSlotRequired must be used within SidebarSlotProvider\",\n );\n }\n return context;\n}\n"],"names":["SidebarSlotContext","createContext","useSidebarSlot","useContext","useSidebarSlotRequired","context"],"mappings":";;AAWO,MAAMA,IAAqBC;AAAA,EAChC;AACF;AAMO,SAASC,IAAiD;AAC/D,SAAOC,EAAWH,CAAkB;AACtC;AAMO,SAASI,IAAkD;AAChE,QAAMC,IAAUF,EAAWH,CAAkB;AAC7C,MAAI,CAACK;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA;AACT;"}
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { useRef as s, useEffect as m, useCallback as E } from "react";
3
+ function x({
4
+ isActive: t,
5
+ containerRef: n,
6
+ restoreFocus: f = !0,
7
+ initialFocusRef: r
8
+ }) {
9
+ const u = s(null);
10
+ m(() => {
11
+ if (t) {
12
+ if (u.current = document.activeElement, r != null && r.current)
13
+ r.current.focus();
14
+ else if (n.current) {
15
+ const e = n.current.querySelector(
16
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
17
+ );
18
+ e == null || e.focus();
19
+ }
20
+ } else f && u.current && (u.current.focus(), u.current = null);
21
+ }, [t, n, r, f]);
22
+ const l = E(
23
+ (e) => {
24
+ if (!(!t || !n.current) && e.key === "Tab") {
25
+ const d = n.current.querySelectorAll(
26
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
27
+ ), c = d[0], o = d[d.length - 1];
28
+ e.shiftKey ? document.activeElement === c && (e.preventDefault(), o == null || o.focus()) : document.activeElement === o && (e.preventDefault(), c == null || c.focus());
29
+ }
30
+ },
31
+ [t, n]
32
+ );
33
+ m(() => {
34
+ if (t)
35
+ return document.addEventListener("keydown", l), () => {
36
+ document.removeEventListener("keydown", l);
37
+ };
38
+ }, [t, l]);
39
+ }
40
+ export {
41
+ x as useFocusManagement
42
+ };
43
+ //# sourceMappingURL=useFocusManagement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusManagement.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useFocusManagement.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useCallback } from \"react\";\n\nexport interface UseFocusManagementOptions {\n /**\n * Whether focus trap is active\n */\n isActive: boolean;\n\n /**\n * Container element to trap focus within\n */\n containerRef: React.RefObject<HTMLElement | null>;\n\n /**\n * Whether to restore focus to previous element when deactivated\n * @default true\n */\n restoreFocus?: boolean;\n\n /**\n * Initial element to focus when activated\n */\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Hook for managing focus within a container (focus trap)\n *\n * Traps focus within a container element, useful for modals and overlays.\n * Supports restoring focus when deactivated.\n *\n * @example\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n * useFocusManagement({\n * isActive: isOpen,\n * containerRef,\n * restoreFocus: true\n * });\n * ```\n */\nexport function useFocusManagement({\n isActive,\n containerRef,\n restoreFocus = true,\n initialFocusRef,\n}: UseFocusManagementOptions) {\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n\n // Save previous focus when activating\n useEffect(() => {\n if (isActive) {\n previousActiveElementRef.current = document.activeElement as HTMLElement;\n\n // Focus initial element if provided\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else if (containerRef.current) {\n // Otherwise focus first focusable element in container\n const firstFocusable = containerRef.current.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement;\n firstFocusable?.focus();\n }\n } else if (restoreFocus && previousActiveElementRef.current) {\n // Restore focus when deactivating\n previousActiveElementRef.current.focus();\n previousActiveElementRef.current = null;\n }\n }, [isActive, containerRef, initialFocusRef, restoreFocus]);\n\n // Trap focus within container\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!isActive || !containerRef.current) return;\n\n // Handle Tab key\n if (event.key === \"Tab\") {\n const focusableElements = containerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable?.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable?.focus();\n }\n }\n }\n },\n [isActive, containerRef],\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isActive, handleKeyDown]);\n}\n"],"names":["useFocusManagement","isActive","containerRef","restoreFocus","initialFocusRef","previousActiveElementRef","useRef","useEffect","firstFocusable","handleKeyDown","useCallback","event","focusableElements","lastFocusable"],"mappings":";;AA2CO,SAASA,EAAmB;AAAA,EACjC,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,iBAAAC;AACF,GAA8B;AAC5B,QAAMC,IAA2BC,EAA2B,IAAI;AAGhE,EAAAC,EAAU,MAAM;AACd,QAAIN;AAIF,UAHAI,EAAyB,UAAU,SAAS,eAGxCD,KAAA,QAAAA,EAAiB;AACnB,QAAAA,EAAgB,QAAQ,MAAA;AAAA,eACfF,EAAa,SAAS;AAE/B,cAAMM,IAAiBN,EAAa,QAAQ;AAAA,UAC1C;AAAA,QAAA;AAEF,QAAAM,KAAA,QAAAA,EAAgB;AAAA,MAClB;AAAA,UACF,CAAWL,KAAgBE,EAAyB,YAElDA,EAAyB,QAAQ,MAAA,GACjCA,EAAyB,UAAU;AAAA,EAEvC,GAAG,CAACJ,GAAUC,GAAcE,GAAiBD,CAAY,CAAC;AAG1D,QAAMM,IAAgBC;AAAA,IACpB,CAACC,MAAyB;AACxB,UAAI,GAACV,KAAY,CAACC,EAAa,YAG3BS,EAAM,QAAQ,OAAO;AACvB,cAAMC,IAAoBV,EAAa,QAAQ;AAAA,UAC7C;AAAA,QAAA,GAGIM,IAAiBI,EAAkB,CAAC,GACpCC,IAAgBD,EACpBA,EAAkB,SAAS,CAC7B;AAEA,QAAID,EAAM,WAEJ,SAAS,kBAAkBH,MAC7BG,EAAM,eAAA,GACNE,KAAA,QAAAA,EAAe,WAIb,SAAS,kBAAkBA,MAC7BF,EAAM,eAAA,GACNH,KAAA,QAAAA,EAAgB;AAAA,MAGtB;AAAA,IACF;AAAA,IACA,CAACP,GAAUC,CAAY;AAAA,EAAA;AAGzB,EAAAK,EAAU,MAAM;AACd,QAAKN;AAEL,sBAAS,iBAAiB,WAAWQ,CAAa,GAC3C,MAAM;AACX,iBAAS,oBAAoB,WAAWA,CAAa;AAAA,MACvD;AAAA,EACF,GAAG,CAACR,GAAUQ,CAAa,CAAC;AAC9B;"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ var m = Object.defineProperty, w = Object.defineProperties;
3
+ var C = Object.getOwnPropertyDescriptors;
4
+ var f = Object.getOwnPropertySymbols;
5
+ var I = Object.prototype.hasOwnProperty, J = Object.prototype.propertyIsEnumerable;
6
+ var l = (e, t, o) => t in e ? m(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, s = (e, t) => {
7
+ for (var o in t || (t = {}))
8
+ I.call(t, o) && l(e, o, t[o]);
9
+ if (f)
10
+ for (var o of f(t))
11
+ J.call(t, o) && l(e, o, t[o]);
12
+ return e;
13
+ }, i = (e, t) => w(e, C(t));
14
+ import { useState as N, useEffect as O, useCallback as p } from "react";
15
+ function h({
16
+ defaultStates: e = {},
17
+ persist: t = !1,
18
+ storageKey: o
19
+ } = {}) {
20
+ const a = () => {
21
+ if (t && o && typeof window != "undefined") {
22
+ const n = localStorage.getItem(`${o}-groups`);
23
+ if (n)
24
+ try {
25
+ const r = JSON.parse(n);
26
+ return s(s({}, e), r);
27
+ } catch (r) {
28
+ }
29
+ }
30
+ return e;
31
+ }, [c, u] = N(a);
32
+ O(() => {
33
+ t && o && typeof window != "undefined" && localStorage.setItem(`${o}-groups`, JSON.stringify(c));
34
+ }, [t, o, c]);
35
+ const S = p((n) => {
36
+ u((r) => i(s({}, r), {
37
+ [n]: !r[n]
38
+ }));
39
+ }, []), d = p(
40
+ (n, r) => {
41
+ u((G) => i(s({}, G), {
42
+ [n]: r
43
+ }));
44
+ },
45
+ []
46
+ ), g = p(() => {
47
+ u(e);
48
+ }, [e]);
49
+ return {
50
+ groupStates: c,
51
+ toggleGroup: S,
52
+ setGroupCollapsed: d,
53
+ resetGroups: g
54
+ };
55
+ }
56
+ export {
57
+ h as useGroupState
58
+ };
59
+ //# sourceMappingURL=useGroupState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGroupState.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useGroupState.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useEffect } from \"react\";\nimport type { UseGroupStateOptions, UseGroupStateReturn } from \"../types\";\n\n/**\n * Hook for managing collapsible group states\n *\n * Manages collapsed/expanded state for multiple groups with optional persistence.\n * Used internally by SideNavbarStateProvider, but can be used standalone.\n *\n * @example\n * ```tsx\n * const { groupStates, toggleGroup, setGroupCollapsed } = useGroupState({\n * defaultStates: { filters: false, settings: true },\n * persist: true,\n * storageKey: 'my-sidebar-groups',\n * });\n *\n * // Check if group is collapsed\n * const isFiltersCollapsed = groupStates['filters'] ?? false;\n *\n * // Toggle a group\n * toggleGroup('filters');\n *\n * // Set specific state\n * setGroupCollapsed('settings', false);\n * ```\n */\nexport function useGroupState({\n defaultStates = {},\n persist = false,\n storageKey,\n}: UseGroupStateOptions = {}): UseGroupStateReturn {\n // Initialize state from storage or defaults\n const getInitialStates = (): Record<string, boolean> => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(`${storageKey}-groups`);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n return { ...defaultStates, ...parsed };\n } catch {\n // Invalid JSON, use defaults\n }\n }\n }\n return defaultStates;\n };\n\n const [groupStates, setGroupStates] =\n useState<Record<string, boolean>>(getInitialStates);\n\n // Persist state changes\n useEffect(() => {\n if (persist && storageKey && typeof window !== \"undefined\") {\n localStorage.setItem(`${storageKey}-groups`, JSON.stringify(groupStates));\n }\n }, [persist, storageKey, groupStates]);\n\n const toggleGroup = useCallback((groupId: string) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: !prev[groupId],\n }));\n }, []);\n\n const setGroupCollapsed = useCallback(\n (groupId: string, collapsed: boolean) => {\n setGroupStates((prev) => ({\n ...prev,\n [groupId]: collapsed,\n }));\n },\n [],\n );\n\n const resetGroups = useCallback(() => {\n setGroupStates(defaultStates);\n }, [defaultStates]);\n\n return {\n groupStates,\n toggleGroup,\n setGroupCollapsed,\n resetGroups,\n };\n}\n\nexport default useGroupState;\n"],"names":["useGroupState","defaultStates","persist","storageKey","getInitialStates","stored","parsed","__spreadValues","e","groupStates","setGroupStates","useState","useEffect","toggleGroup","useCallback","groupId","prev","__spreadProps","setGroupCollapsed","collapsed","resetGroups"],"mappings":";;;;;;;;;;;;;;AA6BO,SAASA,EAAc;AAAA,EAC5B,eAAAC,IAAgB,CAAA;AAAA,EAChB,SAAAC,IAAU;AAAA,EACV,YAAAC;AACF,IAA0B,IAAyB;AAEjD,QAAMC,IAAmB,MAA+B;AACtD,QAAIF,KAAWC,KAAc,OAAO,UAAW,aAAa;AAC1D,YAAME,IAAS,aAAa,QAAQ,GAAGF,CAAU,SAAS;AAC1D,UAAIE;AACF,YAAI;AACF,gBAAMC,IAAS,KAAK,MAAMD,CAAM;AAChC,iBAAOE,IAAA,IAAKN,IAAkBK;AAAA,QAChC,SAAQE,GAAA;AAAA,QAER;AAAA,IAEJ;AACA,WAAOP;AAAA,EACT,GAEM,CAACQ,GAAaC,CAAc,IAChCC,EAAkCP,CAAgB;AAGpD,EAAAQ,EAAU,MAAM;AACd,IAAIV,KAAWC,KAAc,OAAO,UAAW,eAC7C,aAAa,QAAQ,GAAGA,CAAU,WAAW,KAAK,UAAUM,CAAW,CAAC;AAAA,EAE5E,GAAG,CAACP,GAASC,GAAYM,CAAW,CAAC;AAErC,QAAMI,IAAcC,EAAY,CAACC,MAAoB;AACnD,IAAAL,EAAe,CAACM,MAAUC,EAAAV,EAAA,IACrBS,IADqB;AAAA,MAExB,CAACD,CAAO,GAAG,CAACC,EAAKD,CAAO;AAAA,IAAA,EACxB;AAAA,EACJ,GAAG,CAAA,CAAE,GAECG,IAAoBJ;AAAA,IACxB,CAACC,GAAiBI,MAAuB;AACvC,MAAAT,EAAe,CAACM,MAAUC,EAAAV,EAAA,IACrBS,IADqB;AAAA,QAExB,CAACD,CAAO,GAAGI;AAAA,MAAA,EACX;AAAA,IACJ;AAAA,IACA,CAAA;AAAA,EAAC,GAGGC,IAAcN,EAAY,MAAM;AACpC,IAAAJ,EAAeT,CAAa;AAAA,EAC9B,GAAG,CAACA,CAAa,CAAC;AAElB,SAAO;AAAA,IACL,aAAAQ;AAAA,IACA,aAAAI;AAAA,IACA,mBAAAK;AAAA,IACA,aAAAE;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { useCallback as w, useEffect as k } from "react";
3
+ function M({
4
+ key: o,
5
+ ctrl: s = !1,
6
+ shift: e = !1,
7
+ alt: y = !1,
8
+ meta: a = !1,
9
+ onTrigger: f,
10
+ enabled: i = !0,
11
+ preventDefault: u = !0
12
+ }) {
13
+ const c = w(
14
+ (t) => {
15
+ if (!i) return;
16
+ const r = t.target;
17
+ if ((r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.isContentEditable) && !s && !a)
18
+ return;
19
+ const l = o.length === 1 ? t.key.toLowerCase() === o.toLowerCase() : t.key === o, n = s ? t.ctrlKey || t.metaKey : !t.ctrlKey && !t.metaKey, h = e ? t.shiftKey : !t.shiftKey, K = y ? t.altKey : !t.altKey, d = a ? t.metaKey : !t.metaKey, m = s ? (t.ctrlKey || t.metaKey) && !a : n && d;
20
+ l && m && h && K && (u && (t.preventDefault(), t.stopPropagation()), f());
21
+ },
22
+ [i, o, s, e, y, a, f, u]
23
+ );
24
+ k(() => {
25
+ if (i)
26
+ return window.addEventListener("keydown", c), () => {
27
+ window.removeEventListener("keydown", c);
28
+ };
29
+ }, [i, c]);
30
+ }
31
+ export {
32
+ M as useKeyboardShortcut
33
+ };
34
+ //# sourceMappingURL=useKeyboardShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcut.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useKeyboardShortcut.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useCallback } from \"react\";\n\nexport interface UseKeyboardShortcutOptions {\n /**\n * Key to listen for (e.g., 'b', 'Escape', 'Enter')\n */\n key: string;\n\n /**\n * Whether Ctrl/Cmd key should be pressed\n * @default false\n */\n ctrl?: boolean;\n\n /**\n * Whether Shift key should be pressed\n * @default false\n */\n shift?: boolean;\n\n /**\n * Whether Alt key should be pressed\n * @default false\n */\n alt?: boolean;\n\n /**\n * Whether Meta key should be pressed (Cmd on Mac)\n * @default false\n */\n meta?: boolean;\n\n /**\n * Callback when shortcut is triggered\n */\n onTrigger: () => void;\n\n /**\n * Whether the shortcut is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Whether to prevent default behavior\n * @default true\n */\n preventDefault?: boolean;\n}\n\n/**\n * Hook for keyboard shortcuts\n *\n * Listens for keyboard combinations and triggers callbacks.\n * Automatically ignores input fields unless explicitly allowed.\n *\n * @example\n * ```tsx\n * useKeyboardShortcut({\n * key: 'b',\n * ctrl: true,\n * onTrigger: () => toggleSidebar(),\n * });\n * ```\n */\nexport function useKeyboardShortcut({\n key: targetKey,\n ctrl = false,\n shift = false,\n alt = false,\n meta = false,\n onTrigger,\n enabled = true,\n preventDefault = true,\n}: UseKeyboardShortcutOptions) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!enabled) return;\n\n // Don't trigger in input fields (unless it's a system shortcut)\n const target = event.target as HTMLElement;\n const isInputField =\n target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n // Allow Ctrl/Cmd shortcuts in inputs (like Ctrl+B)\n if (isInputField && !ctrl && !meta) {\n return;\n }\n\n // Check key match (case-insensitive for letter keys)\n const keyMatch =\n targetKey.length === 1\n ? event.key.toLowerCase() === targetKey.toLowerCase()\n : event.key === targetKey;\n\n // Check modifier keys\n const ctrlMatch = ctrl\n ? event.ctrlKey || event.metaKey\n : !event.ctrlKey && !event.metaKey;\n const shiftMatch = shift ? event.shiftKey : !event.shiftKey;\n const altMatch = alt ? event.altKey : !event.altKey;\n const metaMatch = meta ? event.metaKey : !event.metaKey;\n\n // If ctrl is true, allow either Ctrl or Meta (Cmd on Mac)\n const modifierMatch = ctrl\n ? (event.ctrlKey || event.metaKey) && !meta\n : ctrlMatch && metaMatch;\n\n if (keyMatch && modifierMatch && shiftMatch && altMatch) {\n if (preventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n onTrigger();\n }\n },\n [enabled, targetKey, ctrl, shift, alt, meta, onTrigger, preventDefault],\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [enabled, handleKeyDown]);\n}\n"],"names":["useKeyboardShortcut","targetKey","ctrl","shift","alt","meta","onTrigger","enabled","preventDefault","handleKeyDown","useCallback","event","target","keyMatch","ctrlMatch","shiftMatch","altMatch","metaMatch","modifierMatch","useEffect"],"mappings":";;AAmEO,SAASA,EAAoB;AAAA,EAClC,KAAKC;AAAA,EACL,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,gBAAAC,IAAiB;AACnB,GAA+B;AAC7B,QAAMC,IAAgBC;AAAA,IACpB,CAACC,MAAyB;AACxB,UAAI,CAACJ,EAAS;AAGd,YAAMK,IAASD,EAAM;AAOrB,WALEC,EAAO,YAAY,WACnBA,EAAO,YAAY,cACnBA,EAAO,sBAGW,CAACV,KAAQ,CAACG;AAC5B;AAIF,YAAMQ,IACJZ,EAAU,WAAW,IACjBU,EAAM,IAAI,YAAA,MAAkBV,EAAU,YAAA,IACtCU,EAAM,QAAQV,GAGda,IAAYZ,IACdS,EAAM,WAAWA,EAAM,UACvB,CAACA,EAAM,WAAW,CAACA,EAAM,SACvBI,IAAaZ,IAAQQ,EAAM,WAAW,CAACA,EAAM,UAC7CK,IAAWZ,IAAMO,EAAM,SAAS,CAACA,EAAM,QACvCM,IAAYZ,IAAOM,EAAM,UAAU,CAACA,EAAM,SAG1CO,IAAgBhB,KACjBS,EAAM,WAAWA,EAAM,YAAY,CAACN,IACrCS,KAAaG;AAEjB,MAAIJ,KAAYK,KAAiBH,KAAcC,MACzCR,MACFG,EAAM,eAAA,GACNA,EAAM,gBAAA,IAERL,EAAA;AAAA,IAEJ;AAAA,IACA,CAACC,GAASN,GAAWC,GAAMC,GAAOC,GAAKC,GAAMC,GAAWE,CAAc;AAAA,EAAA;AAGxE,EAAAW,EAAU,MAAM;AACd,QAAKZ;AAEL,oBAAO,iBAAiB,WAAWE,CAAa,GACzC,MAAM;AACX,eAAO,oBAAoB,WAAWA,CAAa;AAAA,MACrD;AAAA,EACF,GAAG,CAACF,GAASE,CAAa,CAAC;AAC7B;"}
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ import { useState as b, useRef as w, useCallback as m, useEffect as I } from "react";
3
+ import { clampWidth as R } from "../utils/parseWidth.js";
4
+ function q({
5
+ initialWidth: d,
6
+ minWidth: c,
7
+ maxWidth: o,
8
+ snapPoints: u,
9
+ snapThreshold: M = 20,
10
+ onWidthChange: f,
11
+ enabled: s = !0
12
+ }) {
13
+ const S = R(d, c, o), [n, z] = b(S), [t, E] = b(!1), i = w(0), a = w(S), v = m(
14
+ (r) => {
15
+ let e = R(r, c, o);
16
+ if (u && u.length > 0) {
17
+ const l = u.reduce((L, X) => {
18
+ const D = Math.abs(e - X), T = Math.abs(e - L);
19
+ return D < T ? X : L;
20
+ }, u[0]);
21
+ Math.abs(e - l) <= M && (e = l);
22
+ }
23
+ z(e), f == null || f(e);
24
+ },
25
+ [c, o, u, M, f]
26
+ ), y = m(
27
+ (r) => {
28
+ if (!s || !t) return;
29
+ const e = r.clientX - i.current, l = a.current + e;
30
+ v(l);
31
+ },
32
+ [s, t, v]
33
+ ), p = m(() => {
34
+ s && (E(!1), i.current = 0, a.current = n);
35
+ }, [s, n]), k = m(
36
+ (r) => {
37
+ s && (r.preventDefault(), r.stopPropagation(), E(!0), i.current = r.clientX, a.current = n);
38
+ },
39
+ [s, n]
40
+ );
41
+ return I(() => {
42
+ if (t)
43
+ return document.addEventListener("mousemove", y), document.addEventListener("mouseup", p), document.body.style.userSelect = "none", document.body.style.cursor = "col-resize", () => {
44
+ document.removeEventListener("mousemove", y), document.removeEventListener("mouseup", p), document.body.style.userSelect = "", document.body.style.cursor = "";
45
+ };
46
+ }, [t, y, p]), I(() => {
47
+ t || z(R(d, c, o));
48
+ }, [d, c, o, t]), {
49
+ width: n,
50
+ isResizing: t,
51
+ startResize: k,
52
+ setWidth: v
53
+ };
54
+ }
55
+ export {
56
+ q as useResize
57
+ };
58
+ //# sourceMappingURL=useResize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResize.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useResize.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { clampWidth, validateWidthBounds } from \"../utils\";\n\nexport interface UseResizeOptions {\n /**\n * Initial width\n */\n initialWidth: number;\n\n /**\n * Minimum width constraint\n */\n minWidth?: number;\n\n /**\n * Maximum width constraint\n */\n maxWidth?: number;\n\n /**\n * Snap points (widths to snap to when dragging)\n */\n snapPoints?: number[];\n\n /**\n * Snap threshold in pixels\n * @default 20\n */\n snapThreshold?: number;\n\n /**\n * Callback when width changes\n */\n onWidthChange?: (width: number) => void;\n\n /**\n * Whether resize is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport interface UseResizeReturn {\n /**\n * Current width\n */\n width: number;\n\n /**\n * Whether currently resizing\n */\n isResizing: boolean;\n\n /**\n * Start resize handler (attach to mousedown)\n */\n startResize: (event: React.MouseEvent) => void;\n\n /**\n * Set width programmatically\n */\n setWidth: (width: number) => void;\n}\n\n/**\n * Hook for drag-to-resize functionality\n *\n * Provides resize state and handlers for drag-to-resize interactions.\n * Supports snap points and min/max constraints.\n *\n * @example\n * ```tsx\n * const { width, isResizing, startResize } = useResize({\n * initialWidth: 320,\n * minWidth: 200,\n * maxWidth: 600,\n * snapPoints: [200, 320, 480],\n * onWidthChange: (width) => console.log('Width:', width)\n * });\n * ```\n */\nexport function useResize({\n initialWidth,\n minWidth,\n maxWidth,\n snapPoints,\n snapThreshold = 20,\n onWidthChange,\n enabled = true,\n}: UseResizeOptions): UseResizeReturn {\n // Validate bounds on first render\n if (import.meta.env.DEV) {\n if (!validateWidthBounds(minWidth, maxWidth)) {\n console.warn(\n \"[useResize] Invalid bounds: minWidth must be less than maxWidth\",\n { minWidth, maxWidth },\n );\n }\n }\n\n // Clamp initial width to valid bounds\n const clampedInitialWidth = clampWidth(initialWidth, minWidth, maxWidth);\n const [width, setWidthState] = useState(clampedInitialWidth);\n const [isResizing, setIsResizing] = useState(false);\n const startXRef = useRef<number>(0);\n const startWidthRef = useRef<number>(clampedInitialWidth);\n\n const setWidth = useCallback(\n (newWidth: number) => {\n // Use utility function to clamp width\n let constrainedWidth = clampWidth(newWidth, minWidth, maxWidth);\n\n // Check snap points\n if (snapPoints && snapPoints.length > 0) {\n const closestSnap = snapPoints.reduce((closest, snap) => {\n const distanceToSnap = Math.abs(constrainedWidth - snap);\n const distanceToClosest = Math.abs(constrainedWidth - closest);\n return distanceToSnap < distanceToClosest ? snap : closest;\n }, snapPoints[0]);\n\n if (Math.abs(constrainedWidth - closestSnap) <= snapThreshold) {\n constrainedWidth = closestSnap;\n }\n }\n\n setWidthState(constrainedWidth);\n onWidthChange?.(constrainedWidth);\n },\n [minWidth, maxWidth, snapPoints, snapThreshold, onWidthChange],\n );\n\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!enabled || !isResizing) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = startWidthRef.current + deltaX;\n setWidth(newWidth);\n },\n [enabled, isResizing, setWidth],\n );\n\n const handleMouseUp = useCallback(() => {\n if (!enabled) return;\n\n setIsResizing(false);\n startXRef.current = 0;\n startWidthRef.current = width;\n }, [enabled, width]);\n\n const startResize = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setIsResizing(true);\n startXRef.current = event.clientX;\n startWidthRef.current = width;\n },\n [enabled, width],\n );\n\n useEffect(() => {\n if (!isResizing) return;\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n // Prevent text selection while resizing\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n };\n }, [isResizing, handleMouseMove, handleMouseUp]);\n\n // Update width when initialWidth changes externally\n useEffect(() => {\n if (!isResizing) {\n setWidthState(clampWidth(initialWidth, minWidth, maxWidth));\n }\n }, [initialWidth, minWidth, maxWidth, isResizing]);\n\n return {\n width,\n isResizing,\n startResize,\n setWidth,\n };\n}\n"],"names":["useResize","initialWidth","minWidth","maxWidth","snapPoints","snapThreshold","onWidthChange","enabled","clampedInitialWidth","clampWidth","width","setWidthState","useState","isResizing","setIsResizing","startXRef","useRef","startWidthRef","setWidth","useCallback","newWidth","constrainedWidth","closestSnap","closest","snap","distanceToSnap","distanceToClosest","handleMouseMove","event","deltaX","handleMouseUp","startResize","useEffect"],"mappings":";;;AAmFO,SAASA,EAAU;AAAA,EACxB,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,eAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,GAAsC;AAYpC,QAAMC,IAAsBC,EAAWR,GAAcC,GAAUC,CAAQ,GACjE,CAACO,GAAOC,CAAa,IAAIC,EAASJ,CAAmB,GACrD,CAACK,GAAYC,CAAa,IAAIF,EAAS,EAAK,GAC5CG,IAAYC,EAAe,CAAC,GAC5BC,IAAgBD,EAAeR,CAAmB,GAElDU,IAAWC;AAAA,IACf,CAACC,MAAqB;AAEpB,UAAIC,IAAmBZ,EAAWW,GAAUlB,GAAUC,CAAQ;AAG9D,UAAIC,KAAcA,EAAW,SAAS,GAAG;AACvC,cAAMkB,IAAclB,EAAW,OAAO,CAACmB,GAASC,MAAS;AACvD,gBAAMC,IAAiB,KAAK,IAAIJ,IAAmBG,CAAI,GACjDE,IAAoB,KAAK,IAAIL,IAAmBE,CAAO;AAC7D,iBAAOE,IAAiBC,IAAoBF,IAAOD;AAAA,QACrD,GAAGnB,EAAW,CAAC,CAAC;AAEhB,QAAI,KAAK,IAAIiB,IAAmBC,CAAW,KAAKjB,MAC9CgB,IAAmBC;AAAA,MAEvB;AAEA,MAAAX,EAAcU,CAAgB,GAC9Bf,KAAA,QAAAA,EAAgBe;AAAA,IAClB;AAAA,IACA,CAACnB,GAAUC,GAAUC,GAAYC,GAAeC,CAAa;AAAA,EAAA,GAGzDqB,IAAkBR;AAAA,IACtB,CAACS,MAAsB;AACrB,UAAI,CAACrB,KAAW,CAACM,EAAY;AAE7B,YAAMgB,IAASD,EAAM,UAAUb,EAAU,SACnCK,IAAWH,EAAc,UAAUY;AACzC,MAAAX,EAASE,CAAQ;AAAA,IACnB;AAAA,IACA,CAACb,GAASM,GAAYK,CAAQ;AAAA,EAAA,GAG1BY,IAAgBX,EAAY,MAAM;AACtC,IAAKZ,MAELO,EAAc,EAAK,GACnBC,EAAU,UAAU,GACpBE,EAAc,UAAUP;AAAA,EAC1B,GAAG,CAACH,GAASG,CAAK,CAAC,GAEbqB,IAAcZ;AAAA,IAClB,CAACS,MAA4B;AAC3B,MAAKrB,MAELqB,EAAM,eAAA,GACNA,EAAM,gBAAA,GAENd,EAAc,EAAI,GAClBC,EAAU,UAAUa,EAAM,SAC1BX,EAAc,UAAUP;AAAA,IAC1B;AAAA,IACA,CAACH,GAASG,CAAK;AAAA,EAAA;AAGjB,SAAAsB,EAAU,MAAM;AACd,QAAKnB;AAEL,sBAAS,iBAAiB,aAAac,CAAe,GACtD,SAAS,iBAAiB,WAAWG,CAAa,GAGlD,SAAS,KAAK,MAAM,aAAa,QACjC,SAAS,KAAK,MAAM,SAAS,cAEtB,MAAM;AACX,iBAAS,oBAAoB,aAAaH,CAAe,GACzD,SAAS,oBAAoB,WAAWG,CAAa,GACrD,SAAS,KAAK,MAAM,aAAa,IACjC,SAAS,KAAK,MAAM,SAAS;AAAA,MAC/B;AAAA,EACF,GAAG,CAACjB,GAAYc,GAAiBG,CAAa,CAAC,GAG/CE,EAAU,MAAM;AACd,IAAKnB,KACHF,EAAcF,EAAWR,GAAcC,GAAUC,CAAQ,CAAC;AAAA,EAE9D,GAAG,CAACF,GAAcC,GAAUC,GAAUU,CAAU,CAAC,GAE1C;AAAA,IACL,OAAAH;AAAA,IACA,YAAAG;AAAA,IACA,aAAAkB;AAAA,IACA,UAAAb;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { useState as u, useCallback as W, useEffect as v } from "react";
3
+ function y({
4
+ mobileBreakpoint: e = 768,
5
+ onMobileChange: d,
6
+ enabled: s = !0
7
+ } = {}) {
8
+ const [c, o] = u(
9
+ typeof window != "undefined" ? window.innerWidth : 1024
10
+ ), [r, f] = u(
11
+ typeof window != "undefined" ? window.innerWidth < e : !1
12
+ ), w = W(() => {
13
+ if (!s || typeof window == "undefined") return;
14
+ const i = window.innerWidth, t = i < e;
15
+ o(i), t !== r && (f(t), d == null || d(t));
16
+ }, [s, e, r, d]);
17
+ return v(() => {
18
+ if (!s || typeof window == "undefined") return;
19
+ const i = window.innerWidth, t = i < e;
20
+ o(i), f(t), window.addEventListener("resize", w);
21
+ let n = null;
22
+ return window.ResizeObserver && (n = new ResizeObserver(() => {
23
+ w();
24
+ }), n.observe(document.body)), () => {
25
+ window.removeEventListener("resize", w), n == null || n.disconnect();
26
+ };
27
+ }, [s, e, w]), {
28
+ isMobile: r,
29
+ viewportWidth: c
30
+ };
31
+ }
32
+ export {
33
+ y as useResponsiveSidebar
34
+ };
35
+ //# sourceMappingURL=useResponsiveSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResponsiveSidebar.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useResponsiveSidebar.ts"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\n\nexport interface UseResponsiveSidebarOptions {\n /**\n * Breakpoint in pixels for mobile detection\n * @default 768\n */\n mobileBreakpoint?: number;\n\n /**\n * Callback when mobile state changes\n */\n onMobileChange?: (isMobile: boolean) => void;\n\n /**\n * Whether responsive behavior is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nexport interface UseResponsiveSidebarReturn {\n /**\n * Whether current viewport is mobile\n */\n isMobile: boolean;\n\n /**\n * Current viewport width\n */\n viewportWidth: number;\n}\n\n/**\n * Hook for responsive sidebar behavior\n *\n * Detects mobile breakpoints and provides responsive state.\n *\n * @example\n * ```tsx\n * const { isMobile, viewportWidth } = useResponsiveSidebar({\n * mobileBreakpoint: 768,\n * onMobileChange: (isMobile) => console.log('Mobile:', isMobile)\n * });\n * ```\n */\nexport function useResponsiveSidebar({\n mobileBreakpoint = 768,\n onMobileChange,\n enabled = true,\n}: UseResponsiveSidebarOptions = {}): UseResponsiveSidebarReturn {\n const [viewportWidth, setViewportWidth] = useState<number>(\n typeof window !== \"undefined\" ? window.innerWidth : 1024,\n );\n const [isMobile, setIsMobile] = useState<boolean>(\n typeof window !== \"undefined\"\n ? window.innerWidth < mobileBreakpoint\n : false,\n );\n\n const handleResize = useCallback(() => {\n if (!enabled || typeof window === \"undefined\") return;\n\n const newWidth = window.innerWidth;\n const newIsMobile = newWidth < mobileBreakpoint;\n\n setViewportWidth(newWidth);\n\n if (newIsMobile !== isMobile) {\n setIsMobile(newIsMobile);\n onMobileChange?.(newIsMobile);\n }\n }, [enabled, mobileBreakpoint, isMobile, onMobileChange]);\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n\n // Set initial state\n const initialWidth = window.innerWidth;\n const initialIsMobile = initialWidth < mobileBreakpoint;\n setViewportWidth(initialWidth);\n setIsMobile(initialIsMobile);\n\n // Listen for resize events\n window.addEventListener(\"resize\", handleResize);\n\n // Use ResizeObserver for more accurate detection\n let resizeObserver: ResizeObserver | null = null;\n if (window.ResizeObserver) {\n resizeObserver = new ResizeObserver(() => {\n handleResize();\n });\n resizeObserver.observe(document.body);\n }\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n resizeObserver?.disconnect();\n };\n }, [enabled, mobileBreakpoint, handleResize]);\n\n return {\n isMobile,\n viewportWidth,\n };\n}\n"],"names":["useResponsiveSidebar","mobileBreakpoint","onMobileChange","enabled","viewportWidth","setViewportWidth","useState","isMobile","setIsMobile","handleResize","useCallback","newWidth","newIsMobile","useEffect","initialWidth","initialIsMobile","resizeObserver"],"mappings":";;AAgDO,SAASA,EAAqB;AAAA,EACnC,kBAAAC,IAAmB;AAAA,EACnB,gBAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,IAAiC,IAAgC;AAC/D,QAAM,CAACC,GAAeC,CAAgB,IAAIC;AAAA,IACxC,OAAO,UAAW,cAAc,OAAO,aAAa;AAAA,EAAA,GAEhD,CAACC,GAAUC,CAAW,IAAIF;AAAA,IAC9B,OAAO,UAAW,cACd,OAAO,aAAaL,IACpB;AAAA,EAAA,GAGAQ,IAAeC,EAAY,MAAM;AACrC,QAAI,CAACP,KAAW,OAAO,UAAW,YAAa;AAE/C,UAAMQ,IAAW,OAAO,YAClBC,IAAcD,IAAWV;AAE/B,IAAAI,EAAiBM,CAAQ,GAErBC,MAAgBL,MAClBC,EAAYI,CAAW,GACvBV,KAAA,QAAAA,EAAiBU;AAAA,EAErB,GAAG,CAACT,GAASF,GAAkBM,GAAUL,CAAc,CAAC;AAExD,SAAAW,EAAU,MAAM;AACd,QAAI,CAACV,KAAW,OAAO,UAAW,YAAa;AAG/C,UAAMW,IAAe,OAAO,YACtBC,IAAkBD,IAAeb;AACvC,IAAAI,EAAiBS,CAAY,GAC7BN,EAAYO,CAAe,GAG3B,OAAO,iBAAiB,UAAUN,CAAY;AAG9C,QAAIO,IAAwC;AAC5C,WAAI,OAAO,mBACTA,IAAiB,IAAI,eAAe,MAAM;AACxC,MAAAP,EAAA;AAAA,IACF,CAAC,GACDO,EAAe,QAAQ,SAAS,IAAI,IAG/B,MAAM;AACX,aAAO,oBAAoB,UAAUP,CAAY,GACjDO,KAAA,QAAAA,EAAgB;AAAA,IAClB;AAAA,EACF,GAAG,CAACb,GAASF,GAAkBQ,CAAY,CAAC,GAErC;AAAA,IACL,UAAAF;AAAA,IACA,eAAAH;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { useSideNavbarThemeRequired as t } from "../contexts/SideNavbarThemeContext.js";
3
+ import { useSideNavbarTheme as S } from "../contexts/SideNavbarThemeContext.js";
4
+ import { useSideNavbarConfigRequired as i } from "../contexts/SideNavbarConfigContext.js";
5
+ import { useSideNavbarConfig as p } from "../contexts/SideNavbarConfigContext.js";
6
+ import { useSideNavbarStateRequired as a } from "../contexts/SideNavbarStateContext.js";
7
+ import { useSideNavbarState as N } from "../contexts/SideNavbarStateContext.js";
8
+ function d() {
9
+ const e = t(), r = i(), o = a();
10
+ return { theme: e, config: r, state: o };
11
+ }
12
+ export {
13
+ d as useSideNavbarCombined,
14
+ p as useSideNavbarConfig,
15
+ i as useSideNavbarConfigRequired,
16
+ N as useSideNavbarState,
17
+ a as useSideNavbarStateRequired,
18
+ S as useSideNavbarTheme,
19
+ t as useSideNavbarThemeRequired
20
+ };
21
+ //# sourceMappingURL=useSideNavbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSideNavbar.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useSideNavbar.ts"],"sourcesContent":["\"use client\";\n\nimport { useSideNavbarThemeRequired } from \"../contexts/SideNavbarThemeContext\";\nimport { useSideNavbarConfigRequired } from \"../contexts/SideNavbarConfigContext\";\nimport { useSideNavbarStateRequired } from \"../contexts/SideNavbarStateContext\";\n\n// Layered context hooks\nexport {\n useSideNavbarTheme,\n useSideNavbarThemeRequired,\n} from \"../contexts/SideNavbarThemeContext\";\n\nexport {\n useSideNavbarConfig,\n useSideNavbarConfigRequired,\n} from \"../contexts/SideNavbarConfigContext\";\n\nexport {\n useSideNavbarState,\n useSideNavbarStateRequired,\n} from \"../contexts/SideNavbarStateContext\";\n\n// Subcomponent hooks\nexport { useNavbar, useNavbarRequired } from \"./useNavbar\";\nexport { useSidebar, useSidebarRequired } from \"./useSidebar\";\n\n// Utility hooks\nexport { useResize } from \"./useResize\";\nexport type { UseResizeOptions, UseResizeReturn } from \"./useResize\";\n\nexport { useResponsiveSidebar } from \"./useResponsiveSidebar\";\nexport type {\n UseResponsiveSidebarOptions,\n UseResponsiveSidebarReturn,\n} from \"./useResponsiveSidebar\";\n\nexport { useKeyboardShortcut } from \"./useKeyboardShortcut\";\nexport type { UseKeyboardShortcutOptions } from \"./useKeyboardShortcut\";\n\nexport { useFocusManagement } from \"./useFocusManagement\";\nexport type { UseFocusManagementOptions } from \"./useFocusManagement\";\n\nexport { useGroupState } from \"./useGroupState\";\nexport type { UseGroupStateOptions, UseGroupStateReturn } from \"../types\";\n\n// Navigation and content hooks\nexport { useSideNavbarNavigation } from \"./useSideNavbarNavigation\";\nexport { useSideNavbarContent } from \"./useSideNavbarContent\";\n\n/**\n * Combined hook to access all root contexts\n *\n * Returns an object with theme, config, and state contexts.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { theme, config, state } = useSideNavbarCombined();\n * // Access theme.variant, config.mode, state.collapsed, etc.\n * }\n * ```\n */\nexport function useSideNavbarCombined() {\n // Import here to avoid circular dependencies\n const theme = useSideNavbarThemeRequired();\n const config = useSideNavbarConfigRequired();\n const state = useSideNavbarStateRequired();\n\n return { theme, config, state };\n}\n"],"names":["useSideNavbarCombined","theme","useSideNavbarThemeRequired","config","useSideNavbarConfigRequired","state","useSideNavbarStateRequired"],"mappings":";;;;;;;AA8DO,SAASA,IAAwB;AAEtC,QAAMC,IAAQC,EAAA,GACRC,IAASC,EAAA,GACTC,IAAQC,EAAA;AAEd,SAAO,EAAE,OAAAL,GAAO,QAAAE,GAAQ,OAAAE,EAAA;AAC1B;"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { useSidebarSlot as e } from "../contexts/SidebarSlotContext.js";
3
+ import { useSidebar as s } from "../contexts/SidebarContext.js";
4
+ function u() {
5
+ var l, c, t, r;
6
+ const o = e(), i = s();
7
+ return {
8
+ activeSlot: (l = o == null ? void 0 : o.activeSlot) != null ? l : null,
9
+ setActiveSlot: (c = o == null ? void 0 : o.setActiveSlot) != null ? c : (() => {
10
+ }),
11
+ scrollPosition: (t = i == null ? void 0 : i.scrollPosition) != null ? t : 0,
12
+ setScrollPosition: (r = i == null ? void 0 : i.setScrollPosition) != null ? r : (() => {
13
+ })
14
+ };
15
+ }
16
+ export {
17
+ u as useSideNavbarContent
18
+ };
19
+ //# sourceMappingURL=useSideNavbarContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSideNavbarContent.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useSideNavbarContent.ts"],"sourcesContent":["\"use client\";\n\nimport { useSidebarSlot } from \"../contexts/SidebarSlotContext\";\nimport { useSidebar } from \"../contexts/SidebarContext\";\n\n/**\n * Hook for content/slot management\n *\n * Provides access to sidebar slot state and scroll position.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { activeSlot, setActiveSlot, scrollPosition } = useSideNavbarContent();\n *\n * return (\n * <div>\n * <p>Active slot: {activeSlot}</p>\n * <p>Scroll position: {scrollPosition}px</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useSideNavbarContent() {\n const slotContext = useSidebarSlot();\n const sidebarContext = useSidebar();\n\n return {\n activeSlot: slotContext?.activeSlot ?? null,\n setActiveSlot: slotContext?.setActiveSlot ?? (() => {}),\n scrollPosition: sidebarContext?.scrollPosition ?? 0,\n setScrollPosition: sidebarContext?.setScrollPosition ?? (() => {}),\n };\n}\n"],"names":["useSideNavbarContent","slotContext","useSidebarSlot","sidebarContext","useSidebar","_a","_b","_c","_d"],"mappings":";;;AAwBO,SAASA,IAAuB;;AACrC,QAAMC,IAAcC,EAAA,GACdC,IAAiBC,EAAA;AAEvB,SAAO;AAAA,IACL,aAAYC,IAAAJ,KAAA,gBAAAA,EAAa,eAAb,OAAAI,IAA2B;AAAA,IACvC,gBAAeC,IAAAL,KAAA,gBAAAA,EAAa,kBAAb,OAAAK,KAA+B,MAAM;AAAA,IAAC;AAAA,IACrD,iBAAgBC,IAAAJ,KAAA,gBAAAA,EAAgB,mBAAhB,OAAAI,IAAkC;AAAA,IAClD,oBAAmBC,IAAAL,KAAA,gBAAAA,EAAgB,sBAAhB,OAAAK,KAAsC,MAAM;AAAA,IAAC;AAAA,EAAA;AAEpE;"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { useCallback as c } from "react";
3
+ import { useNavbarRequired as s } from "../contexts/NavbarContext.js";
4
+ import { useSidebarSlot as m } from "../contexts/SidebarSlotContext.js";
5
+ function f() {
6
+ const { activeItem: r, setActiveItem: t } = s(), e = m(), a = c(
7
+ (o, i) => {
8
+ t(o), i && (e != null && e.setActiveSlot) && e.setActiveSlot(i);
9
+ },
10
+ [t, e]
11
+ );
12
+ return {
13
+ activeItem: r,
14
+ setActiveItem: t,
15
+ navigate: a
16
+ };
17
+ }
18
+ export {
19
+ f as useSideNavbarNavigation
20
+ };
21
+ //# sourceMappingURL=useSideNavbarNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSideNavbarNavigation.js","sources":["../../../../../../src/ui/components/SideNavbar/hooks/useSideNavbarNavigation.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useNavbarRequired } from \"../contexts/NavbarContext\";\nimport { useSidebarSlot } from \"../contexts/SidebarSlotContext\";\n\n/**\n * Hook for navigation-related state and actions\n *\n * Provides convenience methods for navigating between navbar items\n * and managing associated sidebar slots.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { activeItem, navigate } = useSideNavbarNavigation();\n *\n * return (\n * <button onClick={() => navigate('dashboard', 'dashboard-content')}>\n * Go to Dashboard\n * </button>\n * );\n * }\n * ```\n */\nexport function useSideNavbarNavigation() {\n const { activeItem, setActiveItem } = useNavbarRequired();\n const slotContext = useSidebarSlot();\n\n const navigate = useCallback(\n (itemId: string, slotId?: string) => {\n setActiveItem(itemId);\n if (slotId && slotContext?.setActiveSlot) {\n slotContext.setActiveSlot(slotId);\n }\n },\n [setActiveItem, slotContext],\n );\n\n return {\n activeItem,\n setActiveItem,\n navigate,\n };\n}\n"],"names":["useSideNavbarNavigation","activeItem","setActiveItem","useNavbarRequired","slotContext","useSidebarSlot","navigate","useCallback","itemId","slotId"],"mappings":";;;;AAyBO,SAASA,IAA0B;AACxC,QAAM,EAAE,YAAAC,GAAY,eAAAC,EAAA,IAAkBC,EAAA,GAChCC,IAAcC,EAAA,GAEdC,IAAWC;AAAA,IACf,CAACC,GAAgBC,MAAoB;AACnC,MAAAP,EAAcM,CAAM,GAChBC,MAAUL,KAAA,QAAAA,EAAa,kBACzBA,EAAY,cAAcK,CAAM;AAAA,IAEpC;AAAA,IACA,CAACP,GAAeE,CAAW;AAAA,EAAA;AAG7B,SAAO;AAAA,IACL,YAAAH;AAAA,IACA,eAAAC;AAAA,IACA,UAAAI;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { jsx as g } from "react/jsx-runtime";
3
+ import { useMemo as x } from "react";
4
+ import { defaultConfigValues as o, SideNavbarConfigContext as b } from "../contexts/SideNavbarConfigContext.js";
5
+ function j({
6
+ children: C,
7
+ mode: r = o.mode,
8
+ resizable: e = o.resizable,
9
+ minWidth: i = o.minWidth,
10
+ maxWidth: t = o.maxWidth,
11
+ snapPoints: n = o.snapPoints,
12
+ responsive: f = o.responsive,
13
+ mobileBreakpoint: a = o.mobileBreakpoint,
14
+ mobileVariant: m = o.mobileVariant,
15
+ overlayBackdrop: u = o.overlayBackdrop,
16
+ persistState: d = o.persistState,
17
+ persistWidth: s = o.persistWidth,
18
+ storageKey: v = o.storageKey,
19
+ keyboardShortcut: l = o.keyboardShortcut,
20
+ enableKeyboardShortcut: p = o.enableKeyboardShortcut
21
+ }) {
22
+ const c = x(
23
+ () => ({
24
+ mode: r,
25
+ resizable: e,
26
+ minWidth: i,
27
+ maxWidth: t,
28
+ snapPoints: n,
29
+ responsive: f,
30
+ mobileBreakpoint: a,
31
+ mobileVariant: m,
32
+ overlayBackdrop: u,
33
+ persistState: d,
34
+ persistWidth: s,
35
+ storageKey: v,
36
+ keyboardShortcut: l,
37
+ enableKeyboardShortcut: p
38
+ }),
39
+ [
40
+ r,
41
+ e,
42
+ i,
43
+ t,
44
+ n,
45
+ f,
46
+ a,
47
+ m,
48
+ u,
49
+ d,
50
+ s,
51
+ v,
52
+ l,
53
+ p
54
+ ]
55
+ );
56
+ return /* @__PURE__ */ g(b.Provider, { value: c, children: C });
57
+ }
58
+ export {
59
+ j as SideNavbarConfigProvider
60
+ };
61
+ //# sourceMappingURL=SideNavbarConfigProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavbarConfigProvider.js","sources":["../../../../../../src/ui/components/SideNavbar/providers/SideNavbarConfigProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport {\n SideNavbarConfigContext,\n defaultConfigValues,\n} from \"../contexts/SideNavbarConfigContext\";\nimport type { SideNavbarConfigProviderProps } from \"../types\";\n\n/**\n * Config Provider for SideNavbar\n *\n * Provides behavioral configuration context for the sidebar.\n * Config values are typically set once and don't change during runtime.\n *\n * @example\n * ```tsx\n * <SideNavbarConfigProvider mode=\"full\" resizable responsive>\n * <SideNavbarStateProvider>\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarStateProvider>\n * </SideNavbarConfigProvider>\n * ```\n */\nexport function SideNavbarConfigProvider({\n children,\n mode = defaultConfigValues.mode,\n resizable = defaultConfigValues.resizable,\n minWidth = defaultConfigValues.minWidth,\n maxWidth = defaultConfigValues.maxWidth,\n snapPoints = defaultConfigValues.snapPoints,\n responsive = defaultConfigValues.responsive,\n mobileBreakpoint = defaultConfigValues.mobileBreakpoint,\n mobileVariant = defaultConfigValues.mobileVariant,\n overlayBackdrop = defaultConfigValues.overlayBackdrop,\n persistState = defaultConfigValues.persistState,\n persistWidth = defaultConfigValues.persistWidth,\n storageKey = defaultConfigValues.storageKey,\n keyboardShortcut = defaultConfigValues.keyboardShortcut,\n enableKeyboardShortcut = defaultConfigValues.enableKeyboardShortcut,\n}: SideNavbarConfigProviderProps) {\n const value = useMemo(\n () => ({\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n }),\n [\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n ],\n );\n\n return (\n <SideNavbarConfigContext.Provider value={value}>\n {children}\n </SideNavbarConfigContext.Provider>\n );\n}\n\nexport default SideNavbarConfigProvider;\n"],"names":["SideNavbarConfigProvider","children","mode","defaultConfigValues","resizable","minWidth","maxWidth","snapPoints","responsive","mobileBreakpoint","mobileVariant","overlayBackdrop","persistState","persistWidth","storageKey","keyboardShortcut","enableKeyboardShortcut","value","useMemo","jsx","SideNavbarConfigContext"],"mappings":";;;;AAwBO,SAASA,EAAyB;AAAA,EACvC,UAAAC;AAAA,EACA,MAAAC,IAAOC,EAAoB;AAAA,EAC3B,WAAAC,IAAYD,EAAoB;AAAA,EAChC,UAAAE,IAAWF,EAAoB;AAAA,EAC/B,UAAAG,IAAWH,EAAoB;AAAA,EAC/B,YAAAI,IAAaJ,EAAoB;AAAA,EACjC,YAAAK,IAAaL,EAAoB;AAAA,EACjC,kBAAAM,IAAmBN,EAAoB;AAAA,EACvC,eAAAO,IAAgBP,EAAoB;AAAA,EACpC,iBAAAQ,IAAkBR,EAAoB;AAAA,EACtC,cAAAS,IAAeT,EAAoB;AAAA,EACnC,cAAAU,IAAeV,EAAoB;AAAA,EACnC,YAAAW,IAAaX,EAAoB;AAAA,EACjC,kBAAAY,IAAmBZ,EAAoB;AAAA,EACvC,wBAAAa,IAAyBb,EAAoB;AAC/C,GAAkC;AAChC,QAAMc,IAAQC;AAAA,IACZ,OAAO;AAAA,MACL,MAAAhB;AAAA,MACA,WAAAE;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,cAAAC;AAAA,MACA,YAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,wBAAAC;AAAA,IAAA;AAAA,IAEF;AAAA,MACEd;AAAA,MACAE;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF;AAGF,SACE,gBAAAG,EAACC,EAAwB,UAAxB,EAAiC,OAAAH,GAC/B,UAAAhB,EAAA,CACH;AAEJ;"}
@@ -0,0 +1,82 @@
1
+ "use client";
2
+ import { jsx as r } from "react/jsx-runtime";
3
+ import { SideNavbarThemeProvider as q } from "./SideNavbarThemeProvider.js";
4
+ import { SideNavbarConfigProvider as w } from "./SideNavbarConfigProvider.js";
5
+ import { SideNavbarStateProvider as y } from "./SideNavbarStateProvider.js";
6
+ function E({
7
+ children: e,
8
+ // Theme props
9
+ variant: i,
10
+ navigationWidth: o,
11
+ contentWidth: d,
12
+ animationDuration: t,
13
+ animationEasing: a,
14
+ // Config props
15
+ mode: m,
16
+ resizable: v,
17
+ minWidth: n,
18
+ maxWidth: f,
19
+ snapPoints: p,
20
+ responsive: S,
21
+ mobileBreakpoint: b,
22
+ mobileVariant: c,
23
+ overlayBackdrop: N,
24
+ persistState: P,
25
+ persistWidth: h,
26
+ storageKey: l,
27
+ keyboardShortcut: u,
28
+ enableKeyboardShortcut: s,
29
+ // State props
30
+ defaultCollapsed: x,
31
+ collapsed: g,
32
+ onCollapseChange: j,
33
+ onWidthChange: C,
34
+ onMobileChange: T,
35
+ exclusiveGroups: k
36
+ }) {
37
+ return /* @__PURE__ */ r(
38
+ q,
39
+ {
40
+ variant: i,
41
+ navigationWidth: o,
42
+ contentWidth: d,
43
+ animationDuration: t,
44
+ animationEasing: a,
45
+ children: /* @__PURE__ */ r(
46
+ w,
47
+ {
48
+ mode: m,
49
+ resizable: v,
50
+ minWidth: n,
51
+ maxWidth: f,
52
+ snapPoints: p,
53
+ responsive: S,
54
+ mobileBreakpoint: b,
55
+ mobileVariant: c,
56
+ overlayBackdrop: N,
57
+ persistState: P,
58
+ persistWidth: h,
59
+ storageKey: l,
60
+ keyboardShortcut: u,
61
+ enableKeyboardShortcut: s,
62
+ children: /* @__PURE__ */ r(
63
+ y,
64
+ {
65
+ defaultCollapsed: x,
66
+ collapsed: g,
67
+ onCollapseChange: j,
68
+ onWidthChange: C,
69
+ onMobileChange: T,
70
+ exclusiveGroups: k,
71
+ children: e
72
+ }
73
+ )
74
+ }
75
+ )
76
+ }
77
+ );
78
+ }
79
+ export {
80
+ E as SideNavbarProvider
81
+ };
82
+ //# sourceMappingURL=SideNavbarProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNavbarProvider.js","sources":["../../../../../../src/ui/components/SideNavbar/providers/SideNavbarProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { SideNavbarThemeProvider } from \"./SideNavbarThemeProvider\";\nimport { SideNavbarConfigProvider } from \"./SideNavbarConfigProvider\";\nimport { SideNavbarStateProvider } from \"./SideNavbarStateProvider\";\nimport type { SideNavbarProviderProps } from \"../types\";\n\n/**\n * Combined Provider for SideNavbar\n *\n * Convenience component that wraps all three context providers\n * (Theme, Config, State) with a single component.\n *\n * For most use cases, use this combined provider.\n * For advanced customization, use individual providers.\n *\n * @example\n * ```tsx\n * <SideNavbarProvider\n * variant=\"elevated\"\n * mode=\"full\"\n * resizable\n * responsive\n * defaultCollapsed\n * onCollapseChange={handleChange}\n * >\n * <SideNavbarRoot>...</SideNavbarRoot>\n * </SideNavbarProvider>\n * ```\n */\nexport function SideNavbarProvider({\n children,\n // Theme props\n variant,\n navigationWidth,\n contentWidth,\n animationDuration,\n animationEasing,\n // Config props\n mode,\n resizable,\n minWidth,\n maxWidth,\n snapPoints,\n responsive,\n mobileBreakpoint,\n mobileVariant,\n overlayBackdrop,\n persistState,\n persistWidth,\n storageKey,\n keyboardShortcut,\n enableKeyboardShortcut,\n // State props\n defaultCollapsed,\n collapsed,\n onCollapseChange,\n onWidthChange,\n onMobileChange,\n exclusiveGroups,\n}: SideNavbarProviderProps) {\n return (\n <SideNavbarThemeProvider\n variant={variant}\n navigationWidth={navigationWidth}\n contentWidth={contentWidth}\n animationDuration={animationDuration}\n animationEasing={animationEasing}\n >\n <SideNavbarConfigProvider\n mode={mode}\n resizable={resizable}\n minWidth={minWidth}\n maxWidth={maxWidth}\n snapPoints={snapPoints}\n responsive={responsive}\n mobileBreakpoint={mobileBreakpoint}\n mobileVariant={mobileVariant}\n overlayBackdrop={overlayBackdrop}\n persistState={persistState}\n persistWidth={persistWidth}\n storageKey={storageKey}\n keyboardShortcut={keyboardShortcut}\n enableKeyboardShortcut={enableKeyboardShortcut}\n >\n <SideNavbarStateProvider\n defaultCollapsed={defaultCollapsed}\n collapsed={collapsed}\n onCollapseChange={onCollapseChange}\n onWidthChange={onWidthChange}\n onMobileChange={onMobileChange}\n exclusiveGroups={exclusiveGroups}\n >\n {children}\n </SideNavbarStateProvider>\n </SideNavbarConfigProvider>\n </SideNavbarThemeProvider>\n );\n}\n\nexport default SideNavbarProvider;\n"],"names":["SideNavbarProvider","children","variant","navigationWidth","contentWidth","animationDuration","animationEasing","mode","resizable","minWidth","maxWidth","snapPoints","responsive","mobileBreakpoint","mobileVariant","overlayBackdrop","persistState","persistWidth","storageKey","keyboardShortcut","enableKeyboardShortcut","defaultCollapsed","collapsed","onCollapseChange","onWidthChange","onMobileChange","exclusiveGroups","jsx","SideNavbarThemeProvider","SideNavbarConfigProvider","SideNavbarStateProvider"],"mappings":";;;;;AA8BO,SAASA,EAAmB;AAAA,EACjC,UAAAC;AAAA;AAAA,EAEA,SAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,iBAAAC;AAAA;AAAA,EAEA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,wBAAAC;AAAA;AAAA,EAEA,kBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,iBAAAC;AACF,GAA4B;AAC1B,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAA1B;AAAA,MACA,iBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,iBAAAC;AAAA,MAEA,UAAA,gBAAAqB;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAAtB;AAAA,UACA,WAAAC;AAAA,UACA,UAAAC;AAAA,UACA,UAAAC;AAAA,UACA,YAAAC;AAAA,UACA,YAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,eAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,cAAAC;AAAA,UACA,cAAAC;AAAA,UACA,YAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,wBAAAC;AAAA,UAEA,UAAA,gBAAAO;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,kBAAAT;AAAA,cACA,WAAAC;AAAA,cACA,kBAAAC;AAAA,cACA,eAAAC;AAAA,cACA,gBAAAC;AAAA,cACA,iBAAAC;AAAA,cAEC,UAAAzB;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}