@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,60 @@
1
+ "use client";
2
+ const p = [
3
+ "ctrl",
4
+ "cmd",
5
+ "control",
6
+ "shift",
7
+ "alt",
8
+ "meta",
9
+ "option"
10
+ ];
11
+ function h(t) {
12
+ const s = {
13
+ key: "",
14
+ ctrl: !1,
15
+ shift: !1,
16
+ alt: !1,
17
+ meta: !1,
18
+ isValid: !1
19
+ };
20
+ if (!t || typeof t != "string")
21
+ return s;
22
+ const e = t.trim();
23
+ if (!e)
24
+ return s;
25
+ const l = e.split("+").map((a) => a.trim().toLowerCase()).filter((a) => a.length > 0);
26
+ if (l.length === 0)
27
+ return s;
28
+ const i = /* @__PURE__ */ new Set();
29
+ let n = "";
30
+ for (let a = 0; a < l.length; a++) {
31
+ const r = l[a];
32
+ if (p.includes(r))
33
+ i.add(r);
34
+ else if (a === l.length - 1)
35
+ n = r;
36
+ else
37
+ return s;
38
+ }
39
+ if (!n)
40
+ return s;
41
+ const f = i.has("ctrl") || i.has("cmd") || i.has("control"), o = i.has("alt") || i.has("option");
42
+ return {
43
+ key: n,
44
+ ctrl: f,
45
+ shift: i.has("shift"),
46
+ alt: o,
47
+ meta: i.has("meta"),
48
+ isValid: !0
49
+ };
50
+ }
51
+ function m(t, s = "windows") {
52
+ if (!t.isValid) return "";
53
+ const e = [];
54
+ return s === "mac" ? (t.ctrl && e.push("⌘"), t.shift && e.push("⇧"), t.alt && e.push("⌥"), t.meta && e.push("⌃"), e.push(t.key.toUpperCase()), e.join("")) : (t.ctrl && e.push("Ctrl"), t.shift && e.push("Shift"), t.alt && e.push("Alt"), t.meta && e.push("Meta"), e.push(t.key.toUpperCase()), e.join("+"));
55
+ }
56
+ export {
57
+ m as formatKeyboardShortcut,
58
+ h as parseKeyboardShortcut
59
+ };
60
+ //# sourceMappingURL=parseKeyboardShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseKeyboardShortcut.js","sources":["../../../../../../src/ui/components/SideNavbar/utils/parseKeyboardShortcut.ts"],"sourcesContent":["/**\n * Parsed keyboard shortcut result\n */\nexport interface ParsedKeyboardShortcut {\n /** The main key (lowercase) */\n key: string;\n /** Whether Ctrl/Cmd is required */\n ctrl: boolean;\n /** Whether Shift is required */\n shift: boolean;\n /** Whether Alt is required */\n alt: boolean;\n /** Whether Meta (Windows/Cmd) is required */\n meta: boolean;\n /** Whether the shortcut is valid */\n isValid: boolean;\n}\n\n/**\n * Known modifier keys\n */\nconst MODIFIER_KEYS = [\n \"ctrl\",\n \"cmd\",\n \"control\",\n \"shift\",\n \"alt\",\n \"meta\",\n \"option\",\n] as const;\n\n/**\n * Parse a keyboard shortcut string into its components\n *\n * Supports various formats:\n * - \"Ctrl+B\" -> { key: 'b', ctrl: true, ... }\n * - \"Cmd+Shift+K\" -> { key: 'k', ctrl: true, shift: true, ... }\n * - \"Alt+Enter\" -> { key: 'enter', alt: true, ... }\n * - \"Ctrl+Shift+Alt+S\" -> { key: 's', ctrl: true, shift: true, alt: true, ... }\n *\n * Modifier aliases:\n * - \"cmd\" and \"control\" are aliases for \"ctrl\"\n * - \"option\" is an alias for \"alt\"\n *\n * @param shortcut - The keyboard shortcut string to parse\n * @returns Parsed shortcut object with key and modifiers\n *\n * @example\n * ```ts\n * parseKeyboardShortcut('Ctrl+B')\n * // { key: 'b', ctrl: true, shift: false, alt: false, meta: false, isValid: true }\n *\n * parseKeyboardShortcut('Cmd+Shift+K')\n * // { key: 'k', ctrl: true, shift: true, alt: false, meta: false, isValid: true }\n *\n * parseKeyboardShortcut('')\n * // { key: '', ctrl: false, shift: false, alt: false, meta: false, isValid: false }\n * ```\n */\nexport function parseKeyboardShortcut(\n shortcut: string,\n): ParsedKeyboardShortcut {\n // Default invalid result\n const invalidResult: ParsedKeyboardShortcut = {\n key: \"\",\n ctrl: false,\n shift: false,\n alt: false,\n meta: false,\n isValid: false,\n };\n\n // Handle empty or invalid input\n if (!shortcut || typeof shortcut !== \"string\") {\n return invalidResult;\n }\n\n // Trim and normalize\n const normalized = shortcut.trim();\n if (!normalized) {\n return invalidResult;\n }\n\n // Split by '+' and filter empty parts\n const parts = normalized\n .split(\"+\")\n .map((part) => part.trim().toLowerCase())\n .filter((part) => part.length > 0);\n\n if (parts.length === 0) {\n return invalidResult;\n }\n\n // The last non-modifier part is the main key\n const modifiers = new Set<string>();\n let mainKey = \"\";\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (MODIFIER_KEYS.includes(part as (typeof MODIFIER_KEYS)[number])) {\n modifiers.add(part);\n } else if (i === parts.length - 1) {\n // Last part should be the main key\n mainKey = part;\n } else {\n // Non-modifier key in the middle is invalid\n return invalidResult;\n }\n }\n\n // Must have a main key\n if (!mainKey) {\n return invalidResult;\n }\n\n // Check for ctrl aliases (cmd, control)\n const hasCtrl =\n modifiers.has(\"ctrl\") || modifiers.has(\"cmd\") || modifiers.has(\"control\");\n\n // Check for alt aliases (option)\n const hasAlt = modifiers.has(\"alt\") || modifiers.has(\"option\");\n\n return {\n key: mainKey,\n ctrl: hasCtrl,\n shift: modifiers.has(\"shift\"),\n alt: hasAlt,\n meta: modifiers.has(\"meta\"),\n isValid: true,\n };\n}\n\n/**\n * Format a parsed shortcut back to a string (for display)\n *\n * @param shortcut - The parsed shortcut object\n * @param platform - The platform (mac uses symbols, others use text)\n * @returns Formatted shortcut string\n *\n * @example\n * ```ts\n * formatKeyboardShortcut({ key: 'b', ctrl: true, ... }, 'mac')\n * // '⌘B'\n *\n * formatKeyboardShortcut({ key: 'b', ctrl: true, ... }, 'windows')\n * // 'Ctrl+B'\n * ```\n */\nexport function formatKeyboardShortcut(\n shortcut: ParsedKeyboardShortcut,\n platform: \"mac\" | \"windows\" | \"linux\" = \"windows\",\n): string {\n if (!shortcut.isValid) return \"\";\n\n const parts: string[] = [];\n\n if (platform === \"mac\") {\n // macOS uses symbols\n if (shortcut.ctrl) parts.push(\"⌘\");\n if (shortcut.shift) parts.push(\"⇧\");\n if (shortcut.alt) parts.push(\"⌥\");\n if (shortcut.meta) parts.push(\"⌃\");\n parts.push(shortcut.key.toUpperCase());\n return parts.join(\"\");\n }\n\n // Windows/Linux use text\n if (shortcut.ctrl) parts.push(\"Ctrl\");\n if (shortcut.shift) parts.push(\"Shift\");\n if (shortcut.alt) parts.push(\"Alt\");\n if (shortcut.meta) parts.push(\"Meta\");\n parts.push(shortcut.key.toUpperCase());\n return parts.join(\"+\");\n}\n"],"names":["MODIFIER_KEYS","parseKeyboardShortcut","shortcut","invalidResult","normalized","parts","part","modifiers","mainKey","i","hasCtrl","hasAlt","formatKeyboardShortcut","platform"],"mappings":";AAqBA,MAAMA,IAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA8BO,SAASC,EACdC,GACwB;AAExB,QAAMC,IAAwC;AAAA,IAC5C,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAIX,MAAI,CAACD,KAAY,OAAOA,KAAa;AACnC,WAAOC;AAIT,QAAMC,IAAaF,EAAS,KAAA;AAC5B,MAAI,CAACE;AACH,WAAOD;AAIT,QAAME,IAAQD,EACX,MAAM,GAAG,EACT,IAAI,CAACE,MAASA,EAAK,OAAO,YAAA,CAAa,EACvC,OAAO,CAACA,MAASA,EAAK,SAAS,CAAC;AAEnC,MAAID,EAAM,WAAW;AACnB,WAAOF;AAIT,QAAMI,wBAAgB,IAAA;AACtB,MAAIC,IAAU;AAEd,WAASC,IAAI,GAAGA,IAAIJ,EAAM,QAAQI,KAAK;AACrC,UAAMH,IAAOD,EAAMI,CAAC;AAEpB,QAAIT,EAAc,SAASM,CAAsC;AAC/D,MAAAC,EAAU,IAAID,CAAI;AAAA,aACTG,MAAMJ,EAAM,SAAS;AAE9B,MAAAG,IAAUF;AAAA;AAGV,aAAOH;AAAA,EAEX;AAGA,MAAI,CAACK;AACH,WAAOL;AAIT,QAAMO,IACJH,EAAU,IAAI,MAAM,KAAKA,EAAU,IAAI,KAAK,KAAKA,EAAU,IAAI,SAAS,GAGpEI,IAASJ,EAAU,IAAI,KAAK,KAAKA,EAAU,IAAI,QAAQ;AAE7D,SAAO;AAAA,IACL,KAAKC;AAAA,IACL,MAAME;AAAA,IACN,OAAOH,EAAU,IAAI,OAAO;AAAA,IAC5B,KAAKI;AAAA,IACL,MAAMJ,EAAU,IAAI,MAAM;AAAA,IAC1B,SAAS;AAAA,EAAA;AAEb;AAkBO,SAASK,EACdV,GACAW,IAAwC,WAChC;AACR,MAAI,CAACX,EAAS,QAAS,QAAO;AAE9B,QAAMG,IAAkB,CAAA;AAExB,SAAIQ,MAAa,SAEXX,EAAS,QAAMG,EAAM,KAAK,GAAG,GAC7BH,EAAS,SAAOG,EAAM,KAAK,GAAG,GAC9BH,EAAS,OAAKG,EAAM,KAAK,GAAG,GAC5BH,EAAS,QAAMG,EAAM,KAAK,GAAG,GACjCA,EAAM,KAAKH,EAAS,IAAI,YAAA,CAAa,GAC9BG,EAAM,KAAK,EAAE,MAIlBH,EAAS,QAAMG,EAAM,KAAK,MAAM,GAChCH,EAAS,SAAOG,EAAM,KAAK,OAAO,GAClCH,EAAS,OAAKG,EAAM,KAAK,KAAK,GAC9BH,EAAS,QAAMG,EAAM,KAAK,MAAM,GACpCA,EAAM,KAAKH,EAAS,IAAI,YAAA,CAAa,GAC9BG,EAAM,KAAK,GAAG;AACvB;"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ function u(e) {
3
+ if (typeof e == "number") return e;
4
+ const r = parseFloat(e);
5
+ return isNaN(r) ? 0 : e.endsWith("rem") || e.endsWith("em") ? r * 16 : (e.endsWith("px"), r);
6
+ }
7
+ function i(e, r) {
8
+ return e === void 0 || r === void 0 ? !0 : e < r;
9
+ }
10
+ function o(e, r, t) {
11
+ let n = e;
12
+ return r !== void 0 && (n = Math.max(n, r)), t !== void 0 && (n = Math.min(n, t)), n;
13
+ }
14
+ export {
15
+ o as clampWidth,
16
+ u as parseWidthToPixels,
17
+ i as validateWidthBounds
18
+ };
19
+ //# sourceMappingURL=parseWidth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseWidth.js","sources":["../../../../../../src/ui/components/SideNavbar/utils/parseWidth.ts"],"sourcesContent":["/**\n * Parse a width value (number or string) to pixels\n *\n * Supports:\n * - Numbers: returned as-is\n * - Pixel strings: \"320px\" -> 320\n * - Rem strings: \"20rem\" -> 320 (assuming 16px base)\n * - Em strings: \"20em\" -> 320 (assuming 16px base)\n * - Plain numbers as strings: \"320\" -> 320\n *\n * @param width - The width value to parse\n * @returns The width in pixels\n */\nexport function parseWidthToPixels(width: number | string): number {\n if (typeof width === \"number\") return width;\n\n const numericValue = parseFloat(width);\n if (isNaN(numericValue)) return 0;\n\n if (width.endsWith(\"rem\")) return numericValue * 16;\n if (width.endsWith(\"em\")) return numericValue * 16;\n if (width.endsWith(\"px\")) return numericValue;\n\n return numericValue;\n}\n\n/**\n * Validate that minWidth is less than maxWidth\n *\n * @param minWidth - Minimum width in pixels\n * @param maxWidth - Maximum width in pixels\n * @returns True if valid, false otherwise\n */\nexport function validateWidthBounds(\n minWidth?: number,\n maxWidth?: number,\n): boolean {\n if (minWidth === undefined || maxWidth === undefined) return true;\n return minWidth < maxWidth;\n}\n\n/**\n * Clamp a width value between min and max bounds\n *\n * @param width - The width to clamp\n * @param minWidth - Minimum allowed width\n * @param maxWidth - Maximum allowed width\n * @returns The clamped width value\n */\nexport function clampWidth(\n width: number,\n minWidth?: number,\n maxWidth?: number,\n): number {\n let result = width;\n if (minWidth !== undefined) result = Math.max(result, minWidth);\n if (maxWidth !== undefined) result = Math.min(result, maxWidth);\n return result;\n}\n"],"names":["parseWidthToPixels","width","numericValue","validateWidthBounds","minWidth","maxWidth","clampWidth","result"],"mappings":";AAaO,SAASA,EAAmBC,GAAgC;AACjE,MAAI,OAAOA,KAAU,SAAU,QAAOA;AAEtC,QAAMC,IAAe,WAAWD,CAAK;AACrC,SAAI,MAAMC,CAAY,IAAU,IAE5BD,EAAM,SAAS,KAAK,KACpBA,EAAM,SAAS,IAAI,IAAUC,IAAe,MAC5CD,EAAM,SAAS,IAAI,GAAUC;AAGnC;AASO,SAASC,EACdC,GACAC,GACS;AACT,SAAID,MAAa,UAAaC,MAAa,SAAkB,KACtDD,IAAWC;AACpB;AAUO,SAASC,EACdL,GACAG,GACAC,GACQ;AACR,MAAIE,IAASN;AACb,SAAIG,MAAa,WAAWG,IAAS,KAAK,IAAIA,GAAQH,CAAQ,IAC1DC,MAAa,WAAWE,IAAS,KAAK,IAAIA,GAAQF,CAAQ,IACvDE;AACT;"}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ var y = Object.defineProperty, C = Object.defineProperties;
3
+ var j = Object.getOwnPropertyDescriptors;
4
+ var r = Object.getOwnPropertySymbols;
5
+ var c = Object.prototype.hasOwnProperty, x = Object.prototype.propertyIsEnumerable;
6
+ var i = (t, e, s) => e in t ? y(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, o = (t, e) => {
7
+ for (var s in e || (e = {}))
8
+ c.call(e, s) && i(t, s, e[s]);
9
+ if (r)
10
+ for (var s of r(e))
11
+ x.call(e, s) && i(t, s, e[s]);
12
+ return t;
13
+ }, f = (t, e) => C(t, j(e));
14
+ var m = (t, e) => {
15
+ var s = {};
16
+ for (var a in t)
17
+ c.call(t, a) && e.indexOf(a) < 0 && (s[a] = t[a]);
18
+ if (t != null && r)
19
+ for (var a of r(t))
20
+ e.indexOf(a) < 0 && x.call(t, a) && (s[a] = t[a]);
21
+ return s;
22
+ };
23
+ import { jsxs as w, jsx as n } from "react/jsx-runtime";
24
+ import { getSpacingClass as g } from "../../tokens/spacing.js";
25
+ import { cn as d } from "../../utils/cn.js";
26
+ const S = {
27
+ start: "items-start text-left",
28
+ center: "items-center text-center"
29
+ }, E = {
30
+ neutral: "text-fg-tertiary",
31
+ success: "text-fg-success",
32
+ warning: "text-fg-warning",
33
+ error: "text-fg-error"
34
+ };
35
+ function A(H) {
36
+ var l = H, {
37
+ value: t,
38
+ label: e,
39
+ hint: s,
40
+ icon: a,
41
+ align: p = "start",
42
+ tone: u = "neutral",
43
+ className: h
44
+ } = l, N = m(l, [
45
+ "value",
46
+ "label",
47
+ "hint",
48
+ "icon",
49
+ "align",
50
+ "tone",
51
+ "className"
52
+ ]);
53
+ const b = t == null;
54
+ return /* @__PURE__ */ w(
55
+ "div",
56
+ f(o({
57
+ className: d(
58
+ "bg-surface-base flex-1 flex flex-col",
59
+ g("base", "p"),
60
+ g("xs", "gap-y"),
61
+ S[p],
62
+ h
63
+ )
64
+ }, N), {
65
+ children: [
66
+ a ? /* @__PURE__ */ n("span", { className: "text-icon-default inline-flex", children: a }) : null,
67
+ b ? /* @__PURE__ */ n(
68
+ "span",
69
+ {
70
+ "aria-label": "No data",
71
+ className: "text-fg-tertiary text-2xl font-semibold leading-tight",
72
+ children: "—"
73
+ }
74
+ ) : /* @__PURE__ */ n("span", { className: "text-fg-primary text-2xl font-semibold leading-tight", children: t }),
75
+ /* @__PURE__ */ n("span", { className: "text-fg-secondary text-sm", children: e }),
76
+ s ? /* @__PURE__ */ n("span", { className: d("text-xs", E[u]), children: s }) : null
77
+ ]
78
+ })
79
+ );
80
+ }
81
+ export {
82
+ A as Stat
83
+ };
84
+ //# sourceMappingURL=Stat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stat.js","sources":["../../../../../src/ui/components/Stat/Stat.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type StatTone = \"neutral\" | \"success\" | \"warning\" | \"error\";\nexport type StatAlign = \"start\" | \"center\";\n\nexport interface StatProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The metric value to display. Strings are rendered verbatim — formatting\n * (number locale, currency, units, relative time, etc.) is the consumer's\n * responsibility, not the design system's. Pass `null` or `undefined` to\n * render the empty-state placeholder (see \"Empty state\" below).\n */\n value: ReactNode;\n /**\n * Short metric label (e.g. \"Votos\", \"Alinhamento\"). Required for screen\n * reader context — the label describes what the value means.\n */\n label: string;\n /**\n * Optional third line of context below the value (e.g. \"no banco\",\n * \"últimos 12 m\", \"+3% no mês\"). The `tone` prop styles THIS line — see\n * `tone` for the contract.\n */\n hint?: ReactNode;\n /**\n * Optional icon rendered above the value (home-style stats use icons;\n * detail-page stats typically don't).\n */\n icon?: ReactNode;\n /**\n * Block alignment. `start` left-aligns label/value/hint (detail-page\n * style); `center` centers them (home-hero style).\n * @default 'start'\n */\n align?: StatAlign;\n /**\n * Semantic tone for the metric — `neutral` for plain stats, the others\n * for classified states (good/warning/bad).\n *\n * **Scope (contract).** Tone affects ONLY the `hint`, not the `value`,\n * `label`, or `icon`. The `value` always renders in `text-fg-primary`\n * regardless of tone; the `label` in `text-fg-secondary`; the `icon` in\n * `text-icon-default`. This is deliberate — a colored value would\n * compete with the label for attention and bias the reader's\n * interpretation of the metric. If a future requirement needs the\n * `value` (or icon) to inherit tone, that becomes a new prop or a\n * semver-bound default change, not a surprise expansion of `tone`.\n *\n * Tone maps directly to the semantic foreground tokens (no new\n * vocabulary): `neutral` → `text-fg-tertiary`, `success` →\n * `text-fg-success`, `warning` → `text-fg-warning`, `error` →\n * `text-fg-error`. See `.claude/rules/colors.md`.\n *\n * @default 'neutral'\n */\n tone?: StatTone;\n}\n\nconst alignClasses: Record<StatAlign, string> = {\n start: \"items-start text-left\",\n center: \"items-center text-center\",\n};\n\nconst toneHintClasses: Record<StatTone, string> = {\n neutral: \"text-fg-tertiary\",\n success: \"text-fg-success\",\n warning: \"text-fg-warning\",\n error: \"text-fg-error\",\n};\n\n/**\n * `Stat` — a single statistic block (icon? + value + label + hint?).\n *\n * Composes with `StatGroup` (1-px-divider strip or grid) but is also\n * valid standalone — a single `Stat` outside a group is a legitimate use\n * case for a hero metric.\n *\n * ### Empty state contract\n *\n * When `value` is `null` OR `undefined`, the component renders the\n * em-dash placeholder `—` (U+2014) with `aria-label=\"No data\"` on its\n * wrapper. The label is intentionally hard-coded in English in this\n * version; a screen reader announcing \"No data\" in an otherwise\n * Portuguese app is a known inconsistency accepted for now — if i18n\n * becomes a requirement, an `emptyLabel?: string` prop will be added in\n * a follow-up PR (semver-safe addition).\n *\n * Other falsy values — `0`, `\"\"`, `false`, an empty fragment — are\n * **legitimate values** and render as-is. The empty trigger is only\n * `null`/`undefined`, because `0` (count = zero) is meaningful data that\n * the consumer would not want masked.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * the `./server` entry alongside `StatGroup`. Consumer-supplied `icon`\n * may itself be a client component; React's RSC boundary handles that\n * normally.\n *\n * @example\n * ```tsx\n * // Home-style (centered, with icon)\n * <Stat\n * icon={<Users size={20} aria-hidden=\"true\" />}\n * value=\"9,4 mil\"\n * label=\"Parlamentares\"\n * align=\"center\"\n * />\n *\n * // Detail-page-style (start-aligned, with hint)\n * <Stat\n * value=\"87%\"\n * label=\"Alinhamento\"\n * hint=\"últimos 12 meses\"\n * tone=\"success\"\n * />\n * ```\n */\nexport function Stat({\n value,\n label,\n hint,\n icon,\n align = \"start\",\n tone = \"neutral\",\n className,\n ...props\n}: StatProps) {\n const isEmpty = value === null || value === undefined;\n\n return (\n <div\n className={cn(\n \"bg-surface-base flex-1 flex flex-col\",\n getSpacingClass(\"base\", \"p\"),\n getSpacingClass(\"xs\", \"gap-y\"),\n alignClasses[align],\n className,\n )}\n {...props}\n >\n {icon ? (\n <span className=\"text-icon-default inline-flex\">{icon}</span>\n ) : null}\n {isEmpty ? (\n <span\n aria-label=\"No data\"\n className=\"text-fg-tertiary text-2xl font-semibold leading-tight\"\n >\n —\n </span>\n ) : (\n <span className=\"text-fg-primary text-2xl font-semibold leading-tight\">\n {value}\n </span>\n )}\n <span className=\"text-fg-secondary text-sm\">{label}</span>\n {hint ? (\n <span className={cn(\"text-xs\", toneHintClasses[tone])}>{hint}</span>\n ) : null}\n </div>\n );\n}\n\nexport default Stat;\n"],"names":["alignClasses","toneHintClasses","Stat","_a","_b","value","label","hint","icon","align","tone","className","props","__objRest","isEmpty","jsxs","__spreadProps","__spreadValues","cn","getSpacingClass","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAMA,IAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,QAAQ;AACV,GAEMC,IAA4C;AAAA,EAChD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT;AAkDO,SAASC,EAAKC,GASP;AATO,MAAAC,IAAAD,GACnB;AAAA,WAAAE;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,WAAAC;AAAA,MAPmBP,GAQhBQ,IAAAC,EARgBT,GAQhB;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMU,IAAUT,KAAU;AAE1B,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAgB,QAAQ,GAAG;AAAA,QAC3BA,EAAgB,MAAM,OAAO;AAAA,QAC7BnB,EAAaS,CAAK;AAAA,QAClBE;AAAA,MAAA;AAAA,OAEEC,IARL;AAAA,MAUE,UAAA;AAAA,QAAAJ,IACC,gBAAAY,EAAC,QAAA,EAAK,WAAU,iCAAiC,aAAK,IACpD;AAAA,QACHN,IACC,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA,IAID,gBAAAA,EAAC,QAAA,EAAK,WAAU,wDACb,UAAAf,GACH;AAAA,QAEF,gBAAAe,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAAd,GAAM;AAAA,QAClDC,IACC,gBAAAa,EAAC,QAAA,EAAK,WAAWF,EAAG,WAAWjB,EAAgBS,CAAI,CAAC,GAAI,UAAAH,EAAA,CAAK,IAC3D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ var p = Object.defineProperty, u = Object.defineProperties;
3
+ var x = Object.getOwnPropertyDescriptors;
4
+ var e = Object.getOwnPropertySymbols;
5
+ var t = Object.prototype.hasOwnProperty, g = Object.prototype.propertyIsEnumerable;
6
+ var s = (r, d, i) => d in r ? p(r, d, { enumerable: !0, configurable: !0, writable: !0, value: i }) : r[d] = i, c = (r, d) => {
7
+ for (var i in d || (d = {}))
8
+ t.call(d, i) && s(r, i, d[i]);
9
+ if (e)
10
+ for (var i of e(d))
11
+ g.call(d, i) && s(r, i, d[i]);
12
+ return r;
13
+ }, m = (r, d) => u(r, x(d));
14
+ var n = (r, d) => {
15
+ var i = {};
16
+ for (var o in r)
17
+ t.call(r, o) && d.indexOf(o) < 0 && (i[o] = r[o]);
18
+ if (r != null && e)
19
+ for (var o of e(r))
20
+ d.indexOf(o) < 0 && g.call(r, o) && (i[o] = r[o]);
21
+ return i;
22
+ };
23
+ import { jsx as b } from "react/jsx-runtime";
24
+ import { getRadiusClass as v } from "../../tokens/radius.js";
25
+ import { cn as C } from "../../utils/cn.js";
26
+ const G = {
27
+ 2: "md:grid-cols-2",
28
+ 3: "md:grid-cols-3",
29
+ 4: "md:grid-cols-4"
30
+ };
31
+ function R(h) {
32
+ var l = h, {
33
+ layout: r = "grid",
34
+ cols: d = 4,
35
+ className: i,
36
+ children: o
37
+ } = l, a = n(l, [
38
+ "layout",
39
+ "cols",
40
+ "className",
41
+ "children"
42
+ ]);
43
+ const f = r === "grid";
44
+ return /* @__PURE__ */ b(
45
+ "div",
46
+ m(c({
47
+ className: C(
48
+ "bg-line-default border border-line-default overflow-hidden gap-px",
49
+ v("lg"),
50
+ f ? `grid grid-cols-2 ${G[d]}` : "flex",
51
+ i
52
+ )
53
+ }, a), {
54
+ children: o
55
+ })
56
+ );
57
+ }
58
+ export {
59
+ R as StatGroup
60
+ };
61
+ //# sourceMappingURL=StatGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatGroup.js","sources":["../../../../../src/ui/components/Stat/StatGroup.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type StatGroupLayout = \"strip\" | \"grid\";\nexport type StatGroupCols = 2 | 3 | 4;\n\nexport interface StatGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * `strip` — single horizontal row, no wrap. Each `Stat` shares the row\n * width via `flex-1`. Use when you guarantee the horizontal space\n * (hero areas, wide dashboards). On narrow viewports the row does NOT\n * reflow — choose `grid` if you need responsive collapse.\n *\n * `grid` — multi-column grid that reflows. Always 2-up on mobile,\n * expands to `cols` columns at the `md` breakpoint (768 px) and up.\n * Five or more children spill to a second row with the divider lines\n * preserved.\n *\n * @default 'grid'\n */\n layout?: StatGroupLayout;\n /**\n * Desktop column count (≥ 768 px). Only effective in `layout=\"grid\"`;\n * ignored in `layout=\"strip\"`. Mobile is always 2 columns regardless.\n *\n * @default 4\n */\n cols?: StatGroupCols;\n children: ReactNode;\n}\n\n// Tailwind v4 generates `md:grid-cols-N` for N ∈ {2,3,4} statically from\n// the literal class string. The map below ensures the strings exist\n// verbatim in the source so JIT picks them up.\nconst gridColsMd: Record<StatGroupCols, string> = {\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n};\n\n/**\n * `StatGroup` — container for one or more `Stat` blocks with 1-px\n * dividers between them.\n *\n * ### Divider technique\n *\n * The container has `bg-line-default` and `gap-px` (1 px); each child\n * `Stat` carries its own `bg-surface-base`. The 1 px of gap exposes the\n * container's background as the divider line, while each cell masks its\n * own area with `bg-surface-base`. Works identically for the strip\n * layout (vertical dividers) and the grid layout (vertical AND\n * horizontal dividers, automatically, as the grid reflows). No separate\n * `Divider` component, no per-cell border logic.\n *\n * The outer ring is `border border-line-default` matching the gap color,\n * with `rounded-lg` and `overflow-hidden` clipping the inner cells to\n * the radius.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * `./server` alongside `Stat`.\n *\n * @example\n * ```tsx\n * <StatGroup layout=\"strip\">\n * <Stat icon={<Users />} value=\"9,4 mil\" label=\"Parlamentares\" align=\"center\" />\n * <Stat icon={<FileText />} value=\"3,2 mil\" label=\"Proposições\" align=\"center\" />\n * <Stat icon={<Vote />} value=\"1,1 mil\" label=\"Votações\" align=\"center\" />\n * <Stat icon={<Clock />} value=\"há 18 dias\" label=\"Última atualização\" align=\"center\" />\n * </StatGroup>\n *\n * <StatGroup layout=\"grid\" cols={4}>\n * <Stat value=\"87%\" label=\"Alinhamento\" hint=\"últimos 12 m\" tone=\"success\" />\n * <Stat value={null} label=\"Sem orientação\" hint=\"no período\" />\n * <Stat value=\"R$ 187.472,95\" label=\"Gastos\" hint=\"no mandato\" />\n * <Stat value=\"42\" label=\"Votações\" hint=\"no banco\" />\n * </StatGroup>\n * ```\n */\nexport function StatGroup({\n layout = \"grid\",\n cols = 4,\n className,\n children,\n ...props\n}: StatGroupProps) {\n const isGrid = layout === \"grid\";\n\n return (\n <div\n className={cn(\n \"bg-line-default border border-line-default overflow-hidden gap-px\",\n getRadiusClass(\"lg\"),\n isGrid ? `grid grid-cols-2 ${gridColsMd[cols]}` : \"flex\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default StatGroup;\n"],"names":["gridColsMd","StatGroup","_a","_b","layout","cols","className","children","props","__objRest","isGrid","jsx","__spreadProps","__spreadValues","cn","getRadiusClass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAMA,IAA4C;AAAA,EAChD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AA0CO,SAASC,EAAUC,GAMP;AANO,MAAAC,IAAAD,GACxB;AAAA,YAAAE,IAAS;AAAA,IACT,MAAAC,IAAO;AAAA,IACP,WAAAC;AAAA,IACA,UAAAC;AAAA,MAJwBJ,GAKrBK,IAAAC,EALqBN,GAKrB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAMO,IAASN,MAAW;AAE1B,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAe,IAAI;AAAA,QACnBL,IAAS,oBAAoBV,EAAWK,CAAI,CAAC,KAAK;AAAA,QAClDC;AAAA,MAAA;AAAA,OAEEE,IAPL;AAAA,MASE,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,248 @@
1
+ "use client";
2
+ var R = Object.defineProperty, D = Object.defineProperties;
3
+ var E = Object.getOwnPropertyDescriptors;
4
+ var q = Object.getOwnPropertySymbols;
5
+ var G = Object.prototype.hasOwnProperty, H = Object.prototype.propertyIsEnumerable;
6
+ var I = (t, i, a) => i in t ? R(t, i, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[i] = a, g = (t, i) => {
7
+ for (var a in i || (i = {}))
8
+ G.call(i, a) && I(t, a, i[a]);
9
+ if (q)
10
+ for (var a of q(i))
11
+ H.call(i, a) && I(t, a, i[a]);
12
+ return t;
13
+ }, h = (t, i) => D(t, E(i));
14
+ import { jsxs as n, jsx as r } from "react/jsx-runtime";
15
+ import { useState as J } from "react";
16
+ import { Check as z } from "lucide-react";
17
+ import { getSpacingClass as l } from "../../tokens/spacing.js";
18
+ import { getRadiusClass as b } from "../../tokens/radius.js";
19
+ import { getAnimationClass as B } from "../../tokens/animations.js";
20
+ import { Button as u } from "../../primitives/Button/Button.js";
21
+ import K from "../../primitives/Separator/Separator.js";
22
+ function Z({
23
+ steps: t,
24
+ currentStep: i,
25
+ defaultCurrentStep: a = 0,
26
+ onStepChange: o,
27
+ onComplete: $,
28
+ allowNavigation: m = !0,
29
+ showStepNumbers: N = !0,
30
+ orientation: F = "horizontal",
31
+ className: y = ""
32
+ }) {
33
+ const [L, x] = J(a), f = i !== void 0, d = f ? i : L, k = (e) => e < d ? "completed" : e === d ? "active" : "pending", j = () => {
34
+ if (d < t.length - 1) {
35
+ const e = d + 1;
36
+ f || x(e), o == null || o(e);
37
+ } else
38
+ $ == null || $();
39
+ }, S = () => {
40
+ if (d > 0) {
41
+ const e = d - 1;
42
+ f || x(e), o == null || o(e);
43
+ }
44
+ }, p = (e) => {
45
+ m && (t[e].disabled || (f || x(e), o == null || o(e)));
46
+ }, w = t[d], A = d === 0, P = d === t.length - 1;
47
+ return F === "vertical" ? /* @__PURE__ */ n("div", { className: `flex ${l("base", "gap")} ${y}`, children: [
48
+ /* @__PURE__ */ r("div", { className: "flex flex-col", children: t.map((e, s) => {
49
+ const c = e.status || k(s), v = s === d;
50
+ return /* @__PURE__ */ n(
51
+ "div",
52
+ {
53
+ className: `flex items-start ${l("md", "gap")}`,
54
+ children: [
55
+ /* @__PURE__ */ n("div", { className: "flex flex-col items-center", children: [
56
+ /* @__PURE__ */ r(
57
+ "button",
58
+ h(g({
59
+ type: "button",
60
+ onClick: () => p(s),
61
+ disabled: !m || e.disabled,
62
+ "aria-label": e.title ? `Step ${s + 1}: ${e.title}` : `Step ${s + 1}`
63
+ }, c === "pending" ? { "data-marker": "pending" } : {}), {
64
+ className: `
65
+ flex
66
+ items-center
67
+ justify-center
68
+ w-10
69
+ h-10
70
+ ${b("full")}
71
+ border-2
72
+ ${B("base")}
73
+ ${c === "completed" ? "bg-success border-success text-fg-inverse" : c === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : c === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
74
+ ${!m || e.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"}
75
+ `,
76
+ children: c === "completed" ? /* @__PURE__ */ r(z, { className: "h-5 w-5" }) : N ? s + 1 : null
77
+ })
78
+ ),
79
+ s < t.length - 1 && /* @__PURE__ */ r(
80
+ "div",
81
+ {
82
+ className: `
83
+ w-0.5
84
+ h-12
85
+ ${l("sm", "mt")}
86
+ ${c === "completed" ? "bg-success" : "bg-line-emphasis"}
87
+ `
88
+ }
89
+ )
90
+ ] }),
91
+ /* @__PURE__ */ n("div", { className: `flex-1 ${l("xl", "pb")}`, children: [
92
+ /* @__PURE__ */ r(
93
+ "button",
94
+ {
95
+ type: "button",
96
+ onClick: () => p(s),
97
+ disabled: !m || e.disabled,
98
+ className: `
99
+ text-left
100
+ ${v ? "font-semibold" : "font-medium"}
101
+ ${c === "active" ? "text-fg-brand-emphasis" : "text-fg-secondary"}
102
+ ${!m || e.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"}
103
+ `,
104
+ children: e.title
105
+ }
106
+ ),
107
+ e.description && /* @__PURE__ */ r(
108
+ "p",
109
+ {
110
+ className: `text-sm text-fg-tertiary ${l("xs", "mt")}`,
111
+ children: e.description
112
+ }
113
+ )
114
+ ] })
115
+ ]
116
+ },
117
+ e.id
118
+ );
119
+ }) }),
120
+ /* @__PURE__ */ n("div", { className: "flex-1", children: [
121
+ /* @__PURE__ */ r(
122
+ "div",
123
+ {
124
+ className: `
125
+ ${l("lg", "p")}
126
+ border
127
+ border-line-default
128
+ ${b("lg")}
129
+ bg-surface-base
130
+ `,
131
+ children: w.content
132
+ }
133
+ ),
134
+ /* @__PURE__ */ n(
135
+ "div",
136
+ {
137
+ className: `flex justify-between ${l("base", "mt")} ${l("base", "gap")}`,
138
+ children: [
139
+ /* @__PURE__ */ r(
140
+ u,
141
+ {
142
+ variant: "outline",
143
+ onClick: S,
144
+ disabled: A,
145
+ children: "Previous"
146
+ }
147
+ ),
148
+ /* @__PURE__ */ r(u, { variant: "primary", onClick: j, children: P ? "Complete" : "Next" })
149
+ ]
150
+ }
151
+ )
152
+ ] })
153
+ ] }) : /* @__PURE__ */ n("div", { className: `${l("lg", "space-y")} ${y}`, children: [
154
+ /* @__PURE__ */ r("div", { className: "flex items-center", children: t.map((e, s) => {
155
+ const c = e.status || k(s), v = s === d;
156
+ return /* @__PURE__ */ n("div", { className: "flex items-center flex-1", children: [
157
+ /* @__PURE__ */ n("div", { className: "flex flex-col items-center flex-1", children: [
158
+ /* @__PURE__ */ r(
159
+ "button",
160
+ h(g({
161
+ type: "button",
162
+ onClick: () => p(s),
163
+ disabled: !m || e.disabled,
164
+ "aria-label": e.title ? `Step ${s + 1}: ${e.title}` : `Step ${s + 1}`
165
+ }, c === "pending" ? { "data-marker": "pending" } : {}), {
166
+ className: `
167
+ flex
168
+ items-center
169
+ justify-center
170
+ w-10
171
+ h-10
172
+ ${b("full")}
173
+ border-2
174
+ ${B("base")}
175
+ ${c === "completed" ? "bg-success border-success text-fg-inverse" : c === "active" ? "bg-surface-brand-strong border-line-brand text-fg-inverse" : c === "error" ? "bg-error border-error text-fg-inverse" : "bg-surface-base border-line-emphasis text-fg-quaternary"}
176
+ ${!m || e.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"}
177
+ `,
178
+ children: c === "completed" ? /* @__PURE__ */ r(z, { className: "h-5 w-5" }) : N ? s + 1 : null
179
+ })
180
+ ),
181
+ /* @__PURE__ */ n(
182
+ "div",
183
+ {
184
+ className: `${l("sm", "mt")} text-center ${l("sm", "px")}`,
185
+ children: [
186
+ /* @__PURE__ */ r(
187
+ "p",
188
+ {
189
+ className: `
190
+ text-sm
191
+ font-medium
192
+ ${v ? "text-fg-brand-emphasis" : "text-fg-secondary"}
193
+ `,
194
+ children: e.title
195
+ }
196
+ ),
197
+ e.description && /* @__PURE__ */ r(
198
+ "p",
199
+ {
200
+ className: `text-xs text-fg-tertiary ${l("xs", "mt")}`,
201
+ children: e.description
202
+ }
203
+ )
204
+ ]
205
+ }
206
+ )
207
+ ] }),
208
+ s < t.length - 1 && /* @__PURE__ */ r("div", { className: `flex-1 ${l("base", "mx")}`, children: /* @__PURE__ */ r(
209
+ K,
210
+ {
211
+ className: `
212
+ ${c === "completed" ? "border-success" : "border-line-emphasis"}
213
+ `
214
+ }
215
+ ) })
216
+ ] }, e.id);
217
+ }) }),
218
+ /* @__PURE__ */ r(
219
+ "div",
220
+ {
221
+ className: `
222
+ ${l("lg", "p")}
223
+ border
224
+ border-line-default
225
+ ${b("lg")}
226
+ bg-surface-base
227
+ `,
228
+ children: w.content
229
+ }
230
+ ),
231
+ /* @__PURE__ */ n("div", { className: `flex justify-between ${l("base", "gap")}`, children: [
232
+ /* @__PURE__ */ r(
233
+ u,
234
+ {
235
+ variant: "outline",
236
+ onClick: S,
237
+ disabled: A,
238
+ children: "Previous"
239
+ }
240
+ ),
241
+ /* @__PURE__ */ r(u, { variant: "primary", onClick: j, children: P ? "Complete" : "Next" })
242
+ ] })
243
+ ] });
244
+ }
245
+ export {
246
+ Z as default
247
+ };
248
+ //# sourceMappingURL=Stepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.js","sources":["../../../../../src/ui/components/Stepper/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport Button from \"../../primitives/Button/Button\";\nimport Separator from \"../../primitives/Separator/Separator\";\n\nexport type StepperStatus = \"pending\" | \"active\" | \"completed\" | \"error\";\n\nexport interface StepperStep {\n id: string;\n title: string;\n description?: string;\n content: ReactNode;\n status?: StepperStatus;\n disabled?: boolean;\n}\n\nexport interface StepperProps {\n steps: StepperStep[];\n currentStep?: number;\n defaultCurrentStep?: number;\n onStepChange?: (stepIndex: number) => void;\n onComplete?: () => void;\n allowNavigation?: boolean;\n showStepNumbers?: boolean;\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\n/**\n * Stepper Component\n *\n * A multi-step wizard component for guided workflows.\n * Supports validation, navigation, and completion callbacks.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Stepper\n * steps={[\n * { id: '1', title: 'Step 1', content: <div>Content 1</div> },\n * { id: '2', title: 'Step 2', content: <div>Content 2</div> },\n * ]}\n * onComplete={() => console.log('Completed!')}\n * />\n * ```\n */\nexport default function Stepper({\n steps,\n currentStep: controlledCurrentStep,\n defaultCurrentStep = 0,\n onStepChange,\n onComplete,\n allowNavigation = true,\n showStepNumbers = true,\n orientation = \"horizontal\",\n className = \"\",\n}: StepperProps) {\n const [internalCurrentStep, setInternalCurrentStep] =\n useState(defaultCurrentStep);\n\n const isControlled = controlledCurrentStep !== undefined;\n const currentStepIndex = isControlled\n ? controlledCurrentStep\n : internalCurrentStep;\n\n const getStepStatus = (index: number): StepperStatus => {\n if (index < currentStepIndex) return \"completed\";\n if (index === currentStepIndex) return \"active\";\n return \"pending\";\n };\n\n const handleNext = () => {\n if (currentStepIndex < steps.length - 1) {\n const nextStep = currentStepIndex + 1;\n if (!isControlled) {\n setInternalCurrentStep(nextStep);\n }\n onStepChange?.(nextStep);\n } else {\n onComplete?.();\n }\n };\n\n const handlePrevious = () => {\n if (currentStepIndex > 0) {\n const prevStep = currentStepIndex - 1;\n if (!isControlled) {\n setInternalCurrentStep(prevStep);\n }\n onStepChange?.(prevStep);\n }\n };\n\n const handleStepClick = (index: number) => {\n if (!allowNavigation) return;\n if (steps[index].disabled) return;\n\n if (!isControlled) {\n setInternalCurrentStep(index);\n }\n onStepChange?.(index);\n };\n\n const currentStep = steps[currentStepIndex];\n const isFirstStep = currentStepIndex === 0;\n const isLastStep = currentStepIndex === steps.length - 1;\n\n if (orientation === \"vertical\") {\n return (\n <div className={`flex ${getSpacingClass(\"base\", \"gap\")} ${className}`}>\n {/* Steps List */}\n <div className=\"flex flex-col\">\n {steps.map((step, index) => {\n const status = step.status || getStepStatus(index);\n const isActive = index === currentStepIndex;\n\n return (\n <div\n key={step.id}\n className={`flex items-start ${getSpacingClass(\"md\", \"gap\")}`}\n >\n {/* Step Indicator */}\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n aria-label={\n step.title\n ? `Step ${index + 1}: ${step.title}`\n : `Step ${index + 1}`\n }\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\". Anchors\n // the directed a11y suppression to the pending-marker\n // ROLE, not to style classes; survives a future restyle\n // of the bubble.\n {...(status === \"pending\"\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 ${getAnimationClass(\"base\")}\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 ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {status === \"completed\" ? (\n <Check className=\"h-5 w-5\" />\n ) : showStepNumbers ? (\n index + 1\n ) : null}\n </button>\n {index < steps.length - 1 && (\n <div\n className={`\n w-0.5\n h-12\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Step Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n className={`\n text-left\n ${isActive ? \"font-semibold\" : \"font-medium\"}\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-secondary\"}\n ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {step.title}\n </button>\n {step.description && (\n <p\n className={`text-sm text-fg-tertiary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Step Content */}\n <div className=\"flex-1\">\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border\n border-line-default\n ${getRadiusClass(\"lg\")}\n bg-surface-base\n `}\n >\n {currentStep.content}\n </div>\n\n {/* Navigation */}\n <div\n className={`flex justify-between ${getSpacingClass(\"base\", \"mt\")} ${getSpacingClass(\"base\", \"gap\")}`}\n >\n <Button\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={isFirstStep}\n >\n Previous\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n // Horizontal orientation\n return (\n <div className={`${getSpacingClass(\"lg\", \"space-y\")} ${className}`}>\n {/* Steps List */}\n <div className=\"flex items-center\">\n {steps.map((step, index) => {\n const status = step.status || getStepStatus(index);\n const isActive = index === currentStepIndex;\n\n return (\n <div key={step.id} className=\"flex items-center flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!allowNavigation || step.disabled}\n aria-label={\n step.title\n ? `Step ${index + 1}: ${step.title}`\n : `Step ${index + 1}`\n }\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"pending\"\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 ${getAnimationClass(\"base\")}\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 ${!allowNavigation || step.disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"}\n `}\n >\n {status === \"completed\" ? (\n <Check className=\"h-5 w-5\" />\n ) : showStepNumbers ? (\n index + 1\n ) : null}\n </button>\n <div\n className={`${getSpacingClass(\"sm\", \"mt\")} text-center ${getSpacingClass(\"sm\", \"px\")}`}\n >\n <p\n className={`\n text-sm\n font-medium\n ${isActive ? \"text-fg-brand-emphasis\" : \"text-fg-secondary\"}\n `}\n >\n {step.title}\n </p>\n {step.description && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {step.description}\n </p>\n )}\n </div>\n </div>\n {index < steps.length - 1 && (\n <div className={`flex-1 ${getSpacingClass(\"base\", \"mx\")}`}>\n <Separator\n className={`\n ${status === \"completed\" ? \"border-success\" : \"border-line-emphasis\"}\n `}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Step Content */}\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border\n border-line-default\n ${getRadiusClass(\"lg\")}\n bg-surface-base\n `}\n >\n {currentStep.content}\n </div>\n\n {/* Navigation */}\n <div className={`flex justify-between ${getSpacingClass(\"base\", \"gap\")}`}>\n <Button\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={isFirstStep}\n >\n Previous\n </Button>\n <Button variant=\"primary\" onClick={handleNext}>\n {isLastStep ? \"Complete\" : \"Next\"}\n </Button>\n </div>\n </div>\n );\n}\n"],"names":["Stepper","steps","controlledCurrentStep","defaultCurrentStep","onStepChange","onComplete","allowNavigation","showStepNumbers","orientation","className","internalCurrentStep","setInternalCurrentStep","useState","isControlled","currentStepIndex","getStepStatus","index","handleNext","nextStep","handlePrevious","prevStep","handleStepClick","currentStep","isFirstStep","isLastStep","jsxs","getSpacingClass","jsx","step","status","isActive","__spreadProps","__spreadValues","getRadiusClass","getAnimationClass","Check","Button","Separator"],"mappings":"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"}