@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 @@
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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"}
@@ -0,0 +1,152 @@
1
+ "use client";
2
+ var h = Object.defineProperty, u = Object.defineProperties;
3
+ var v = Object.getOwnPropertyDescriptors;
4
+ var x = Object.getOwnPropertySymbols;
5
+ var N = Object.prototype.hasOwnProperty, $ = Object.prototype.propertyIsEnumerable;
6
+ var p = (t, r, c) => r in t ? h(t, r, { enumerable: !0, configurable: !0, writable: !0, value: c }) : t[r] = c, m = (t, r) => {
7
+ for (var c in r || (r = {}))
8
+ N.call(r, c) && p(t, c, r[c]);
9
+ if (x)
10
+ for (var c of x(r))
11
+ $.call(r, c) && p(t, c, r[c]);
12
+ return t;
13
+ }, f = (t, r) => u(t, v(r));
14
+ import { jsx as s, jsxs as i } from "react/jsx-runtime";
15
+ import { CheckCircle2 as b } from "lucide-react";
16
+ import { getSpacingClass as l } from "../../tokens/spacing.js";
17
+ import { getRadiusClass as g } from "../../tokens/radius.js";
18
+ function q({
19
+ items: t,
20
+ orientation: r = "vertical",
21
+ className: c = ""
22
+ }) {
23
+ return r === "horizontal" ? /* @__PURE__ */ s("div", { className: `flex items-start ${c}`, children: t.map((e, n) => {
24
+ const a = e.status || (n === 0 ? "active" : n < t.findIndex((o) => o.status === "active") ? "completed" : "default"), d = n === t.length - 1;
25
+ return /* @__PURE__ */ s("div", { className: "flex items-start flex-1", children: /* @__PURE__ */ i("div", { className: "flex flex-col items-center flex-1", children: [
26
+ /* @__PURE__ */ s(
27
+ "div",
28
+ f(m({}, a === "default" ? { "data-marker": "pending" } : {}), {
29
+ className: `
30
+ flex
31
+ items-center
32
+ justify-center
33
+ w-10
34
+ h-10
35
+ ${g("full")}
36
+ border-2
37
+ ${a === "completed" ? "bg-success border-success text-fg-inverse" : a === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : a === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
38
+ `,
39
+ children: e.icon || (a === "completed" ? /* @__PURE__ */ s(b, { className: "h-4 w-4" }) : n + 1)
40
+ })
41
+ ),
42
+ !d && /* @__PURE__ */ s(
43
+ "div",
44
+ {
45
+ className: `
46
+ w-full
47
+ h-0.5
48
+ ${l("sm", "mt")}
49
+ ${a === "completed" ? "bg-success" : "bg-line-emphasis"}
50
+ `
51
+ }
52
+ ),
53
+ /* @__PURE__ */ i(
54
+ "div",
55
+ {
56
+ className: `${l("base", "mt")} text-center ${l("base", "px")}`,
57
+ children: [
58
+ e.timestamp && /* @__PURE__ */ s(
59
+ "p",
60
+ {
61
+ className: `text-xs text-fg-tertiary ${l("xs", "mb")}`,
62
+ children: e.timestamp
63
+ }
64
+ ),
65
+ /* @__PURE__ */ s("h3", { className: "text-sm font-semibold text-fg-primary", children: e.title }),
66
+ e.description && /* @__PURE__ */ s(
67
+ "p",
68
+ {
69
+ className: `text-xs text-fg-secondary ${l("xs", "mt")}`,
70
+ children: e.description
71
+ }
72
+ ),
73
+ e.content && /* @__PURE__ */ s("div", { className: l("sm", "mt"), children: e.content })
74
+ ]
75
+ }
76
+ )
77
+ ] }) }, e.id);
78
+ }) }) : /* @__PURE__ */ s("div", { className: `${l("none", "space-y")} ${c}`, children: t.map((e, n) => {
79
+ const a = e.status || (n === 0 ? "active" : n < t.findIndex((o) => o.status === "active") ? "completed" : "default"), d = n === t.length - 1;
80
+ return /* @__PURE__ */ i(
81
+ "div",
82
+ {
83
+ className: `flex items-start ${l("base", "gap")}`,
84
+ children: [
85
+ /* @__PURE__ */ i("div", { className: "flex flex-col items-center", children: [
86
+ /* @__PURE__ */ s(
87
+ "div",
88
+ f(m({}, a === "default" ? { "data-marker": "pending" } : {}), {
89
+ className: `
90
+ flex
91
+ items-center
92
+ justify-center
93
+ w-10
94
+ h-10
95
+ ${g("full")}
96
+ border-2
97
+ ${a === "completed" ? "bg-success border-success text-fg-inverse" : a === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : a === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
98
+ `,
99
+ children: e.icon || (a === "completed" ? /* @__PURE__ */ s(b, { className: "h-4 w-4" }) : n + 1)
100
+ })
101
+ ),
102
+ !d && /* @__PURE__ */ s(
103
+ "div",
104
+ {
105
+ className: `
106
+ w-0.5
107
+ flex-1
108
+ min-h-16
109
+ ${l("sm", "mt")}
110
+ ${a === "completed" ? "bg-success" : "bg-line-emphasis"}
111
+ `
112
+ }
113
+ )
114
+ ] }),
115
+ /* @__PURE__ */ i("div", { className: `flex-1 ${l("xl", "pb")}`, children: [
116
+ e.timestamp && /* @__PURE__ */ s(
117
+ "p",
118
+ {
119
+ className: `text-xs text-fg-tertiary ${l("xs", "mb")}`,
120
+ children: e.timestamp
121
+ }
122
+ ),
123
+ /* @__PURE__ */ s(
124
+ "h3",
125
+ {
126
+ className: `
127
+ text-base
128
+ font-semibold
129
+ ${a === "active" ? "text-fg-brand-emphasis" : "text-fg-primary"}
130
+ `,
131
+ children: e.title
132
+ }
133
+ ),
134
+ e.description && /* @__PURE__ */ s(
135
+ "p",
136
+ {
137
+ className: `text-sm text-fg-secondary ${l("xs", "mt")}`,
138
+ children: e.description
139
+ }
140
+ ),
141
+ e.content && /* @__PURE__ */ s("div", { className: l("md", "mt"), children: e.content })
142
+ ] })
143
+ ]
144
+ },
145
+ e.id
146
+ );
147
+ }) });
148
+ }
149
+ export {
150
+ q as default
151
+ };
152
+ //# sourceMappingURL=Timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timeline.js","sources":["../../../../../src/ui/components/Timeline/Timeline.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\"\n ? { \"data-marker\": \"pending\" }\n : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`${getSpacingClass(\"base\", \"mt\")} text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-fg-primary\">\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-xs text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"sm\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`${getSpacingClass(\"none\", \"space-y\")} ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={`flex items-start ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\" ? { \"data-marker\": \"pending\" } : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-sm text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["Timeline","items","orientation","className","jsx","item","index","status","i","isLast","jsxs","__spreadProps","__spreadValues","getRadiusClass","CheckCircle2","getSpacingClass"],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ "use client";
2
+ var E = Object.defineProperty, S = Object.defineProperties;
3
+ var j = Object.getOwnPropertyDescriptors;
4
+ var n = Object.getOwnPropertySymbols;
5
+ var g = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;
6
+ var u = (e, t, r) => t in e ? E(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, x = (e, t) => {
7
+ for (var r in t || (t = {}))
8
+ g.call(t, r) && u(e, r, t[r]);
9
+ if (n)
10
+ for (var r of n(t))
11
+ p.call(t, r) && u(e, r, t[r]);
12
+ return e;
13
+ }, h = (e, t) => S(e, j(t));
14
+ var v = (e, t) => {
15
+ var r = {};
16
+ for (var i in e)
17
+ g.call(e, i) && t.indexOf(i) < 0 && (r[i] = e[i]);
18
+ if (e != null && n)
19
+ for (var i of n(e))
20
+ t.indexOf(i) < 0 && p.call(e, i) && (r[i] = e[i]);
21
+ return r;
22
+ };
23
+ import { jsx as s, jsxs as b } from "react/jsx-runtime";
24
+ import { useState as C, useEffect as $ } from "react";
25
+ import { Info as z, AlertTriangle as A, AlertCircle as B, CheckCircle2 as V, X as O } from "lucide-react";
26
+ import { getSpacingClass as o } from "../../tokens/spacing.js";
27
+ import { Button as w } from "../../primitives/Button/Button.js";
28
+ import { getRadiusClass as R } from "../../tokens/radius.js";
29
+ import { getShadowClass as X } from "../../tokens/shadows.js";
30
+ import { getZIndexClass as Z } from "../../tokens/z-index.js";
31
+ const q = {
32
+ success: V,
33
+ error: B,
34
+ warning: A,
35
+ info: z
36
+ }, D = {
37
+ success: "border-success",
38
+ error: "border-error",
39
+ warning: "border-warning",
40
+ info: "border-info"
41
+ }, F = {
42
+ success: "text-fg-success",
43
+ error: "text-fg-error",
44
+ warning: "text-fg-warning",
45
+ info: "text-fg-info"
46
+ };
47
+ function Y(G) {
48
+ var l = G, {
49
+ toast: e,
50
+ onDismiss: t,
51
+ position: r = "top-right",
52
+ className: i = "",
53
+ style: y
54
+ } = l, N = v(l, [
55
+ "toast",
56
+ "onDismiss",
57
+ "position",
58
+ "className",
59
+ "style"
60
+ ]);
61
+ const [T, c] = C(!1), [m, d] = C(!1), k = q[e.variant];
62
+ $(() => {
63
+ if (e.duration === void 0) return;
64
+ c(!0);
65
+ const a = setTimeout(() => {
66
+ d(!0), setTimeout(() => {
67
+ t(e.id);
68
+ }, 300);
69
+ }, e.duration);
70
+ return () => clearTimeout(a);
71
+ }, [e.duration, e.id, t]), $(() => {
72
+ const a = setTimeout(() => c(!0), 10);
73
+ return () => clearTimeout(a);
74
+ }, []);
75
+ const I = {
76
+ "top-right": "top-4 right-4",
77
+ "top-left": "top-4 left-4",
78
+ "bottom-right": "bottom-4 right-4",
79
+ "bottom-left": "bottom-4 left-4",
80
+ "top-center": "top-4 left-1/2 -translate-x-1/2",
81
+ "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
82
+ }, f = () => {
83
+ d(!0), setTimeout(() => {
84
+ t(e.id);
85
+ }, 300);
86
+ };
87
+ return /* @__PURE__ */ s(
88
+ "div",
89
+ h(x({
90
+ className: `
91
+ fixed ${I[r]} ${Z("toast")}
92
+ w-full max-w-sm
93
+ transition-all duration-300 ease-in-out
94
+ ${T && !m ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-2"}
95
+ ${m ? "opacity-0 translate-y-2" : ""}
96
+ ${i}
97
+ `,
98
+ style: y,
99
+ role: "alert",
100
+ "aria-live": e.variant === "error" ? "assertive" : "polite",
101
+ "aria-atomic": "true"
102
+ }, N), {
103
+ children: /* @__PURE__ */ b(
104
+ "div",
105
+ {
106
+ className: `
107
+ flex items-start ${o("md", "gap")}
108
+ ${o("base", "p")}
109
+ bg-surface-overlay
110
+ ${R("lg")}
111
+ ${X("lg")}
112
+ border
113
+ ${D[e.variant]}
114
+ `,
115
+ children: [
116
+ /* @__PURE__ */ s("div", { className: `flex-shrink-0 ${F[e.variant]}`, children: /* @__PURE__ */ s(k, { className: "h-5 w-5", "aria-hidden": "true" }) }),
117
+ /* @__PURE__ */ b("div", { className: "flex-1 min-w-0", children: [
118
+ /* @__PURE__ */ s("div", { className: "font-medium text-fg-primary", children: e.title }),
119
+ e.description && /* @__PURE__ */ s(
120
+ "div",
121
+ {
122
+ className: `${o("xs", "mt")} text-sm text-fg-secondary`,
123
+ children: e.description
124
+ }
125
+ ),
126
+ e.action && /* @__PURE__ */ s("div", { className: o("md", "mt"), children: /* @__PURE__ */ s(
127
+ w,
128
+ {
129
+ variant: "outline",
130
+ size: "sm",
131
+ onClick: () => {
132
+ var a;
133
+ (a = e.action) == null || a.onClick(), f();
134
+ },
135
+ children: e.action.label
136
+ }
137
+ ) })
138
+ ] }),
139
+ /* @__PURE__ */ s(
140
+ w,
141
+ {
142
+ variant: "iconOnly",
143
+ size: "sm",
144
+ onClick: f,
145
+ className: "flex-shrink-0",
146
+ "aria-label": "Dismiss notification",
147
+ children: /* @__PURE__ */ s(O, { className: "h-4 w-4" })
148
+ }
149
+ )
150
+ ]
151
+ }
152
+ )
153
+ })
154
+ );
155
+ }
156
+ export {
157
+ Y as Toast
158
+ };
159
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.js","sources":["../../../../../src/ui/components/Toast/Toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type HTMLAttributes } from \"react\";\nimport {\n X,\n CheckCircle2,\n AlertCircle,\n AlertTriangle,\n Info,\n} from \"lucide-react\";\nimport { type Toast as ToastType } from \"../../providers/ToastContext\";\nimport { getRadiusClass, getShadowClass, getZIndexClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport Button from \"../../primitives/Button/Button\";\n\nexport interface ToastProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"title\"\n> {\n toast: ToastType;\n onDismiss: (id: string) => void;\n position?:\n | \"top-right\"\n | \"top-left\"\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-center\"\n | \"bottom-center\";\n}\n\nconst variantIcons = {\n success: CheckCircle2,\n error: AlertCircle,\n warning: AlertTriangle,\n info: Info,\n};\n\nconst variantBorderClass = {\n success: \"border-success\",\n error: \"border-error\",\n warning: \"border-warning\",\n info: \"border-info\",\n} as const;\n\nconst variantTextClass = {\n success: \"text-fg-success\",\n error: \"text-fg-error\",\n warning: \"text-fg-warning\",\n info: \"text-fg-info\",\n} as const;\n\nexport function Toast({\n toast,\n onDismiss,\n position = \"top-right\",\n className = \"\",\n style,\n ...props\n}: ToastProps) {\n const [isVisible, setIsVisible] = useState(false);\n const [isExiting, setIsExiting] = useState(false);\n const Icon = variantIcons[toast.variant];\n\n // Auto-dismiss\n useEffect(() => {\n if (toast.duration === undefined) return;\n\n setIsVisible(true);\n\n const timer = setTimeout(() => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300); // Animation duration\n }, toast.duration);\n\n return () => clearTimeout(timer);\n }, [toast.duration, toast.id, onDismiss]);\n\n // Show animation\n useEffect(() => {\n const timer = setTimeout(() => setIsVisible(true), 10);\n return () => clearTimeout(timer);\n }, []);\n\n const positionClasses = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n };\n\n const handleDismiss = () => {\n setIsExiting(true);\n setTimeout(() => {\n onDismiss(toast.id);\n }, 300);\n };\n\n return (\n <div\n className={`\n fixed ${positionClasses[position]} ${getZIndexClass(\"toast\")}\n w-full max-w-sm\n transition-all duration-300 ease-in-out\n ${isVisible && !isExiting ? \"opacity-100 translate-y-0\" : \"opacity-0 -translate-y-2\"}\n ${isExiting ? \"opacity-0 translate-y-2\" : \"\"}\n ${className}\n `}\n style={style}\n role=\"alert\"\n aria-live={toast.variant === \"error\" ? \"assertive\" : \"polite\"}\n aria-atomic=\"true\"\n {...props}\n >\n <div\n className={`\n flex items-start ${getSpacingClass(\"md\", \"gap\")}\n ${getSpacingClass(\"base\", \"p\")}\n bg-surface-overlay\n ${getRadiusClass(\"lg\")}\n ${getShadowClass(\"lg\")}\n border\n ${variantBorderClass[toast.variant]}\n `}\n >\n {/* Icon */}\n <div className={`flex-shrink-0 ${variantTextClass[toast.variant]}`}>\n <Icon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-fg-primary\">{toast.title}</div>\n {toast.description && (\n <div\n className={`${getSpacingClass(\"xs\", \"mt\")} text-sm text-fg-secondary`}\n >\n {toast.description}\n </div>\n )}\n {toast.action && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n toast.action?.onClick();\n handleDismiss();\n }}\n >\n {toast.action.label}\n </Button>\n </div>\n )}\n </div>\n\n {/* Close Button */}\n <Button\n variant=\"iconOnly\"\n size=\"sm\"\n onClick={handleDismiss}\n className=\"flex-shrink-0\"\n aria-label=\"Dismiss notification\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}\n"],"names":["variantIcons","CheckCircle2","AlertCircle","AlertTriangle","Info","variantBorderClass","variantTextClass","Toast","_a","_b","toast","onDismiss","position","className","style","props","__objRest","isVisible","setIsVisible","useState","isExiting","setIsExiting","Icon","useEffect","timer","positionClasses","handleDismiss","jsx","__spreadProps","__spreadValues","getZIndexClass","jsxs","getSpacingClass","getRadiusClass","getShadowClass","Button","X"],"mappings":"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"}