@fabio.caffarello/react-design-system 3.8.0 → 3.10.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 (418) hide show
  1. package/README.md +2 -1
  2. package/dist/granular/index.js +447 -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/FilterChips/FilterChips.js +67 -0
  81. package/dist/granular/ui/components/FilterChips/FilterChips.js.map +1 -0
  82. package/dist/granular/ui/components/Form/Form.js +184 -0
  83. package/dist/granular/ui/components/Form/Form.js.map +1 -0
  84. package/dist/granular/ui/components/Form/FormContext.js +19 -0
  85. package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
  86. package/dist/granular/ui/components/Form/FormField.js +66 -0
  87. package/dist/granular/ui/components/Form/FormField.js.map +1 -0
  88. package/dist/granular/ui/components/Form/FormProvider.js +17 -0
  89. package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
  90. package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
  91. package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
  92. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
  93. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
  94. package/dist/granular/ui/components/Header/Header.js +98 -0
  95. package/dist/granular/ui/components/Header/Header.js.map +1 -0
  96. package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
  97. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
  98. package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
  99. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
  100. package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
  101. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
  102. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
  103. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
  104. package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
  105. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
  106. package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
  107. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
  108. package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
  109. package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
  110. package/dist/granular/ui/components/Menu/Menu.js +45 -0
  111. package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
  112. package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
  113. package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
  114. package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
  115. package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
  116. package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
  117. package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
  118. package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
  119. package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
  120. package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
  121. package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
  122. package/dist/granular/ui/components/Modal/Modal.js +171 -0
  123. package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
  124. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
  125. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
  126. package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
  127. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
  128. package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
  129. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
  130. package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
  131. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
  132. package/dist/granular/ui/components/Popover/Popover.js +171 -0
  133. package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
  134. package/dist/granular/ui/components/Rating/Rating.js +110 -0
  135. package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
  136. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
  137. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
  138. package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
  139. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
  140. package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
  141. package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
  142. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
  143. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
  144. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
  145. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
  146. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
  147. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
  148. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
  149. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
  150. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
  151. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
  152. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
  153. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
  154. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
  155. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
  156. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
  157. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
  158. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
  159. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
  160. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
  161. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
  162. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
  163. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
  164. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
  165. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
  166. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
  167. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
  168. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
  169. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
  170. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
  171. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
  172. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
  173. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
  174. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
  175. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
  176. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
  177. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
  178. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
  179. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
  180. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
  181. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
  182. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
  183. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
  184. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
  185. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
  186. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
  187. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
  188. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
  189. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
  190. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
  191. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
  192. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
  193. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
  194. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
  195. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
  196. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
  197. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
  198. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
  199. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
  200. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
  201. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
  202. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
  203. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
  204. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
  205. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
  206. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
  207. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
  208. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
  209. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
  210. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
  211. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
  212. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
  213. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
  214. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
  215. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
  216. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
  217. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
  218. package/dist/granular/ui/components/Stat/Stat.js +84 -0
  219. package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
  220. package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
  221. package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
  222. package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
  223. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
  224. package/dist/granular/ui/components/Table/Table.js +162 -0
  225. package/dist/granular/ui/components/Table/Table.js.map +1 -0
  226. package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
  227. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
  228. package/dist/granular/ui/components/Table/TableActions.js +44 -0
  229. package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
  230. package/dist/granular/ui/components/Table/TableBody.js +134 -0
  231. package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
  232. package/dist/granular/ui/components/Table/TableCell.js +40 -0
  233. package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
  234. package/dist/granular/ui/components/Table/TableContext.js +19 -0
  235. package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
  236. package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
  237. package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
  238. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
  239. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
  240. package/dist/granular/ui/components/Table/TableFilters.js +48 -0
  241. package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
  242. package/dist/granular/ui/components/Table/TableHeader.js +45 -0
  243. package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
  244. package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
  245. package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
  246. package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
  247. package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
  248. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
  249. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
  250. package/dist/granular/ui/components/Table/TablePagination.js +56 -0
  251. package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
  252. package/dist/granular/ui/components/Table/TableProvider.js +244 -0
  253. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
  254. package/dist/granular/ui/components/Table/TableRow.js +95 -0
  255. package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
  256. package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
  257. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
  258. package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
  259. package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
  260. package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
  261. package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
  262. package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
  263. package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
  264. package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
  265. package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
  266. package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
  267. package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
  268. package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
  269. package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
  270. package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
  271. package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
  272. package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
  273. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
  274. package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
  275. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
  276. package/dist/granular/ui/components/Toast/Toast.js +159 -0
  277. package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
  278. package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
  279. package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
  280. package/dist/granular/ui/components/Toast/useToast.js +64 -0
  281. package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
  282. package/dist/granular/ui/hooks/createGenericContext.js +27 -0
  283. package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
  284. package/dist/granular/ui/hooks/focusable.js +14 -0
  285. package/dist/granular/ui/hooks/focusable.js.map +1 -0
  286. package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
  287. package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
  288. package/dist/granular/ui/hooks/useCollapsible.js +37 -0
  289. package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
  290. package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
  291. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
  292. package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
  293. package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
  294. package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
  295. package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
  296. package/dist/granular/ui/layouts/Container/Container.js +73 -0
  297. package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
  298. package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
  299. package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
  300. package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
  301. package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
  302. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
  303. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
  304. package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
  305. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
  306. package/dist/granular/ui/primitives/Button/Button.js +288 -0
  307. package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
  308. package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
  309. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
  310. package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
  311. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
  312. package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
  313. package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
  314. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
  315. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
  316. package/dist/granular/ui/primitives/Info/Info.js +57 -0
  317. package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
  318. package/dist/granular/ui/primitives/Input/Input.js +351 -0
  319. package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
  320. package/dist/granular/ui/primitives/Label/Label.js +61 -0
  321. package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
  322. package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
  323. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
  324. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
  325. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
  326. package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
  327. package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
  328. package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
  329. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
  330. package/dist/granular/ui/primitives/Select/Select.js +210 -0
  331. package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
  332. package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
  333. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
  334. package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
  335. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
  336. package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
  337. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
  338. package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
  339. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
  340. package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
  341. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
  342. package/dist/granular/ui/primitives/Text/Text.js +118 -0
  343. package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
  344. package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
  345. package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
  346. package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
  347. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
  348. package/dist/granular/ui/providers/AppProvider.js +50 -0
  349. package/dist/granular/ui/providers/AppProvider.js.map +1 -0
  350. package/dist/granular/ui/providers/ConfigProvider.js +95 -0
  351. package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
  352. package/dist/granular/ui/providers/DialogContext.js +20 -0
  353. package/dist/granular/ui/providers/DialogContext.js.map +1 -0
  354. package/dist/granular/ui/providers/DialogProvider.js +32 -0
  355. package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
  356. package/dist/granular/ui/providers/ThemeProvider.js +56 -0
  357. package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
  358. package/dist/granular/ui/providers/ToastContext.js +20 -0
  359. package/dist/granular/ui/providers/ToastContext.js.map +1 -0
  360. package/dist/granular/ui/providers/ToastProvider.js +47 -0
  361. package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
  362. package/dist/granular/ui/providers/providers-bundle.js +23 -0
  363. package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
  364. package/dist/granular/ui/tokens/animations.js +106 -0
  365. package/dist/granular/ui/tokens/animations.js.map +1 -0
  366. package/dist/granular/ui/tokens/borders.js +54 -0
  367. package/dist/granular/ui/tokens/borders.js.map +1 -0
  368. package/dist/granular/ui/tokens/breakpoints.js +43 -0
  369. package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
  370. package/dist/granular/ui/tokens/colors/brand.js +67 -0
  371. package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
  372. package/dist/granular/ui/tokens/colors/index.js +25 -0
  373. package/dist/granular/ui/tokens/colors/index.js.map +1 -0
  374. package/dist/granular/ui/tokens/colors/primitives.js +320 -0
  375. package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
  376. package/dist/granular/ui/tokens/colors/semantic.js +212 -0
  377. package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
  378. package/dist/granular/ui/tokens/colors/types.js +18 -0
  379. package/dist/granular/ui/tokens/colors/types.js.map +1 -0
  380. package/dist/granular/ui/tokens/colors/utils.js +131 -0
  381. package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
  382. package/dist/granular/ui/tokens/opacity.js +59 -0
  383. package/dist/granular/ui/tokens/opacity.js.map +1 -0
  384. package/dist/granular/ui/tokens/radius.js +76 -0
  385. package/dist/granular/ui/tokens/radius.js.map +1 -0
  386. package/dist/granular/ui/tokens/shadows.js +63 -0
  387. package/dist/granular/ui/tokens/shadows.js.map +1 -0
  388. package/dist/granular/ui/tokens/sidebar.js +92 -0
  389. package/dist/granular/ui/tokens/sidebar.js.map +1 -0
  390. package/dist/granular/ui/tokens/spacing.js +143 -0
  391. package/dist/granular/ui/tokens/spacing.js.map +1 -0
  392. package/dist/granular/ui/tokens/switch.js +51 -0
  393. package/dist/granular/ui/tokens/switch.js.map +1 -0
  394. package/dist/granular/ui/tokens/typography.js +146 -0
  395. package/dist/granular/ui/tokens/typography.js.map +1 -0
  396. package/dist/granular/ui/tokens/z-index.js +79 -0
  397. package/dist/granular/ui/tokens/z-index.js.map +1 -0
  398. package/dist/granular/ui/utils/cn.js +10 -0
  399. package/dist/granular/ui/utils/cn.js.map +1 -0
  400. package/dist/granular/ui/utils/cva.js +14 -0
  401. package/dist/granular/ui/utils/cva.js.map +1 -0
  402. package/dist/granular/ui/utils/mergeRefs.js +11 -0
  403. package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
  404. package/dist/granular/vite.svg +1 -0
  405. package/dist/index.cjs +46 -46
  406. package/dist/index.cjs.map +1 -1
  407. package/dist/index.js +1172 -1135
  408. package/dist/index.js.map +1 -1
  409. package/dist/react-design-system.css +1 -1
  410. package/dist/server/index.cjs +23 -23
  411. package/dist/server/index.cjs.map +1 -1
  412. package/dist/server/index.js +882 -1179
  413. package/dist/server/index.js.map +1 -1
  414. package/dist/ui/components/FilterChips/FilterChips.d.ts +83 -0
  415. package/dist/ui/components/FilterChips/index.d.ts +2 -0
  416. package/dist/ui/components/index.d.ts +2 -0
  417. package/dist/ui/server.d.ts +2 -0
  418. package/package.json +9 -2
@@ -0,0 +1,274 @@
1
+ "use client";
2
+ import { jsx as n, jsxs as o, Fragment as V } from "react/jsx-runtime";
3
+ import { useState as y, useRef as S, useCallback as O, useEffect as b } from "react";
4
+ import { createPortal as U } from "react-dom";
5
+ import { Search as Z, Command as _ } from "lucide-react";
6
+ import { getSpacingClass as r } from "../../tokens/spacing.js";
7
+ import { getRadiusClass as K } from "../../tokens/radius.js";
8
+ import { getShadowClass as z } from "../../tokens/shadows.js";
9
+ import { getZIndexClass as L } from "../../tokens/z-index.js";
10
+ import { getAnimationClass as g } from "../../tokens/animations.js";
11
+ import B from "../../primitives/Input/Input.js";
12
+ function ne({
13
+ items: E,
14
+ open: v,
15
+ defaultOpen: j = !1,
16
+ onOpenChange: d,
17
+ trigger: $,
18
+ placeholder: P = "Type a command or search...",
19
+ emptyMessage: R = "No commands found",
20
+ className: A = ""
21
+ }) {
22
+ const [q, F] = y(j), [m, w] = y(""), [l, f] = y(0), k = S(null), p = S(null), x = v !== void 0, h = x ? v : q, i = E.filter((e) => {
23
+ var a, D;
24
+ if (!m) return !0;
25
+ const t = m.toLowerCase(), s = e.label.toLowerCase().includes(t), I = (a = e.description) == null ? void 0 : a.toLowerCase().includes(t), u = (D = e.keywords) == null ? void 0 : D.some(
26
+ (T) => T.toLowerCase().includes(t)
27
+ );
28
+ return s || I || u;
29
+ }), N = i.reduce(
30
+ (e, t) => {
31
+ const s = t.group || "Other";
32
+ return e[s] || (e[s] = []), e[s].push(t), e;
33
+ },
34
+ {}
35
+ ), c = O(
36
+ (e) => {
37
+ x || F(e), d == null || d(e), e && (w(""), f(0), setTimeout(() => {
38
+ var t;
39
+ return (t = k.current) == null ? void 0 : t.focus();
40
+ }, 0));
41
+ },
42
+ [x, d]
43
+ ), C = (e) => {
44
+ e.action(), c(!1);
45
+ }, M = (e) => {
46
+ if (e.key === "Escape") {
47
+ c(!1);
48
+ return;
49
+ }
50
+ if (e.key === "ArrowDown") {
51
+ e.preventDefault(), f((t) => Math.min(t + 1, i.length - 1));
52
+ return;
53
+ }
54
+ if (e.key === "ArrowUp") {
55
+ e.preventDefault(), f((t) => Math.max(t - 1, 0));
56
+ return;
57
+ }
58
+ if (e.key === "Enter") {
59
+ e.preventDefault(), i[l] && C(i[l]);
60
+ return;
61
+ }
62
+ };
63
+ b(() => {
64
+ if (p.current && l >= 0) {
65
+ const e = p.current.querySelector(
66
+ `[data-index="${l}"]`
67
+ );
68
+ e && typeof e.scrollIntoView == "function" && e.scrollIntoView({
69
+ block: "nearest",
70
+ behavior: "smooth"
71
+ });
72
+ }
73
+ }, [l]), b(() => {
74
+ f(0);
75
+ }, [m]), b(() => {
76
+ const e = (t) => {
77
+ (t.metaKey || t.ctrlKey) && t.key === "k" && (t.preventDefault(), c(!h));
78
+ };
79
+ return document.addEventListener(
80
+ "keydown",
81
+ e
82
+ ), () => document.removeEventListener(
83
+ "keydown",
84
+ e
85
+ );
86
+ }, [h, c]);
87
+ const Q = h ? /* @__PURE__ */ n(
88
+ "div",
89
+ {
90
+ className: `
91
+ fixed
92
+ inset-0
93
+ ${L("modal-backdrop")}
94
+ bg-scrim
95
+ flex
96
+ items-start
97
+ justify-center
98
+ pt-[20vh]
99
+ ${g("base")}
100
+ `,
101
+ onClick: () => c(!1),
102
+ children: /* @__PURE__ */ o(
103
+ "div",
104
+ {
105
+ className: `
106
+ w-full
107
+ max-w-2xl
108
+ ${r("base", "mx")}
109
+ bg-surface-overlay
110
+ ${K("lg")}
111
+ ${z("xl")}
112
+ ${L("modal")}
113
+ ${g("base")}
114
+ ${A}
115
+ `,
116
+ onClick: (e) => e.stopPropagation(),
117
+ children: [
118
+ /* @__PURE__ */ o(
119
+ "div",
120
+ {
121
+ className: `
122
+ flex
123
+ items-center
124
+ ${r("md", "gap")}
125
+ ${r("base", "p")}
126
+ border-b
127
+ border-line-default
128
+ `,
129
+ children: [
130
+ /* @__PURE__ */ n(Z, { className: "h-5 w-5 text-fg-secondary" }),
131
+ /* @__PURE__ */ n(
132
+ B,
133
+ {
134
+ ref: k,
135
+ value: m,
136
+ onChange: (e) => w(e.target.value),
137
+ onKeyDown: M,
138
+ placeholder: P,
139
+ className: "flex-1 border-0 focus:ring-0",
140
+ autoFocus: !0
141
+ }
142
+ ),
143
+ /* @__PURE__ */ o(
144
+ "div",
145
+ {
146
+ className: `
147
+ flex
148
+ items-center
149
+ ${r("xs", "gap")}
150
+ ${r("sm", "px")}
151
+ ${r("xs", "py")}
152
+ ${K("sm")}
153
+ bg-surface-muted
154
+ text-xs
155
+ text-fg-tertiary
156
+ `,
157
+ children: [
158
+ /* @__PURE__ */ n(_, { className: "h-3 w-3" }),
159
+ /* @__PURE__ */ n("span", { children: "K" })
160
+ ]
161
+ }
162
+ )
163
+ ]
164
+ }
165
+ ),
166
+ /* @__PURE__ */ n(
167
+ "div",
168
+ {
169
+ ref: p,
170
+ className: `
171
+ max-h-96
172
+ overflow-y-auto
173
+ ${r("sm", "py")}
174
+ `,
175
+ children: Object.keys(N).length === 0 ? /* @__PURE__ */ n(
176
+ "div",
177
+ {
178
+ className: `
179
+ ${r("lg", "p")}
180
+ text-center
181
+ text-sm
182
+ text-fg-secondary
183
+ `,
184
+ children: R
185
+ }
186
+ ) : Object.entries(N).map(([e, t]) => /* @__PURE__ */ o("div", { children: [
187
+ e !== "Other" && /* @__PURE__ */ n(
188
+ "div",
189
+ {
190
+ className: `
191
+ ${r("sm", "px")}
192
+ ${r("xs", "py")}
193
+ text-xs
194
+ font-semibold
195
+ text-fg-tertiary
196
+ uppercase
197
+ tracking-wider
198
+ `,
199
+ children: e
200
+ }
201
+ ),
202
+ t.map((s, I) => {
203
+ const u = i.indexOf(s), a = u === l;
204
+ return /* @__PURE__ */ o(
205
+ "button",
206
+ {
207
+ type: "button",
208
+ "data-index": u,
209
+ onClick: () => C(s),
210
+ className: `
211
+ w-full
212
+ flex
213
+ items-center
214
+ ${r("md", "gap")}
215
+ ${r("base", "px")}
216
+ ${r("md", "py")}
217
+ text-left
218
+ ${g("base")}
219
+ ${a ? "bg-surface-brand-muted" : "hover:bg-surface-hover"}
220
+ `,
221
+ children: [
222
+ s.icon && /* @__PURE__ */ n(
223
+ "div",
224
+ {
225
+ className: `
226
+ ${a ? "text-fg-brand-emphasis" : "text-fg-secondary"}
227
+ `,
228
+ children: s.icon
229
+ }
230
+ ),
231
+ /* @__PURE__ */ o("div", { className: "flex-1 min-w-0", children: [
232
+ /* @__PURE__ */ n(
233
+ "div",
234
+ {
235
+ className: `
236
+ text-sm
237
+ font-medium
238
+ ${a ? "text-fg-brand-emphasis" : "text-fg-primary"}
239
+ `,
240
+ children: s.label
241
+ }
242
+ ),
243
+ s.description && // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;
244
+ // caption role preserved, intensity raised for contrast.
245
+ /* @__PURE__ */ n(
246
+ "div",
247
+ {
248
+ className: `text-xs ${a ? "text-fg-secondary" : "text-fg-tertiary"} ${r("0.5", "mt")}`,
249
+ children: s.description
250
+ }
251
+ )
252
+ ] })
253
+ ]
254
+ },
255
+ s.id
256
+ );
257
+ })
258
+ ] }, e))
259
+ }
260
+ )
261
+ ]
262
+ }
263
+ )
264
+ }
265
+ ) : null;
266
+ return /* @__PURE__ */ o(V, { children: [
267
+ $ ? /* @__PURE__ */ n("div", { onClick: () => c(!0), children: $ }) : null,
268
+ typeof window != "undefined" && U(Q, document.body)
269
+ ] });
270
+ }
271
+ export {
272
+ ne as default
273
+ };
274
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sources":["../../../../../src/ui/components/CommandPalette/CommandPalette.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useState,\n useEffect,\n useRef,\n useCallback,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Search, Command } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport Input from \"../../primitives/Input/Input\";\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n keywords?: string[];\n group?: string;\n action: () => void;\n}\n\nexport interface CommandPaletteProps {\n items: CommandItem[];\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n placeholder?: string;\n emptyMessage?: string;\n className?: string;\n}\n\n/**\n * CommandPalette Component\n *\n * A command palette component for quick command search and execution.\n * Supports keyboard navigation, grouping, and filtering.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <CommandPalette\n * items={[\n * { id: '1', label: 'New File', action: () => console.log('New File') },\n * { id: '2', label: 'Save', action: () => console.log('Save') },\n * ]}\n * />\n * ```\n */\nexport default function CommandPalette({\n items,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger,\n placeholder = \"Type a command or search...\",\n emptyMessage = \"No commands found\",\n className = \"\",\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Filter items based on search query\n const filteredItems = items.filter((item) => {\n if (!searchQuery) return true;\n const query = searchQuery.toLowerCase();\n const matchesLabel = item.label.toLowerCase().includes(query);\n const matchesDescription = item.description?.toLowerCase().includes(query);\n const matchesKeywords = item.keywords?.some((keyword) =>\n keyword.toLowerCase().includes(query),\n );\n return matchesLabel || matchesDescription || matchesKeywords;\n });\n\n // Group items\n const groupedItems = filteredItems.reduce(\n (acc, item) => {\n const group = item.group || \"Other\";\n if (!acc[group]) {\n acc[group] = [];\n }\n acc[group].push(item);\n return acc;\n },\n {} as Record<string, CommandItem[]>,\n );\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n if (newOpen) {\n setSearchQuery(\"\");\n setSelectedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const handleSelect = (item: CommandItem) => {\n item.action();\n handleOpenChange(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n handleOpenChange(false);\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.min(prev + 1, filteredItems.length - 1));\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\n return;\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredItems[selectedIndex]) {\n handleSelect(filteredItems[selectedIndex]);\n }\n return;\n }\n };\n\n // Scroll selected item into view\n useEffect(() => {\n if (listRef.current && selectedIndex >= 0) {\n const selectedElement = listRef.current.querySelector(\n `[data-index=\"${selectedIndex}\"]`,\n );\n if (\n selectedElement &&\n typeof selectedElement.scrollIntoView === \"function\"\n ) {\n selectedElement.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedIndex]);\n\n // Reset selected index when search changes\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery]);\n\n // Keyboard shortcut (Cmd/Ctrl + K)\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n handleOpenChange(!isOpen);\n }\n };\n\n document.addEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n return () =>\n document.removeEventListener(\n \"keydown\",\n handleKeyDown as unknown as EventListener,\n );\n }, [isOpen, handleOpenChange]);\n\n const commandPaletteContent = isOpen ? (\n <div\n className={`\n fixed\n inset-0\n ${getZIndexClass(\"modal-backdrop\")}\n bg-scrim\n flex\n items-start\n justify-center\n pt-[20vh]\n ${getAnimationClass(\"base\")}\n `}\n onClick={() => handleOpenChange(false)}\n >\n <div\n className={`\n w-full\n max-w-2xl\n ${getSpacingClass(\"base\", \"mx\")}\n bg-surface-overlay\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"xl\")}\n ${getZIndexClass(\"modal\")}\n ${getAnimationClass(\"base\")}\n ${className}\n `}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Search Input */}\n <div\n className={`\n flex\n items-center\n ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"p\")}\n border-b\n border-line-default\n `}\n >\n <Search className=\"h-5 w-5 text-fg-secondary\" />\n <Input\n ref={inputRef}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 border-0 focus:ring-0\"\n autoFocus\n />\n <div\n className={`\n flex\n items-center\n ${getSpacingClass(\"xs\", \"gap\")}\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n ${getRadiusClass(\"sm\")}\n bg-surface-muted\n text-xs\n text-fg-tertiary\n `}\n >\n <Command className=\"h-3 w-3\" />\n <span>K</span>\n </div>\n </div>\n\n {/* Results */}\n <div\n ref={listRef}\n className={`\n max-h-96\n overflow-y-auto\n ${getSpacingClass(\"sm\", \"py\")}\n `}\n >\n {Object.keys(groupedItems).length === 0 ? (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n text-center\n text-sm\n text-fg-secondary\n `}\n >\n {emptyMessage}\n </div>\n ) : (\n Object.entries(groupedItems).map(([group, groupItems]) => (\n <div key={group}>\n {group !== \"Other\" && (\n <div\n className={`\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"xs\", \"py\")}\n text-xs\n font-semibold\n text-fg-tertiary\n uppercase\n tracking-wider\n `}\n >\n {group}\n </div>\n )}\n {groupItems.map((item, _index) => {\n const globalIndex = filteredItems.indexOf(item);\n const isSelected = globalIndex === selectedIndex;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n data-index={globalIndex}\n onClick={() => handleSelect(item)}\n className={`\n w-full\n flex\n items-center\n ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"px\")}\n ${getSpacingClass(\"md\", \"py\")}\n text-left\n ${getAnimationClass(\"base\")}\n ${isSelected ? \"bg-surface-brand-muted\" : \"hover:bg-surface-hover\"}\n `}\n >\n {item.icon && (\n <div\n className={`\n ${\n isSelected\n ? \"text-fg-brand-emphasis\"\n : \"text-fg-secondary\"\n }\n `}\n >\n {item.icon}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div\n className={`\n text-sm\n font-medium\n ${isSelected ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.label}\n </div>\n {item.description && (\n // fg-secondary on selected: brand-muted bg drops fg-tertiary below AA;\n // caption role preserved, intensity raised for contrast.\n <div\n className={`text-xs ${isSelected ? \"text-fg-secondary\" : \"text-fg-tertiary\"} ${getSpacingClass(\"0.5\", \"mt\")}`}\n >\n {item.description}\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <>\n {trigger ? (\n <div onClick={() => handleOpenChange(true)}>{trigger}</div>\n ) : null}\n {typeof window !== \"undefined\" &&\n createPortal(commandPaletteContent, document.body)}\n </>\n );\n}\n"],"names":["CommandPalette","items","controlledOpen","defaultOpen","onOpenChange","trigger","placeholder","emptyMessage","className","internalOpen","setInternalOpen","useState","searchQuery","setSearchQuery","selectedIndex","setSelectedIndex","inputRef","useRef","listRef","isControlled","isOpen","filteredItems","item","query","matchesLabel","matchesDescription","_a","matchesKeywords","_b","keyword","groupedItems","acc","group","handleOpenChange","useCallback","newOpen","handleSelect","handleKeyDown","prev","useEffect","selectedElement","e","commandPaletteContent","jsx","getZIndexClass","getAnimationClass","jsxs","getSpacingClass","getRadiusClass","getShadowClass","Search","Input","Command","groupItems","_index","globalIndex","isSelected","Fragment","createPortal"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ var t = Object.defineProperty, b = Object.defineProperties;
3
+ var x = Object.getOwnPropertyDescriptors;
4
+ var s = Object.getOwnPropertySymbols;
5
+ var p = Object.prototype.hasOwnProperty, u = Object.prototype.propertyIsEnumerable;
6
+ var n = (d, e, a) => e in d ? t(d, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : d[e] = a, o = (d, e) => {
7
+ for (var a in e || (e = {}))
8
+ p.call(e, a) && n(d, a, e[a]);
9
+ if (s)
10
+ for (var a of s(e))
11
+ u.call(e, a) && n(d, a, e[a]);
12
+ return d;
13
+ }, c = (d, e) => b(d, x(e));
14
+ import { jsxs as f, jsx as l } from "react/jsx-runtime";
15
+ import { Container as r } from "../../layouts/Container/Container.js";
16
+ import g from "../SideNavbar/SideNavbar.js";
17
+ function X({
18
+ sidebar: d,
19
+ children: e,
20
+ header: a,
21
+ footer: i,
22
+ defaultCollapsed: m = !1,
23
+ sidebarProps: h
24
+ }) {
25
+ return /* @__PURE__ */ f("div", { className: "flex h-screen overflow-hidden", children: [
26
+ d && /* @__PURE__ */ l(g, c(o({ defaultCollapsed: m }, h), { children: d })),
27
+ /* @__PURE__ */ f("div", { className: "flex-1 flex flex-col overflow-hidden", children: [
28
+ a && /* @__PURE__ */ l("header", { className: "border-b bg-surface-base", children: /* @__PURE__ */ l(r, { maxWidth: "full", paddingX: "base", paddingY: "sm", children: a }) }),
29
+ /* @__PURE__ */ l("main", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ l(r, { maxWidth: "xl", paddingX: "base", paddingY: "base", children: e }) }),
30
+ i && /* @__PURE__ */ l("footer", { className: "border-t bg-surface-base", children: /* @__PURE__ */ l(r, { maxWidth: "full", paddingX: "base", paddingY: "sm", children: i }) })
31
+ ] })
32
+ ] });
33
+ }
34
+ export {
35
+ X as DashboardLayout
36
+ };
37
+ //# sourceMappingURL=DashboardLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardLayout.js","sources":["../../../../../src/ui/components/DashboardLayout/DashboardLayout.tsx"],"sourcesContent":["import React from \"react\";\nimport { SideNavbar } from \"../../components\";\nimport { Container } from \"../../layouts/Container/Container\";\n\nexport interface DashboardLayoutProps {\n /**\n * Sidebar content - use SideNavbar.Navbar and SideNavbar.Sidebar subcomponents\n */\n sidebar?: React.ReactNode;\n /**\n * Main content area\n */\n children: React.ReactNode;\n /**\n * Header content\n */\n header?: React.ReactNode;\n /**\n * Footer content\n */\n footer?: React.ReactNode;\n /**\n * Sidebar collapsed by default\n * @default false\n */\n defaultCollapsed?: boolean;\n /**\n * SideNavbar props\n */\n sidebarProps?: Omit<React.ComponentProps<typeof SideNavbar>, \"children\">;\n}\n\n/**\n * DashboardLayout - A complete dashboard page layout\n *\n * Combines SideNavbar, Container, and Stack to create a full dashboard structure.\n * This template provides a complete page layout with sensible defaults.\n *\n * @example\n * ```tsx\n * <DashboardLayout\n * sidebar={\n * <>\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * </SideNavbar.Navbar>\n * <SideNavbar.Sidebar>\n * <SideNavbar.Sidebar.Content>Content</SideNavbar.Sidebar.Content>\n * </SideNavbar.Sidebar>\n * </>\n * }\n * header={<Header />}\n * >\n * <MainContent />\n * </DashboardLayout>\n * ```\n */\nexport function DashboardLayout({\n sidebar,\n children,\n header,\n footer,\n defaultCollapsed = false,\n sidebarProps,\n}: DashboardLayoutProps) {\n return (\n <div className=\"flex h-screen overflow-hidden\">\n {/* Sidebar */}\n {sidebar && (\n <SideNavbar defaultCollapsed={defaultCollapsed} {...sidebarProps}>\n {sidebar}\n </SideNavbar>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n {/* Header */}\n {header && (\n <header className=\"border-b bg-surface-base\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {header}\n </Container>\n </header>\n )}\n\n {/* Main Content */}\n <main className=\"flex-1 overflow-y-auto\">\n <Container maxWidth=\"xl\" paddingX=\"base\" paddingY=\"base\">\n {children}\n </Container>\n </main>\n\n {/* Footer */}\n {footer && (\n <footer className=\"border-t bg-surface-base\">\n <Container maxWidth=\"full\" paddingX=\"base\" paddingY=\"sm\">\n {footer}\n </Container>\n </footer>\n )}\n </div>\n </div>\n );\n}\n"],"names":["DashboardLayout","sidebar","children","header","footer","defaultCollapsed","sidebarProps","jsxs","jsx","SideNavbar","__spreadProps","__spreadValues","Container"],"mappings":";;;;;;;;;;;;;;;;AAyDO,SAASA,EAAgB;AAAA,EAC9B,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,cAAAC;AACF,GAAyB;AACvB,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,iCAEZ,UAAA;AAAA,IAAAN,KACC,gBAAAO,EAACC,GAAAC,EAAAC,EAAA,EAAW,kBAAAN,KAAwCC,IAAnD,EACE,UAAAL,IACH;AAAA,IAIF,gBAAAM,EAAC,OAAA,EAAI,WAAU,wCAEZ,UAAA;AAAA,MAAAJ,KACC,gBAAAK,EAAC,UAAA,EAAO,WAAU,4BAChB,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,QAAO,UAAS,QAAO,UAAS,MACjD,aACH,GACF;AAAA,MAIF,gBAAAJ,EAAC,QAAA,EAAK,WAAU,0BACd,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,MAAK,UAAS,QAAO,UAAS,QAC/C,UAAAV,GACH,GACF;AAAA,MAGCE,KACC,gBAAAI,EAAC,UAAA,EAAO,WAAU,4BAChB,UAAA,gBAAAA,EAACI,GAAA,EAAU,UAAS,QAAO,UAAS,QAAO,UAAS,MACjD,aACH,EAAA,CACF;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,155 @@
1
+ "use client";
2
+ var A = Object.defineProperty, z = Object.defineProperties;
3
+ var ee = Object.getOwnPropertyDescriptors;
4
+ var $ = Object.getOwnPropertySymbols;
5
+ var te = Object.prototype.hasOwnProperty, se = Object.prototype.propertyIsEnumerable;
6
+ var U = (s, t, o) => t in s ? A(s, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : s[t] = o, g = (s, t) => {
7
+ for (var o in t || (t = {}))
8
+ te.call(t, o) && U(s, o, t[o]);
9
+ if ($)
10
+ for (var o of $(t))
11
+ se.call(t, o) && U(s, o, t[o]);
12
+ return s;
13
+ }, h = (s, t) => z(s, ee(t));
14
+ import { jsxs as x, jsx as c } from "react/jsx-runtime";
15
+ import { useState as oe, useMemo as re } from "react";
16
+ import { Download as ne } from "lucide-react";
17
+ import ae from "../Table/Table.js";
18
+ import { Button as le } from "../../primitives/Button/Button.js";
19
+ import { getSpacingClass as i } from "../../tokens/spacing.js";
20
+ import { getRadiusClass as ce } from "../../tokens/radius.js";
21
+ function $e({
22
+ columns: s,
23
+ data: t,
24
+ loading: o = !1,
25
+ onSort: y,
26
+ sortColumn: L,
27
+ sortDirection: N,
28
+ multiSort: ie = !1,
29
+ // Grouping props are @experimental — see DataGridGroup JSDoc. Accepted
30
+ // for forward-compatibility but not yet wired to rendering.
31
+ groups: me,
32
+ onGroupChange: pe,
33
+ groupable: de = !1,
34
+ resizable: R = !0,
35
+ reorderable: ue = !1,
36
+ onColumnReorder: fe,
37
+ columnWidths: k,
38
+ onColumnResize: d,
39
+ selectable: S = !1,
40
+ selectedRows: O,
41
+ onSelectionChange: _,
42
+ rowId: D,
43
+ exportable: j = !1,
44
+ onExport: v,
45
+ exportFormats: W = ["csv", "xlsx", "json"],
46
+ pagination: B,
47
+ filters: G,
48
+ actions: T,
49
+ toolbarActions: w,
50
+ virtualScrolling: E = !1,
51
+ virtualScrollingOptions: I,
52
+ emptyMessage: J,
53
+ emptyStateTitle: M,
54
+ emptyStateMessage: V,
55
+ emptyStateIllustration: q,
56
+ emptyStateAction: F,
57
+ className: H = ""
58
+ }) {
59
+ const [u, K] = oe(k || {}), P = re(() => s.map((e) => h(g({}, e), {
60
+ width: u[e.key] || e.defaultWidth
61
+ })), [s, u]), Q = (e) => {
62
+ v ? v(e) : e === "csv" ? X(t, s) : e === "json" && Y(t);
63
+ }, X = (e, n) => {
64
+ const a = n.filter((r) => r.exportable !== !1).map((r) => r.label || r.key), m = e.map(
65
+ (r) => n.filter((b) => b.exportable !== !1).map((b) => {
66
+ const p = r[b.key];
67
+ return typeof p == "string" && p.includes(",") ? `"${p}"` : p;
68
+ })
69
+ ), l = [a.join(","), ...m.map((r) => r.join(","))].join(`
70
+ `), Z = new Blob([l], { type: "text/csv" }), C = URL.createObjectURL(Z), f = document.createElement("a");
71
+ f.href = C, f.download = `export-${Date.now()}.csv`, f.click(), URL.revokeObjectURL(C);
72
+ }, Y = (e) => {
73
+ const n = JSON.stringify(e, null, 2), a = new Blob([n], { type: "application/json" }), m = URL.createObjectURL(a), l = document.createElement("a");
74
+ l.href = m, l.download = `export-${Date.now()}.json`, l.click(), URL.revokeObjectURL(m);
75
+ };
76
+ return /* @__PURE__ */ x("div", { className: `${i("base", "space-y")} ${H}`, children: [
77
+ (j || w) && /* @__PURE__ */ x(
78
+ "div",
79
+ {
80
+ className: `
81
+ flex
82
+ items-center
83
+ justify-between
84
+ ${i("base", "p")}
85
+ bg-surface-base
86
+ border
87
+ border-line-default
88
+ ${ce("lg")}
89
+ `,
90
+ children: [
91
+ /* @__PURE__ */ c(
92
+ "div",
93
+ {
94
+ className: `flex items-center ${i("sm", "gap")}`
95
+ }
96
+ ),
97
+ /* @__PURE__ */ x("div", { className: `flex items-center ${i("sm", "gap")}`, children: [
98
+ w,
99
+ j && /* @__PURE__ */ c(
100
+ "div",
101
+ {
102
+ className: `flex items-center ${i("xs", "gap")}`,
103
+ children: W.map((e) => /* @__PURE__ */ c(
104
+ le,
105
+ {
106
+ variant: "outline",
107
+ size: "sm",
108
+ leftIcon: /* @__PURE__ */ c(ne, { className: "h-4 w-4" }),
109
+ onClick: () => Q(e),
110
+ children: e.toUpperCase()
111
+ },
112
+ e
113
+ ))
114
+ }
115
+ )
116
+ ] })
117
+ ]
118
+ }
119
+ ),
120
+ /* @__PURE__ */ c(
121
+ ae,
122
+ {
123
+ columns: P,
124
+ data: t,
125
+ loading: o,
126
+ onSort: y,
127
+ sortColumn: L,
128
+ sortDirection: N,
129
+ pagination: B,
130
+ filters: G,
131
+ selectable: S,
132
+ selectedRows: O,
133
+ onSelectionChange: _,
134
+ rowId: D,
135
+ actions: T,
136
+ resizable: R,
137
+ columnWidths: u,
138
+ onColumnResize: (e, n) => {
139
+ K((a) => h(g({}, a), { [e]: n })), d == null || d(e, n);
140
+ },
141
+ virtualScrolling: E,
142
+ virtualScrollingOptions: I,
143
+ emptyMessage: J,
144
+ emptyStateTitle: M,
145
+ emptyStateMessage: V,
146
+ emptyStateIllustration: q,
147
+ emptyStateAction: F
148
+ }
149
+ )
150
+ ] });
151
+ }
152
+ export {
153
+ $e as default
154
+ };
155
+ //# sourceMappingURL=DataGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGrid.js","sources":["../../../../../src/ui/components/DataGrid/DataGrid.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo, type ReactNode } from \"react\";\nimport { Download } from \"lucide-react\";\nimport Table, { type TableColumn } from \"../Table/Table\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport type { TableAction } from \"../Table/TableActions/TableActions\";\nimport type {\n FilterConfig,\n FilterValue,\n} from \"../Table/TableFilters/TableFilters\";\n\nexport type DataGridColumn<T = unknown> = TableColumn<T> & {\n groupable?: boolean;\n exportable?: boolean;\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n};\n\n/**\n * @experimental Reserved for upcoming row-grouping support; not yet wired\n * to rendering. The shape is fixed for forward-compatibility, but passing\n * a `groups` array to `<DataGrid>` has no visual effect today. Tracked in\n * BACKLOG.md under \"DataGrid row grouping — props/types reserved\".\n */\nexport interface DataGridGroup {\n column: string;\n expanded?: boolean;\n}\n\nexport interface DataGridProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: DataGridColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Sorting\n onSort?: (columnKey: string, direction: \"asc\" | \"desc\") => void;\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n multiSort?: boolean;\n\n // Grouping\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired\n * to rendering. Passing this has no visual effect today — the grid renders\n * a flat table regardless. Tracked in BACKLOG.md under \"DataGrid row\n * grouping — props/types reserved\".\n */\n groups?: DataGridGroup[];\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired.\n * The callback is never invoked today. Tracked in BACKLOG.md.\n */\n onGroupChange?: (groups: DataGridGroup[]) => void;\n /**\n * @experimental Reserved for upcoming row-grouping support; not yet wired.\n * Passing `true` has no visual effect today — the grouping toolbar button\n * was removed because it rendered but had no behaviour. Tracked in\n * BACKLOG.md.\n */\n groupable?: boolean;\n\n // Column Management\n resizable?: boolean;\n reorderable?: boolean;\n onColumnReorder?: (columns: DataGridColumn<T>[]) => void;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[];\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Export\n exportable?: boolean;\n onExport?: (format: \"csv\" | \"xlsx\" | \"json\") => void;\n exportFormats?: (\"csv\" | \"xlsx\" | \"json\")[];\n\n // Pagination\n pagination?: {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n pageSizeOptions?: number[];\n };\n\n // Filters\n filters?: {\n config: FilterConfig[];\n onFilter: (filters: Record<string, FilterValue>) => void;\n initialValues?: Record<string, FilterValue>;\n };\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n toolbarActions?: ReactNode;\n\n // Virtual Scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n // Empty State\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n className?: string;\n}\n\n/**\n * DataGrid Component\n *\n * An advanced data grid component with sorting, filtering, grouping, column management, and export.\n * Extends the Table component with additional enterprise features.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <DataGrid\n * columns={columns}\n * data={data}\n * groupable\n * exportable\n * onExport={(format) => console.log('Export as', format)}\n * />\n * ```\n */\nexport default function DataGrid<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n onSort,\n sortColumn,\n sortDirection,\n multiSort: _multiSort = false,\n // Grouping props are @experimental — see DataGridGroup JSDoc. Accepted\n // for forward-compatibility but not yet wired to rendering.\n groups: _groups,\n onGroupChange: _onGroupChange,\n groupable: _groupable = false,\n resizable = true,\n reorderable: _reorderable = false,\n onColumnReorder: _onColumnReorder,\n columnWidths,\n onColumnResize,\n selectable = false,\n selectedRows,\n onSelectionChange,\n rowId,\n exportable = false,\n onExport,\n exportFormats = [\"csv\", \"xlsx\", \"json\"],\n pagination,\n filters,\n actions,\n toolbarActions,\n virtualScrolling = false,\n virtualScrollingOptions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n className = \"\",\n}: DataGridProps<T>) {\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >(columnWidths || {});\n\n // Convert DataGrid columns to Table columns\n const tableColumns: TableColumn<T>[] = useMemo(() => {\n return columns.map((col) => ({\n ...col,\n width: internalColumnWidths[col.key as string] || col.defaultWidth,\n }));\n }, [columns, internalColumnWidths]);\n\n const handleExport = (format: \"csv\" | \"xlsx\" | \"json\") => {\n if (onExport) {\n onExport(format);\n } else {\n // Default export implementation\n if (format === \"csv\") {\n exportToCSV(data, columns);\n } else if (format === \"json\") {\n exportToJSON(data);\n }\n }\n };\n\n const exportToCSV = (data: T[], cols: DataGridColumn<T>[]) => {\n const headers = cols\n .filter((c) => c.exportable !== false)\n .map((c) => c.label || c.key);\n const rows = data.map((row) =>\n cols\n .filter((c) => c.exportable !== false)\n .map((c) => {\n const value = row[c.key];\n return typeof value === \"string\" && value.includes(\",\")\n ? `\"${value}\"`\n : value;\n }),\n );\n\n const csv = [headers.join(\",\"), ...rows.map((r) => r.join(\",\"))].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const exportToJSON = (data: T[]) => {\n const json = JSON.stringify(data, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `export-${Date.now()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n return (\n <div className={`${getSpacingClass(\"base\", \"space-y\")} ${className}`}>\n {/* Toolbar */}\n {(exportable || toolbarActions) && (\n <div\n className={`\n flex\n items-center\n justify-between\n ${getSpacingClass(\"base\", \"p\")}\n bg-surface-base\n border\n border-line-default\n ${getRadiusClass(\"lg\")}\n `}\n >\n {/* Left slot reserved for the grouping toolbar (currently\n @experimental — see DataGridGroup JSDoc). The empty div\n preserves the justify-between layout so toolbarActions and\n the export controls stay anchored to the right. */}\n <div\n className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n />\n\n <div className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")}`}>\n {toolbarActions}\n {exportable && (\n <div\n className={`flex items-center ${getSpacingClass(\"xs\", \"gap\")}`}\n >\n {exportFormats.map((format) => (\n <Button\n key={format}\n variant=\"outline\"\n size=\"sm\"\n leftIcon={<Download className=\"h-4 w-4\" />}\n onClick={() => handleExport(format)}\n >\n {format.toUpperCase()}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Table */}\n <Table\n columns={tableColumns}\n data={data}\n loading={loading}\n onSort={onSort}\n sortColumn={sortColumn}\n sortDirection={sortDirection}\n pagination={pagination}\n filters={filters}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowId={rowId}\n actions={actions}\n resizable={resizable}\n columnWidths={internalColumnWidths}\n onColumnResize={(key, width) => {\n setInternalColumnWidths((prev) => ({ ...prev, [key]: width }));\n onColumnResize?.(key, width);\n }}\n virtualScrolling={virtualScrolling}\n virtualScrollingOptions={virtualScrollingOptions}\n emptyMessage={emptyMessage}\n emptyStateTitle={emptyStateTitle}\n emptyStateMessage={emptyStateMessage}\n emptyStateIllustration={emptyStateIllustration}\n emptyStateAction={emptyStateAction}\n />\n </div>\n );\n}\n"],"names":["DataGrid","columns","data","loading","onSort","sortColumn","sortDirection","_multiSort","_groups","_onGroupChange","_groupable","resizable","_reorderable","_onColumnReorder","columnWidths","onColumnResize","selectable","selectedRows","onSelectionChange","rowId","exportable","onExport","exportFormats","pagination","filters","actions","toolbarActions","virtualScrolling","virtualScrollingOptions","emptyMessage","emptyStateTitle","emptyStateMessage","emptyStateIllustration","emptyStateAction","className","internalColumnWidths","setInternalColumnWidths","useState","tableColumns","useMemo","col","__spreadProps","__spreadValues","handleExport","format","exportToCSV","exportToJSON","cols","headers","c","rows","row","value","csv","blob","url","a","json","jsxs","getSpacingClass","getRadiusClass","jsx","Button","Download","Table","key","width","prev"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ "use client";
2
+ var $ = Object.defineProperty, q = Object.defineProperties;
3
+ var W = Object.getOwnPropertyDescriptors;
4
+ var v = Object.getOwnPropertySymbols;
5
+ var X = Object.prototype.hasOwnProperty, Y = Object.prototype.propertyIsEnumerable;
6
+ var b = (r, t, a) => t in r ? $(r, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : r[t] = a, I = (r, t) => {
7
+ for (var a in t || (t = {}))
8
+ X.call(t, a) && b(r, a, t[a]);
9
+ if (v)
10
+ for (var a of v(t))
11
+ Y.call(t, a) && b(r, a, t[a]);
12
+ return r;
13
+ }, N = (r, t) => q(r, W(t));
14
+ import { jsx as c, jsxs as g } from "react/jsx-runtime";
15
+ import { useState as j, useMemo as p } from "react";
16
+ import { Container as z } from "../../layouts/Container/Container.js";
17
+ import { Stack as A } from "../../layouts/Stack/Stack.js";
18
+ import { getSpacingClass as k } from "../../tokens/spacing.js";
19
+ import B from "../SearchInput/SearchInput.js";
20
+ import E from "../Table/Table.js";
21
+ import F from "../Pagination/Pagination.js";
22
+ function _({
23
+ columns: r,
24
+ data: t,
25
+ searchPlaceholder: a = "Search...",
26
+ enableSearch: u = !0,
27
+ itemsPerPage: i = 10,
28
+ enablePagination: d = !0,
29
+ actions: x,
30
+ onRowClick: S,
31
+ loading: w = !1,
32
+ emptyMessage: D = "No data available"
33
+ }) {
34
+ const [l, L] = j(""), [f, y] = j(1), h = p(() => r.map((e) => {
35
+ if (e.accessor || e.header) {
36
+ const s = e.key || (typeof e.accessor == "string" ? e.accessor : String(e.accessor)), n = e.label || e.header || "";
37
+ return N(I({}, e), {
38
+ key: s,
39
+ label: n
40
+ });
41
+ }
42
+ return e;
43
+ }), [r]), o = p(() => {
44
+ if (!l.trim()) return t;
45
+ const e = l.toLowerCase();
46
+ return t.filter((s) => h.some((n) => {
47
+ const T = s[String(n.key)];
48
+ return String(T).toLowerCase().includes(e);
49
+ }));
50
+ }, [t, l, h]), m = p(() => {
51
+ if (!d) return o;
52
+ const e = (f - 1) * i, s = e + i;
53
+ return o.slice(e, s);
54
+ }, [o, f, i, d]), C = d ? Math.ceil(o.length / i) : 1, M = (e) => {
55
+ y(e);
56
+ }, Q = (e) => {
57
+ L(e), y(1);
58
+ };
59
+ return /* @__PURE__ */ c(z, { maxWidth: "full", paddingX: "base", paddingY: "base", children: /* @__PURE__ */ g(A, { spacing: "md", children: [
60
+ /* @__PURE__ */ g(
61
+ "div",
62
+ {
63
+ className: `flex items-center justify-between ${k("base", "gap")}`,
64
+ children: [
65
+ u && /* @__PURE__ */ c("div", { className: "flex-1 max-w-md", children: /* @__PURE__ */ c(
66
+ B,
67
+ {
68
+ placeholder: a,
69
+ value: l,
70
+ onSearch: Q
71
+ }
72
+ ) }),
73
+ x && /* @__PURE__ */ c("div", { className: `flex ${k("sm", "gap")}`, children: x })
74
+ ]
75
+ }
76
+ ),
77
+ /* @__PURE__ */ c(
78
+ E,
79
+ {
80
+ columns: h,
81
+ data: m,
82
+ loading: w,
83
+ emptyMessage: D,
84
+ onRowClick: S ? (e) => {
85
+ const s = o.findIndex((n) => n === e);
86
+ S(
87
+ e,
88
+ s >= 0 ? s : m.findIndex((n) => n === e)
89
+ );
90
+ } : void 0
91
+ }
92
+ ),
93
+ d && C > 1 && /* @__PURE__ */ c("div", { className: "flex justify-center", children: /* @__PURE__ */ c(
94
+ F,
95
+ {
96
+ currentPage: f,
97
+ totalPages: C,
98
+ onPageChange: M
99
+ }
100
+ ) }),
101
+ u && /* @__PURE__ */ g("div", { className: "text-sm text-fg-secondary text-center", children: [
102
+ "Showing ",
103
+ m.length,
104
+ " of ",
105
+ o.length,
106
+ " results"
107
+ ] })
108
+ ] }) });
109
+ }
110
+ export {
111
+ _ as DataTablePattern
112
+ };
113
+ //# sourceMappingURL=DataTablePattern.js.map