@fabio.caffarello/react-design-system 3.7.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 (419) hide show
  1. package/README.md +4 -2
  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/hooks/index.cjs +2 -0
  404. package/dist/hooks/index.cjs.map +1 -0
  405. package/dist/hooks/index.js +23 -0
  406. package/dist/hooks/index.js.map +1 -0
  407. package/dist/index.cjs +44 -70
  408. package/dist/index.cjs.map +1 -1
  409. package/dist/index.js +1900 -1885
  410. package/dist/index.js.map +1 -1
  411. package/dist/react-design-system.css +1 -1
  412. package/dist/server/index.cjs +23 -23
  413. package/dist/server/index.cjs.map +1 -1
  414. package/dist/server/index.js +863 -1180
  415. package/dist/server/index.js.map +1 -1
  416. package/dist/ui/components/Accordion/Accordion.d.ts +9 -1
  417. package/dist/ui/hooks-entry.d.ts +2 -0
  418. package/dist/ui/utils/tailwind-safelist.d.ts +3 -1
  419. package/package.json +24 -13
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { createContext as o, useContext as e } from "react";
3
+ const n = o(void 0);
4
+ function r() {
5
+ const t = e(n);
6
+ if (t === void 0)
7
+ throw new Error("useTabsContext must be used within a Tabs component");
8
+ return t;
9
+ }
10
+ function u() {
11
+ return e(n);
12
+ }
13
+ export {
14
+ n as TabsContext,
15
+ r as useTabsContext,
16
+ u as useTabsContextOptional
17
+ };
18
+ //# sourceMappingURL=TabsContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsContext.js","sources":["../../../../../src/ui/components/Tabs/TabsContext.tsx"],"sourcesContent":["\"use client\";\n\n/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useContext } from \"react\";\n\nexport interface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n}\n\nconst TabsContext = createContext<TabsContextValue | undefined>(undefined);\n\n/**\n * Hook to access Tabs context\n *\n * @throws Error if used outside of Tabs component\n */\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (context === undefined) {\n throw new Error(\"useTabsContext must be used within a Tabs component\");\n }\n\n return context;\n}\n\n/**\n * Hook to access Tabs context (optional, returns undefined if not in Tabs)\n */\nexport function useTabsContextOptional(): TabsContextValue | undefined {\n return useContext(TabsContext);\n}\n\nexport { TabsContext };\n"],"names":["TabsContext","createContext","useTabsContext","context","useContext","useTabsContextOptional"],"mappings":";;AAYA,MAAMA,IAAcC,EAA4C,MAAS;AAOlE,SAASC,IAAmC;AACjD,QAAMC,IAAUC,EAAWJ,CAAW;AAEtC,MAAIG,MAAY;AACd,UAAM,IAAI,MAAM,qDAAqD;AAGvE,SAAOA;AACT;AAKO,SAASE,IAAuD;AACrE,SAAOD,EAAWJ,CAAW;AAC/B;"}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ var I = Object.defineProperty, z = Object.defineProperties;
3
+ var S = Object.getOwnPropertyDescriptors;
4
+ var c = Object.getOwnPropertySymbols;
5
+ var h = Object.prototype.hasOwnProperty, w = Object.prototype.propertyIsEnumerable;
6
+ var y = (e, t, n) => t in e ? I(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, k = (e, t) => {
7
+ for (var n in t || (t = {}))
8
+ h.call(t, n) && y(e, n, t[n]);
9
+ if (c)
10
+ for (var n of c(t))
11
+ w.call(t, n) && y(e, n, t[n]);
12
+ return e;
13
+ }, D = (e, t) => z(e, S(t));
14
+ var b = (e, t) => {
15
+ var n = {};
16
+ for (var r in e)
17
+ h.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
18
+ if (e != null && c)
19
+ for (var r of c(e))
20
+ t.indexOf(r) < 0 && w.call(e, r) && (n[r] = e[r]);
21
+ return n;
22
+ };
23
+ import { jsx as T } from "react/jsx-runtime";
24
+ import { useTabsContext as j } from "./TabsContext.js";
25
+ import { useRef as q, useEffect as H } from "react";
26
+ import { cn as u } from "../../utils/cn.js";
27
+ import { getSpacingClass as m } from "../../tokens/spacing.js";
28
+ import { getRadiusClass as K } from "../../tokens/radius.js";
29
+ function Q(N) {
30
+ var d = N, {
31
+ children: e,
32
+ className: t = "",
33
+ variant: n = "default",
34
+ orientation: r
35
+ } = d, A = b(d, [
36
+ "children",
37
+ "className",
38
+ "variant",
39
+ "orientation"
40
+ ]);
41
+ var p;
42
+ const { orientation: C } = j(), f = (p = r != null ? r : C) != null ? p : "horizontal", g = q(null);
43
+ H(() => {
44
+ const a = g.current;
45
+ if (!a) return;
46
+ const x = (l) => {
47
+ var v;
48
+ const o = Array.from(
49
+ a.querySelectorAll(
50
+ '[role="tab"]:not([disabled])'
51
+ )
52
+ ), i = o.findIndex(
53
+ (R) => R === document.activeElement
54
+ );
55
+ if (i === -1) return;
56
+ let s = i;
57
+ f === "horizontal" ? l.key === "ArrowRight" ? (l.preventDefault(), s = (i + 1) % o.length) : l.key === "ArrowLeft" && (l.preventDefault(), s = (i - 1 + o.length) % o.length) : l.key === "ArrowDown" ? (l.preventDefault(), s = (i + 1) % o.length) : l.key === "ArrowUp" && (l.preventDefault(), s = (i - 1 + o.length) % o.length), l.key === "Home" ? (l.preventDefault(), s = 0) : l.key === "End" && (l.preventDefault(), s = o.length - 1), s !== i && ((v = o[s]) == null || v.focus());
58
+ };
59
+ return a.addEventListener("keydown", x), () => a.removeEventListener("keydown", x);
60
+ }, [f]);
61
+ const E = n === "compact" && f === "vertical" ? "flex" : "inline-flex", L = f === "vertical" ? u("flex-col", m("xs", "gap")) : u("flex-row", m("xs", "gap"));
62
+ return /* @__PURE__ */ T(
63
+ "div",
64
+ D(k({
65
+ ref: g,
66
+ role: "tablist",
67
+ "aria-orientation": f,
68
+ className: u(
69
+ E,
70
+ L,
71
+ m("xs", "p"),
72
+ "bg-surface-muted",
73
+ K("md"),
74
+ t
75
+ )
76
+ }, A), {
77
+ children: e
78
+ })
79
+ );
80
+ }
81
+ export {
82
+ Q as TabsList
83
+ };
84
+ //# sourceMappingURL=TabsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsList.js","sources":["../../../../../src/ui/components/Tabs/TabsList.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport { useRef, useEffect, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass, getSpacingClass } from \"../../tokens\";\n\nexport interface TabsListProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"orientation\"\n> {\n children: ReactNode;\n variant?: \"default\" | \"compact\";\n /**\n * Override orientation set on the `Tabs` provider. When omitted,\n * inherits from context (default \"horizontal\"). Controls keyboard\n * navigation axis (ArrowLeft/Right vs ArrowUp/Down), flex direction,\n * and `aria-orientation`.\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/**\n * TabsList Component\n *\n * Container for tab triggers.\n * Manages keyboard navigation between tabs.\n * Must be used within a Tabs component.\n *\n * Orientation precedence: local `orientation` prop > Tabs context > \"horizontal\".\n */\nexport function TabsList({\n children,\n className = \"\",\n variant = \"default\",\n orientation: orientationProp,\n ...props\n}: TabsListProps) {\n const { orientation: contextOrientation } = useTabsContext();\n const orientation = orientationProp ?? contextOrientation ?? \"horizontal\";\n const listRef = useRef<HTMLDivElement>(null);\n\n // Handle keyboard navigation at list level\n useEffect(() => {\n const list = listRef.current;\n if (!list) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const triggers = Array.from(\n list.querySelectorAll<HTMLButtonElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const currentIndex = triggers.findIndex(\n (trigger) => trigger === document.activeElement,\n );\n\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n } else {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n nextIndex = (currentIndex + 1) % triggers.length;\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n }\n }\n\n if (e.key === \"Home\") {\n e.preventDefault();\n nextIndex = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n nextIndex = triggers.length - 1;\n }\n\n if (nextIndex !== currentIndex) {\n triggers[nextIndex]?.focus();\n }\n };\n\n list.addEventListener(\"keydown\", handleKeyDown);\n return () => list.removeEventListener(\"keydown\", handleKeyDown);\n }, [orientation]);\n\n // Determine display class based on variant and orientation\n // For compact vertical, use 'flex' instead of 'inline-flex' to allow full width\n const displayClass =\n variant === \"compact\" && orientation === \"vertical\"\n ? \"flex\"\n : \"inline-flex\";\n\n const orientationClasses =\n orientation === \"vertical\"\n ? cn(\"flex-col\", getSpacingClass(\"xs\", \"gap\"))\n : cn(\"flex-row\", getSpacingClass(\"xs\", \"gap\"));\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(\n displayClass,\n orientationClasses,\n getSpacingClass(\"xs\", \"p\"),\n \"bg-surface-muted\",\n getRadiusClass(\"md\"),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"names":["TabsList","_a","_b","children","className","variant","orientationProp","props","__objRest","contextOrientation","useTabsContext","orientation","listRef","useRef","useEffect","list","handleKeyDown","e","triggers","currentIndex","trigger","nextIndex","displayClass","orientationClasses","cn","getSpacingClass","jsx","__spreadProps","__spreadValues","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAASA,EAASC,GAMP;AANO,MAAAC,IAAAD,GACvB;AAAA,cAAAE;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,SAAAC,IAAU;AAAA,IACV,aAAaC;AAAA,MAJUJ,GAKpBK,IAAAC,EALoBN,GAKpB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;;AAGA,QAAM,EAAE,aAAaO,EAAA,IAAuBC,EAAA,GACtCC,KAAcV,IAAAK,KAAA,OAAAA,IAAmBG,MAAnB,OAAAR,IAAyC,cACvDW,IAAUC,EAAuB,IAAI;AAG3C,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAOH,EAAQ;AACrB,QAAI,CAACG,EAAM;AAEX,UAAMC,IAAgB,CAACC,MAAqB;;AAC1C,YAAMC,IAAW,MAAM;AAAA,QACrBH,EAAK;AAAA,UACH;AAAA,QAAA;AAAA,MACF,GAEII,IAAeD,EAAS;AAAA,QAC5B,CAACE,MAAYA,MAAY,SAAS;AAAA,MAAA;AAGpC,UAAID,MAAiB,GAAI;AAEzB,UAAIE,IAAYF;AAEhB,MAAIR,MAAgB,eACdM,EAAE,QAAQ,gBACZA,EAAE,eAAA,GACFI,KAAaF,IAAe,KAAKD,EAAS,UACjCD,EAAE,QAAQ,gBACnBA,EAAE,eAAA,GACFI,KAAaF,IAAe,IAAID,EAAS,UAAUA,EAAS,UAG1DD,EAAE,QAAQ,eACZA,EAAE,eAAA,GACFI,KAAaF,IAAe,KAAKD,EAAS,UACjCD,EAAE,QAAQ,cACnBA,EAAE,eAAA,GACFI,KAAaF,IAAe,IAAID,EAAS,UAAUA,EAAS,SAI5DD,EAAE,QAAQ,UACZA,EAAE,eAAA,GACFI,IAAY,KACHJ,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACFI,IAAYH,EAAS,SAAS,IAG5BG,MAAcF,OAChBlB,IAAAiB,EAASG,CAAS,MAAlB,QAAApB,EAAqB;AAAA,IAEzB;AAEA,WAAAc,EAAK,iBAAiB,WAAWC,CAAa,GACvC,MAAMD,EAAK,oBAAoB,WAAWC,CAAa;AAAA,EAChE,GAAG,CAACL,CAAW,CAAC;AAIhB,QAAMW,IACJjB,MAAY,aAAaM,MAAgB,aACrC,SACA,eAEAY,IACJZ,MAAgB,aACZa,EAAG,YAAYC,EAAgB,MAAM,KAAK,CAAC,IAC3CD,EAAG,YAAYC,EAAgB,MAAM,KAAK,CAAC;AAEjD,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,KAAKhB;AAAA,MACL,MAAK;AAAA,MACL,oBAAkBD;AAAA,MAClB,WAAWa;AAAA,QACTF;AAAA,QACAC;AAAA,QACAE,EAAgB,MAAM,GAAG;AAAA,QACzB;AAAA,QACAI,EAAe,IAAI;AAAA,QACnBzB;AAAA,MAAA;AAAA,OAEEG,IAZL;AAAA,MAcE,UAAAJ;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as v } from "react/jsx-runtime";
3
+ import { useState as f, useCallback as p } from "react";
4
+ import { TabsContext as x } from "./TabsContext.js";
5
+ function j({
6
+ defaultValue: e,
7
+ value: r,
8
+ onValueChange: t,
9
+ orientation: i = "horizontal",
10
+ activationMode: c = "automatic",
11
+ children: l
12
+ }) {
13
+ const [n, u] = f(
14
+ e || ""
15
+ ), o = r !== void 0, a = o ? r : n, m = p(
16
+ (s) => {
17
+ o || u(s), t == null || t(s);
18
+ },
19
+ [o, t]
20
+ ), d = {
21
+ value: a,
22
+ onValueChange: m,
23
+ orientation: i,
24
+ activationMode: c
25
+ };
26
+ return /* @__PURE__ */ v(x.Provider, { value: d, children: l });
27
+ }
28
+ export {
29
+ j as TabsProvider
30
+ };
31
+ //# sourceMappingURL=TabsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsProvider.js","sources":["../../../../../src/ui/components/Tabs/TabsProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, type ReactNode } from \"react\";\nimport { TabsContext, type TabsContextValue } from \"./TabsContext\";\n\nexport interface TabsProviderProps {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n activationMode?: \"automatic\" | \"manual\";\n children: ReactNode;\n}\n\n/**\n * TabsProvider Component\n *\n * Provides Tabs context to children.\n * Manages active tab state and handles controlled/uncontrolled modes.\n */\nexport function TabsProvider({\n defaultValue,\n value: controlledValue,\n onValueChange,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n children,\n}: TabsProviderProps) {\n const [uncontrolledValue, setUncontrolledValue] = useState<string>(\n defaultValue || \"\",\n );\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n const contextValue: TabsContextValue = {\n value,\n onValueChange: handleValueChange,\n orientation,\n activationMode,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>\n );\n}\n"],"names":["TabsProvider","defaultValue","controlledValue","onValueChange","orientation","activationMode","children","uncontrolledValue","setUncontrolledValue","useState","isControlled","value","handleValueChange","useCallback","newValue","contextValue","TabsContext"],"mappings":";;;;AAoBO,SAASA,EAAa;AAAA,EAC3B,cAAAC;AAAA,EACA,OAAOC;AAAA,EACP,eAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,gBAAAC,IAAiB;AAAA,EACjB,UAAAC;AACF,GAAsB;AACpB,QAAM,CAACC,GAAmBC,CAAoB,IAAIC;AAAA,IAChDR,KAAgB;AAAA,EAAA,GAGZS,IAAeR,MAAoB,QACnCS,IAAQD,IAAeR,IAAkBK,GAEzCK,IAAoBC;AAAA,IACxB,CAACC,MAAqB;AACpB,MAAKJ,KACHF,EAAqBM,CAAQ,GAE/BX,KAAA,QAAAA,EAAgBW;AAAA,IAClB;AAAA,IACA,CAACJ,GAAcP,CAAa;AAAA,EAAA,GAGxBY,IAAiC;AAAA,IACrC,OAAAJ;AAAA,IACA,eAAeC;AAAA,IACf,aAAAR;AAAA,IACA,gBAAAC;AAAA,EAAA;AAGF,2BACGW,EAAY,UAAZ,EAAqB,OAAOD,GAAe,UAAAT,GAAS;AAEzD;"}
@@ -0,0 +1,103 @@
1
+ "use client";
2
+ var S = Object.defineProperty, j = Object.defineProperties;
3
+ var C = Object.getOwnPropertyDescriptors;
4
+ var s = Object.getOwnPropertySymbols;
5
+ var h = Object.prototype.hasOwnProperty, x = Object.prototype.propertyIsEnumerable;
6
+ var p = (t, o, r) => o in t ? S(t, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[o] = r, b = (t, o) => {
7
+ for (var r in o || (o = {}))
8
+ h.call(o, r) && p(t, r, o[r]);
9
+ if (s)
10
+ for (var r of s(o))
11
+ x.call(o, r) && p(t, r, o[r]);
12
+ return t;
13
+ }, k = (t, o) => j(t, C(o));
14
+ var A = (t, o) => {
15
+ var r = {};
16
+ for (var n in t)
17
+ h.call(t, n) && o.indexOf(n) < 0 && (r[n] = t[n]);
18
+ if (t != null && s)
19
+ for (var n of s(t))
20
+ o.indexOf(n) < 0 && x.call(t, n) && (r[n] = t[n]);
21
+ return r;
22
+ };
23
+ import { jsx as E } from "react/jsx-runtime";
24
+ import { useTabsContext as R } from "./TabsContext.js";
25
+ import { cn as g } from "../../utils/cn.js";
26
+ import { getRadiusClass as V } from "../../tokens/radius.js";
27
+ import { getTypographyWeight as $, getTypographySize as z } from "../../tokens/typography.js";
28
+ import { getSpacingClass as T } from "../../tokens/spacing.js";
29
+ function B(H) {
30
+ var l = H, {
31
+ value: t,
32
+ children: o,
33
+ disabled: r = !1,
34
+ className: n = "",
35
+ onClick: c,
36
+ onKeyDown: f
37
+ } = l, a = A(l, [
38
+ "value",
39
+ "children",
40
+ "disabled",
41
+ "className",
42
+ "onClick",
43
+ "onKeyDown"
44
+ ]);
45
+ const {
46
+ value: w,
47
+ onValueChange: u,
48
+ orientation: I,
49
+ activationMode: m
50
+ } = R(), i = w === t, d = (e) => {
51
+ r || ((m === "automatic" || i) && u(t), c == null || c(e));
52
+ }, v = (e) => {
53
+ var y;
54
+ m === "automatic" && !r && !i && u(t), (y = a.onFocus) == null || y.call(a, e);
55
+ }, F = (e) => {
56
+ if (!r && !(e.key === "ArrowRight" || e.key === "ArrowLeft" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Home" || e.key === "End")) {
57
+ if (m === "manual" && (e.key === "Enter" || e.key === " ")) {
58
+ e.preventDefault(), u(t);
59
+ return;
60
+ }
61
+ f == null || f(e);
62
+ }
63
+ };
64
+ return /* @__PURE__ */ E(
65
+ "button",
66
+ k(b({
67
+ type: "button",
68
+ role: "tab",
69
+ "aria-selected": i,
70
+ "aria-controls": `tabpanel-${t}`,
71
+ id: `tab-${t}`,
72
+ tabIndex: r ? -1 : i ? 0 : -1,
73
+ disabled: r,
74
+ onClick: d,
75
+ onFocus: v,
76
+ onKeyDown: F,
77
+ className: g(
78
+ "inline-flex",
79
+ "items-center",
80
+ "justify-center",
81
+ T("sm", "px"),
82
+ T("xs", "py"),
83
+ z("bodySmall"),
84
+ $("label"),
85
+ "transition-colors",
86
+ "focus:outline-none",
87
+ "focus:ring-2",
88
+ "focus:ring-line-focus",
89
+ "focus:ring-offset-2",
90
+ V("sm"),
91
+ i ? g("bg-surface-brand-strong", "text-fg-inverse") : g("text-fg-secondary", "hover:bg-surface-active"),
92
+ r ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
93
+ n
94
+ )
95
+ }, a), {
96
+ children: o
97
+ })
98
+ );
99
+ }
100
+ export {
101
+ B as TabsTrigger
102
+ };
103
+ //# sourceMappingURL=TabsTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsTrigger.js","sources":["../../../../../src/ui/components/Tabs/TabsTrigger.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTabsContext } from \"./TabsContext\";\nimport type { HTMLAttributes, ReactNode, KeyboardEvent } from \"react\";\nimport {\n getRadiusClass,\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\nimport { cn } from \"../../utils\";\n\nexport interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n value: string;\n children: ReactNode;\n disabled?: boolean;\n}\n\n/**\n * TabsTrigger Component\n *\n * Individual tab trigger button.\n * Must be used within a TabsList component.\n */\nexport function TabsTrigger({\n value,\n children,\n disabled = false,\n className = \"\",\n onClick,\n onKeyDown,\n ...props\n}: TabsTriggerProps) {\n const {\n value: activeValue,\n onValueChange,\n orientation: _orientation,\n activationMode,\n } = useTabsContext();\n\n const isActive = activeValue === value;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (activationMode === \"automatic\" || isActive) {\n onValueChange(value);\n }\n onClick?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n // In automatic mode, activate tab on focus\n if (activationMode === \"automatic\" && !disabled && !isActive) {\n onValueChange(value);\n }\n props.onFocus?.(e);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n // Let parent handle arrow keys, Home, End\n if (\n e.key === \"ArrowRight\" ||\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowDown\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"Home\" ||\n e.key === \"End\"\n ) {\n // These are handled by TabsList\n return;\n }\n\n // Handle Enter/Space for manual activation\n if (activationMode === \"manual\" && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onValueChange(value);\n return;\n }\n\n onKeyDown?.(e);\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n tabIndex={disabled ? -1 : isActive ? 0 : -1}\n disabled={disabled}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"sm\"),\n isActive\n ? cn(\"bg-surface-brand-strong\", \"text-fg-inverse\")\n : cn(\"text-fg-secondary\", \"hover:bg-surface-active\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n"],"names":["TabsTrigger","_a","_b","value","children","disabled","className","onClick","onKeyDown","props","__objRest","activeValue","onValueChange","_orientation","activationMode","useTabsContext","isActive","handleClick","handleFocus","handleKeyDown","jsx","__spreadProps","__spreadValues","cn","getSpacingClass","getTypographySize","getTypographyWeight","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,SAASA,EAAYC,GAQP;AARO,MAAAC,IAAAD,GAC1B;AAAA,WAAAE;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,SAAAC;AAAA,IACA,WAAAC;AAAA,MAN0BN,GAOvBO,IAAAC,EAPuBR,GAOvB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM;AAAA,IACJ,OAAOS;AAAA,IACP,eAAAC;AAAA,IACA,aAAaC;AAAA,IACb,gBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAWL,MAAgBR,GAE3Bc,IAAc,CAAC,MAA2C;AAC9D,IAAIZ,OACAS,MAAmB,eAAeE,MACpCJ,EAAcT,CAAK,GAErBI,KAAA,QAAAA,EAAU;AAAA,EACZ,GAEMW,IAAc,CAAC,MAA2C;;AAE9D,IAAIJ,MAAmB,eAAe,CAACT,KAAY,CAACW,KAClDJ,EAAcT,CAAK,IAErBF,IAAAQ,EAAM,YAAN,QAAAR,EAAA,KAAAQ,GAAgB;AAAA,EAClB,GAEMU,IAAgB,CAAC,MAAwC;AAC7D,QAAI,CAAAd,KAIF,IAAE,QAAQ,gBACV,EAAE,QAAQ,eACV,EAAE,QAAQ,eACV,EAAE,QAAQ,aACV,EAAE,QAAQ,UACV,EAAE,QAAQ,QAOZ;AAAA,UAAIS,MAAmB,aAAa,EAAE,QAAQ,WAAW,EAAE,QAAQ,MAAM;AACvE,UAAE,eAAA,GACFF,EAAcT,CAAK;AACnB;AAAA,MACF;AAEA,MAAAK,KAAA,QAAAA,EAAY;AAAA;AAAA,EACd;AAEA,SACE,gBAAAY;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAeN;AAAA,MACf,iBAAe,YAAYb,CAAK;AAAA,MAChC,IAAI,OAAOA,CAAK;AAAA,MAChB,UAAUE,IAAW,KAAKW,IAAW,IAAI;AAAA,MACzC,UAAAX;AAAA,MACA,SAASY;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,WAAWI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAgB,MAAM,IAAI;AAAA,QAC1BA,EAAgB,MAAM,IAAI;AAAA,QAC1BC,EAAkB,WAAW;AAAA,QAC7BC,EAAoB,OAAO;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAe,IAAI;AAAA,QACnBX,IACIO,EAAG,2BAA2B,iBAAiB,IAC/CA,EAAG,qBAAqB,yBAAyB;AAAA,QACrDlB,IAAW,kCAAkC;AAAA,QAC7CC;AAAA,MAAA;AAAA,OAEEG,IA/BL;AAAA,MAiCE,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,216 @@
1
+ "use client";
2
+ import { jsx as s, jsxs as v } from "react/jsx-runtime";
3
+ import { useState as x, useCallback as E, useEffect as O } from "react";
4
+ import { Clock as U } from "lucide-react";
5
+ import q from "../../primitives/Input/Input.js";
6
+ import F from "../Popover/Popover.js";
7
+ import { Button as o } from "../../primitives/Button/Button.js";
8
+ import { getSpacingClass as u } from "../../tokens/spacing.js";
9
+ function X({
10
+ value: A,
11
+ defaultValue: H,
12
+ format: r = "24h",
13
+ onChange: c,
14
+ disabled: l = !1,
15
+ label: I,
16
+ error: b = !1,
17
+ helperText: z,
18
+ className: y = ""
19
+ }) {
20
+ const [T, P] = x(H || ""), [i, S] = x(12), [m, N] = x(0), [a, $] = x("AM"), d = A !== void 0, h = d ? A : T, k = E(
21
+ (e) => {
22
+ if (!e) return { hours: 12, minutes: 0, amPm: "AM" };
23
+ if (r === "24h") {
24
+ const [t, n] = e.split(":").map(Number);
25
+ return { hours: t || 12, minutes: n || 0, amPm: "AM" };
26
+ } else {
27
+ const t = e.match(/(\d+):(\d+)\s*(AM|PM)/i);
28
+ return t ? {
29
+ hours: parseInt(t[1]),
30
+ minutes: parseInt(t[2]),
31
+ amPm: t[3].toUpperCase()
32
+ } : { hours: 12, minutes: 0, amPm: "AM" };
33
+ }
34
+ },
35
+ [r]
36
+ ), p = (e, t, n) => {
37
+ if (r === "24h")
38
+ return `${String(e).padStart(2, "0")}:${String(t).padStart(2, "0")}`;
39
+ {
40
+ const M = n === "PM" && e !== 12 ? e + 12 : n === "AM" && e === 12 ? 0 : e;
41
+ return `${String(M === 0 ? 12 : M > 12 ? M - 12 : M).padStart(2, "0")}:${String(t).padStart(2, "0")} ${n || "AM"}`;
42
+ }
43
+ };
44
+ O(() => {
45
+ if (h) {
46
+ const e = k(h);
47
+ S(e.hours), N(e.minutes), $(e.amPm);
48
+ }
49
+ }, [h, k]);
50
+ const f = (e) => {
51
+ const t = r === "24h" ? Math.max(0, Math.min(23, e)) : Math.max(1, Math.min(12, e));
52
+ S(t);
53
+ const n = p(
54
+ t,
55
+ m,
56
+ r === "12h" ? a : void 0
57
+ );
58
+ d || P(n), c == null || c(n);
59
+ }, w = (e) => {
60
+ const t = Math.max(0, Math.min(59, e));
61
+ N(t);
62
+ const n = p(
63
+ i,
64
+ t,
65
+ r === "12h" ? a : void 0
66
+ );
67
+ d || P(n), c == null || c(n);
68
+ }, g = () => {
69
+ const e = a === "AM" ? "PM" : "AM";
70
+ $(e);
71
+ const t = p(i, m, e);
72
+ d || P(t), c == null || c(t);
73
+ }, V = () => {
74
+ if (r === "24h")
75
+ f((i + 1) % 24);
76
+ else {
77
+ const e = i === 12 ? 1 : i + 1;
78
+ f(e);
79
+ }
80
+ }, j = () => {
81
+ if (r === "24h")
82
+ f(i === 0 ? 23 : i - 1);
83
+ else {
84
+ const e = i === 1 ? 12 : i - 1;
85
+ f(e);
86
+ }
87
+ }, B = () => {
88
+ w((m + 1) % 60);
89
+ }, D = () => {
90
+ w(m === 0 ? 59 : m - 1);
91
+ }, C = /* @__PURE__ */ s("div", { className: `${u("base", "p")} min-w-48`, children: /* @__PURE__ */ v(
92
+ "div",
93
+ {
94
+ className: `flex items-center justify-center ${u("base", "gap")}`,
95
+ children: [
96
+ /* @__PURE__ */ v(
97
+ "div",
98
+ {
99
+ className: `flex flex-col items-center ${u("sm", "gap")}`,
100
+ children: [
101
+ /* @__PURE__ */ s(
102
+ o,
103
+ {
104
+ variant: "ghost",
105
+ size: "sm",
106
+ onClick: V,
107
+ disabled: l,
108
+ "aria-label": "Increment hours",
109
+ children: "↑"
110
+ }
111
+ ),
112
+ /* @__PURE__ */ s("div", { className: "text-2xl font-mono font-semibold w-12 text-center", children: String(i).padStart(2, "0") }),
113
+ /* @__PURE__ */ s(
114
+ o,
115
+ {
116
+ variant: "ghost",
117
+ size: "sm",
118
+ onClick: j,
119
+ disabled: l,
120
+ "aria-label": "Decrement hours",
121
+ children: "↓"
122
+ }
123
+ )
124
+ ]
125
+ }
126
+ ),
127
+ /* @__PURE__ */ s("div", { className: "text-2xl font-semibold", children: ":" }),
128
+ /* @__PURE__ */ v(
129
+ "div",
130
+ {
131
+ className: `flex flex-col items-center ${u("sm", "gap")}`,
132
+ children: [
133
+ /* @__PURE__ */ s(
134
+ o,
135
+ {
136
+ variant: "ghost",
137
+ size: "sm",
138
+ onClick: B,
139
+ disabled: l,
140
+ "aria-label": "Increment minutes",
141
+ children: "↑"
142
+ }
143
+ ),
144
+ /* @__PURE__ */ s("div", { className: "text-2xl font-mono font-semibold w-12 text-center", children: String(m).padStart(2, "0") }),
145
+ /* @__PURE__ */ s(
146
+ o,
147
+ {
148
+ variant: "ghost",
149
+ size: "sm",
150
+ onClick: D,
151
+ disabled: l,
152
+ "aria-label": "Decrement minutes",
153
+ children: "↓"
154
+ }
155
+ )
156
+ ]
157
+ }
158
+ ),
159
+ r === "12h" && /* @__PURE__ */ v(
160
+ "div",
161
+ {
162
+ className: `flex flex-col ${u("sm", "gap")} ${u("sm", "ml")}`,
163
+ children: [
164
+ /* @__PURE__ */ s(
165
+ o,
166
+ {
167
+ variant: a === "AM" ? "primary" : "outline",
168
+ size: "sm",
169
+ onClick: () => g(),
170
+ disabled: l,
171
+ children: "AM"
172
+ }
173
+ ),
174
+ /* @__PURE__ */ s(
175
+ o,
176
+ {
177
+ variant: a === "PM" ? "primary" : "outline",
178
+ size: "sm",
179
+ onClick: () => g(),
180
+ disabled: l,
181
+ children: "PM"
182
+ }
183
+ )
184
+ ]
185
+ }
186
+ )
187
+ ]
188
+ }
189
+ ) });
190
+ return /* @__PURE__ */ s("div", { className: y, children: /* @__PURE__ */ s(
191
+ F,
192
+ {
193
+ trigger: /* @__PURE__ */ s(
194
+ q,
195
+ {
196
+ label: I,
197
+ value: h || p(i, m, r === "12h" ? a : void 0),
198
+ readOnly: !0,
199
+ disabled: l,
200
+ error: b,
201
+ helperText: z,
202
+ leftIcon: /* @__PURE__ */ s(U, { className: "h-4 w-4" }),
203
+ className: "cursor-pointer"
204
+ }
205
+ ),
206
+ placement: "bottom-start",
207
+ showCloseButton: !0,
208
+ title: "Select Time",
209
+ children: C
210
+ }
211
+ ) });
212
+ }
213
+ export {
214
+ X as default
215
+ };
216
+ //# sourceMappingURL=TimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimePicker.js","sources":["../../../../../src/ui/components/TimePicker/TimePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { Clock } from \"lucide-react\";\nimport Input from \"../../primitives/Input/Input\";\nimport Popover from \"../Popover/Popover\";\nimport Button from \"../../primitives/Button/Button\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type TimeFormat = \"12h\" | \"24h\";\n\nexport interface TimePickerProps {\n value?: string; // Format: \"HH:mm\" for 24h or \"hh:mm AM/PM\" for 12h\n defaultValue?: string;\n format?: TimeFormat;\n onChange?: (value: string) => void;\n disabled?: boolean;\n label?: string;\n error?: boolean;\n helperText?: string;\n className?: string;\n}\n\n/**\n * TimePicker Component\n *\n * A time picker component for selecting time values.\n * Supports 12h and 24h formats.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <TimePicker\n * value=\"14:30\"\n * format=\"24h\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nexport default function TimePicker({\n value: controlledValue,\n defaultValue,\n format = \"24h\",\n onChange,\n disabled = false,\n label,\n error = false,\n helperText,\n className = \"\",\n}: TimePickerProps) {\n const [internalValue, setInternalValue] = useState(defaultValue || \"\");\n const [hours, setHours] = useState(12);\n const [minutes, setMinutes] = useState(0);\n const [amPm, setAmPm] = useState<\"AM\" | \"PM\">(\"AM\");\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Parse time value\n const parseTime = useCallback(\n (timeStr: string) => {\n if (!timeStr) return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n\n if (format === \"24h\") {\n const [h, m] = timeStr.split(\":\").map(Number);\n return { hours: h || 12, minutes: m || 0, amPm: \"AM\" as const };\n } else {\n const match = timeStr.match(/(\\d+):(\\d+)\\s*(AM|PM)/i);\n if (match) {\n return {\n hours: parseInt(match[1]),\n minutes: parseInt(match[2]),\n amPm: match[3].toUpperCase() as \"AM\" | \"PM\",\n };\n }\n return { hours: 12, minutes: 0, amPm: \"AM\" as const };\n }\n },\n [format],\n );\n\n // Format time value\n const formatTime = (h: number, m: number, ap?: \"AM\" | \"PM\"): string => {\n if (format === \"24h\") {\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\n } else {\n const displayHours =\n ap === \"PM\" && h !== 12 ? h + 12 : ap === \"AM\" && h === 12 ? 0 : h;\n return `${String(displayHours === 0 ? 12 : displayHours > 12 ? displayHours - 12 : displayHours).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")} ${ap || \"AM\"}`;\n }\n };\n\n // Initialize from value\n useEffect(() => {\n if (currentValue) {\n const parsed = parseTime(currentValue);\n setHours(parsed.hours);\n setMinutes(parsed.minutes);\n setAmPm(parsed.amPm);\n }\n }, [currentValue, parseTime]);\n\n const handleHoursChange = (newHours: number) => {\n const validHours =\n format === \"24h\"\n ? Math.max(0, Math.min(23, newHours))\n : Math.max(1, Math.min(12, newHours));\n\n setHours(validHours);\n const newValue = formatTime(\n validHours,\n minutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleMinutesChange = (newMinutes: number) => {\n const validMinutes = Math.max(0, Math.min(59, newMinutes));\n setMinutes(validMinutes);\n const newValue = formatTime(\n hours,\n validMinutes,\n format === \"12h\" ? amPm : undefined,\n );\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleAmPmToggle = () => {\n const newAmPm = amPm === \"AM\" ? \"PM\" : \"AM\";\n setAmPm(newAmPm);\n const newValue = formatTime(hours, minutes, newAmPm);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const incrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange((hours + 1) % 24);\n } else {\n const newHours = hours === 12 ? 1 : hours + 1;\n handleHoursChange(newHours);\n }\n };\n\n const decrementHours = () => {\n if (format === \"24h\") {\n handleHoursChange(hours === 0 ? 23 : hours - 1);\n } else {\n const newHours = hours === 1 ? 12 : hours - 1;\n handleHoursChange(newHours);\n }\n };\n\n const incrementMinutes = () => {\n handleMinutesChange((minutes + 1) % 60);\n };\n\n const decrementMinutes = () => {\n handleMinutesChange(minutes === 0 ? 59 : minutes - 1);\n };\n\n const timePickerContent = (\n <div className={`${getSpacingClass(\"base\", \"p\")} min-w-48`}>\n <div\n className={`flex items-center justify-center ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Hours */}\n <div\n className={`flex flex-col items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementHours}\n disabled={disabled}\n aria-label=\"Increment hours\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(hours).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementHours}\n disabled={disabled}\n aria-label=\"Decrement hours\"\n >\n ↓\n </Button>\n </div>\n\n <div className=\"text-2xl font-semibold\">:</div>\n\n {/* Minutes */}\n <div\n className={`flex flex-col items-center ${getSpacingClass(\"sm\", \"gap\")}`}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={incrementMinutes}\n disabled={disabled}\n aria-label=\"Increment minutes\"\n >\n ↑\n </Button>\n <div className=\"text-2xl font-mono font-semibold w-12 text-center\">\n {String(minutes).padStart(2, \"0\")}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={decrementMinutes}\n disabled={disabled}\n aria-label=\"Decrement minutes\"\n >\n ↓\n </Button>\n </div>\n\n {/* AM/PM for 12h format */}\n {format === \"12h\" && (\n <div\n className={`flex flex-col ${getSpacingClass(\"sm\", \"gap\")} ${getSpacingClass(\"sm\", \"ml\")}`}\n >\n <Button\n variant={amPm === \"AM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n AM\n </Button>\n <Button\n variant={amPm === \"PM\" ? \"primary\" : \"outline\"}\n size=\"sm\"\n onClick={() => handleAmPmToggle()}\n disabled={disabled}\n >\n PM\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n\n return (\n <div className={className}>\n <Popover\n trigger={\n <Input\n label={label}\n value={\n currentValue ||\n formatTime(hours, minutes, format === \"12h\" ? amPm : undefined)\n }\n readOnly\n disabled={disabled}\n error={error}\n helperText={helperText}\n leftIcon={<Clock className=\"h-4 w-4\" />}\n className=\"cursor-pointer\"\n />\n }\n placement=\"bottom-start\"\n showCloseButton\n title=\"Select Time\"\n >\n {timePickerContent}\n </Popover>\n </div>\n );\n}\n"],"names":["TimePicker","controlledValue","defaultValue","format","onChange","disabled","label","error","helperText","className","internalValue","setInternalValue","useState","hours","setHours","minutes","setMinutes","amPm","setAmPm","isControlled","currentValue","parseTime","useCallback","timeStr","h","m","match","formatTime","ap","displayHours","useEffect","parsed","handleHoursChange","newHours","validHours","newValue","handleMinutesChange","newMinutes","validMinutes","handleAmPmToggle","newAmPm","incrementHours","decrementHours","incrementMinutes","decrementMinutes","timePickerContent","getSpacingClass","jsxs","jsx","Button","Popover","Input","Clock"],"mappings":"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"}