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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/README.md +4 -2
  2. package/dist/granular/index.js +445 -0
  3. package/dist/granular/index.js.map +1 -0
  4. package/dist/granular/ui/components/Accordion/Accordion.js +105 -0
  5. package/dist/granular/ui/components/Accordion/Accordion.js.map +1 -0
  6. package/dist/granular/ui/components/Autocomplete/Autocomplete.js +133 -0
  7. package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -0
  8. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +119 -0
  9. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -0
  10. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +42 -0
  11. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -0
  12. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js +100 -0
  13. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -0
  14. package/dist/granular/ui/components/Card/Card.js +113 -0
  15. package/dist/granular/ui/components/Card/Card.js.map +1 -0
  16. package/dist/granular/ui/components/Card/CardActions.js +51 -0
  17. package/dist/granular/ui/components/Card/CardActions.js.map +1 -0
  18. package/dist/granular/ui/components/Card/CardBody.js +32 -0
  19. package/dist/granular/ui/components/Card/CardBody.js.map +1 -0
  20. package/dist/granular/ui/components/Card/CardHeader.js +47 -0
  21. package/dist/granular/ui/components/Card/CardHeader.js.map +1 -0
  22. package/dist/granular/ui/components/Card/CardSubtitle.js +38 -0
  23. package/dist/granular/ui/components/Card/CardSubtitle.js.map +1 -0
  24. package/dist/granular/ui/components/Card/CardTitle.js +61 -0
  25. package/dist/granular/ui/components/Card/CardTitle.js.map +1 -0
  26. package/dist/granular/ui/components/ColorPicker/ColorPicker.js +250 -0
  27. package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -0
  28. package/dist/granular/ui/components/CommandPalette/CommandPalette.js +274 -0
  29. package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -0
  30. package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js +37 -0
  31. package/dist/granular/ui/components/DashboardLayout/DashboardLayout.js.map +1 -0
  32. package/dist/granular/ui/components/DataGrid/DataGrid.js +155 -0
  33. package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -0
  34. package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js +113 -0
  35. package/dist/granular/ui/components/DataTablePattern/DataTablePattern.js.map +1 -0
  36. package/dist/granular/ui/components/DatePicker/DatePicker.js +126 -0
  37. package/dist/granular/ui/components/DatePicker/DatePicker.js.map +1 -0
  38. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +294 -0
  39. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -0
  40. package/dist/granular/ui/components/DatePicker/DatePickerContext.js +16 -0
  41. package/dist/granular/ui/components/DatePicker/DatePickerContext.js.map +1 -0
  42. package/dist/granular/ui/components/DatePicker/DatePickerInput.js +119 -0
  43. package/dist/granular/ui/components/DatePicker/DatePickerInput.js.map +1 -0
  44. package/dist/granular/ui/components/DatePicker/DatePickerProvider.js +47 -0
  45. package/dist/granular/ui/components/DatePicker/DatePickerProvider.js.map +1 -0
  46. package/dist/granular/ui/components/Dialog/AlertDialog.js +48 -0
  47. package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -0
  48. package/dist/granular/ui/components/Dialog/Dialog.js +36 -0
  49. package/dist/granular/ui/components/Dialog/Dialog.js.map +1 -0
  50. package/dist/granular/ui/components/Dialog/DialogClose.js +34 -0
  51. package/dist/granular/ui/components/Dialog/DialogClose.js.map +1 -0
  52. package/dist/granular/ui/components/Dialog/DialogContent.js +114 -0
  53. package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -0
  54. package/dist/granular/ui/components/Dialog/DialogDescription.js +51 -0
  55. package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -0
  56. package/dist/granular/ui/components/Dialog/DialogFooter.js +45 -0
  57. package/dist/granular/ui/components/Dialog/DialogFooter.js.map +1 -0
  58. package/dist/granular/ui/components/Dialog/DialogHeader.js +45 -0
  59. package/dist/granular/ui/components/Dialog/DialogHeader.js.map +1 -0
  60. package/dist/granular/ui/components/Dialog/DialogTitle.js +53 -0
  61. package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -0
  62. package/dist/granular/ui/components/Dialog/DialogTrigger.js +28 -0
  63. package/dist/granular/ui/components/Dialog/DialogTrigger.js.map +1 -0
  64. package/dist/granular/ui/components/Drawer/Drawer.js +47 -0
  65. package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -0
  66. package/dist/granular/ui/components/Drawer/DrawerContent.js +140 -0
  67. package/dist/granular/ui/components/Drawer/DrawerContent.js.map +1 -0
  68. package/dist/granular/ui/components/Drawer/DrawerContext.js +21 -0
  69. package/dist/granular/ui/components/Drawer/DrawerContext.js.map +1 -0
  70. package/dist/granular/ui/components/Drawer/DrawerFooter.js +53 -0
  71. package/dist/granular/ui/components/Drawer/DrawerFooter.js.map +1 -0
  72. package/dist/granular/ui/components/Drawer/DrawerHeader.js +50 -0
  73. package/dist/granular/ui/components/Drawer/DrawerHeader.js.map +1 -0
  74. package/dist/granular/ui/components/Dropdown/Dropdown.js +243 -0
  75. package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -0
  76. package/dist/granular/ui/components/EmptyState/EmptyState.js +102 -0
  77. package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -0
  78. package/dist/granular/ui/components/FileUpload/FileUpload.js +342 -0
  79. package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -0
  80. package/dist/granular/ui/components/Form/Form.js +184 -0
  81. package/dist/granular/ui/components/Form/Form.js.map +1 -0
  82. package/dist/granular/ui/components/Form/FormContext.js +19 -0
  83. package/dist/granular/ui/components/Form/FormContext.js.map +1 -0
  84. package/dist/granular/ui/components/Form/FormField.js +66 -0
  85. package/dist/granular/ui/components/Form/FormField.js.map +1 -0
  86. package/dist/granular/ui/components/Form/FormProvider.js +17 -0
  87. package/dist/granular/ui/components/Form/FormProvider.js.map +1 -0
  88. package/dist/granular/ui/components/Form/useFormFieldArray.js +29 -0
  89. package/dist/granular/ui/components/Form/useFormFieldArray.js.map +1 -0
  90. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js +121 -0
  91. package/dist/granular/ui/components/FormWizardPattern/FormWizardPattern.js.map +1 -0
  92. package/dist/granular/ui/components/Header/Header.js +98 -0
  93. package/dist/granular/ui/components/Header/Header.js.map +1 -0
  94. package/dist/granular/ui/components/Header/components/HeaderActions.js +21 -0
  95. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -0
  96. package/dist/granular/ui/components/Header/components/HeaderHamburger.js +31 -0
  97. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -0
  98. package/dist/granular/ui/components/Header/components/HeaderLogo.js +50 -0
  99. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -0
  100. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js +38 -0
  101. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -0
  102. package/dist/granular/ui/components/Header/components/HeaderNavigation.js +27 -0
  103. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -0
  104. package/dist/granular/ui/components/Header/contexts/HeaderContext.js +49 -0
  105. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -0
  106. package/dist/granular/ui/components/LoginBox/LoginBox.js +84 -0
  107. package/dist/granular/ui/components/LoginBox/LoginBox.js.map +1 -0
  108. package/dist/granular/ui/components/Menu/Menu.js +45 -0
  109. package/dist/granular/ui/components/Menu/Menu.js.map +1 -0
  110. package/dist/granular/ui/components/Menu/MenuContent.js +94 -0
  111. package/dist/granular/ui/components/Menu/MenuContent.js.map +1 -0
  112. package/dist/granular/ui/components/Menu/MenuContext.js +21 -0
  113. package/dist/granular/ui/components/Menu/MenuContext.js.map +1 -0
  114. package/dist/granular/ui/components/Menu/MenuItem.js +93 -0
  115. package/dist/granular/ui/components/Menu/MenuItem.js.map +1 -0
  116. package/dist/granular/ui/components/Menu/MenuSeparator.js +46 -0
  117. package/dist/granular/ui/components/Menu/MenuSeparator.js.map +1 -0
  118. package/dist/granular/ui/components/Menu/MenuTrigger.js +71 -0
  119. package/dist/granular/ui/components/Menu/MenuTrigger.js.map +1 -0
  120. package/dist/granular/ui/components/Modal/Modal.js +171 -0
  121. package/dist/granular/ui/components/Modal/Modal.js.map +1 -0
  122. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +193 -0
  123. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -0
  124. package/dist/granular/ui/components/Navigation/Navigation.js +141 -0
  125. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -0
  126. package/dist/granular/ui/components/PageHeader/PageHeader.js +95 -0
  127. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -0
  128. package/dist/granular/ui/components/Pagination/Pagination.js +156 -0
  129. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -0
  130. package/dist/granular/ui/components/Popover/Popover.js +171 -0
  131. package/dist/granular/ui/components/Popover/Popover.js.map +1 -0
  132. package/dist/granular/ui/components/Rating/Rating.js +110 -0
  133. package/dist/granular/ui/components/Rating/Rating.js.map +1 -0
  134. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js +120 -0
  135. package/dist/granular/ui/components/SearchAndFilterPattern/SearchAndFilterPattern.js.map +1 -0
  136. package/dist/granular/ui/components/SearchInput/SearchInput.js +103 -0
  137. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -0
  138. package/dist/granular/ui/components/SideNavbar/SideNavbar.js +143 -0
  139. package/dist/granular/ui/components/SideNavbar/SideNavbar.js.map +1 -0
  140. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js +173 -0
  141. package/dist/granular/ui/components/SideNavbar/components/Navbar/Navbar.js.map +1 -0
  142. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +87 -0
  143. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -0
  144. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +242 -0
  145. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -0
  146. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js +66 -0
  147. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarSeparator.js.map +1 -0
  148. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js +108 -0
  149. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarToggle.js.map +1 -0
  150. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js +63 -0
  151. package/dist/granular/ui/components/SideNavbar/components/SideNavbarBackdrop.js.map +1 -0
  152. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +113 -0
  153. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -0
  154. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js +150 -0
  155. package/dist/granular/ui/components/SideNavbar/components/SideNavbarRoot.js.map +1 -0
  156. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js +197 -0
  157. package/dist/granular/ui/components/SideNavbar/components/SideNavbarToggle.js.map +1 -0
  158. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js +108 -0
  159. package/dist/granular/ui/components/SideNavbar/components/Sidebar/Sidebar.js.map +1 -0
  160. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js +71 -0
  161. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarContent.js.map +1 -0
  162. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js +64 -0
  163. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarFooter.js.map +1 -0
  164. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js +141 -0
  165. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarGroup.js.map +1 -0
  166. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js +90 -0
  167. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarHeader.js.map +1 -0
  168. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js +12 -0
  169. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlot.js.map +1 -0
  170. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js +13 -0
  171. package/dist/granular/ui/components/SideNavbar/components/Sidebar/SidebarSlotContent.js.map +1 -0
  172. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js +20 -0
  173. package/dist/granular/ui/components/SideNavbar/contexts/NavbarContext.js.map +1 -0
  174. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js +37 -0
  175. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarConfigContext.js.map +1 -0
  176. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js +20 -0
  177. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarStateContext.js.map +1 -0
  178. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js +28 -0
  179. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarThemeContext.js.map +1 -0
  180. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js +19 -0
  181. package/dist/granular/ui/components/SideNavbar/contexts/SideNavbarToggleContext.js.map +1 -0
  182. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js +20 -0
  183. package/dist/granular/ui/components/SideNavbar/contexts/SidebarContext.js.map +1 -0
  184. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js +22 -0
  185. package/dist/granular/ui/components/SideNavbar/contexts/SidebarSlotContext.js.map +1 -0
  186. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js +43 -0
  187. package/dist/granular/ui/components/SideNavbar/hooks/useFocusManagement.js.map +1 -0
  188. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js +59 -0
  189. package/dist/granular/ui/components/SideNavbar/hooks/useGroupState.js.map +1 -0
  190. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js +34 -0
  191. package/dist/granular/ui/components/SideNavbar/hooks/useKeyboardShortcut.js.map +1 -0
  192. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js +58 -0
  193. package/dist/granular/ui/components/SideNavbar/hooks/useResize.js.map +1 -0
  194. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js +35 -0
  195. package/dist/granular/ui/components/SideNavbar/hooks/useResponsiveSidebar.js.map +1 -0
  196. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js +21 -0
  197. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbar.js.map +1 -0
  198. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js +19 -0
  199. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarContent.js.map +1 -0
  200. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js +21 -0
  201. package/dist/granular/ui/components/SideNavbar/hooks/useSideNavbarNavigation.js.map +1 -0
  202. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js +61 -0
  203. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarConfigProvider.js.map +1 -0
  204. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js +82 -0
  205. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarProvider.js.map +1 -0
  206. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +165 -0
  207. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -0
  208. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js +34 -0
  209. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarThemeProvider.js.map +1 -0
  210. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js +28 -0
  211. package/dist/granular/ui/components/SideNavbar/providers/SidebarSlotProvider.js.map +1 -0
  212. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js +60 -0
  213. package/dist/granular/ui/components/SideNavbar/utils/parseKeyboardShortcut.js.map +1 -0
  214. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js +19 -0
  215. package/dist/granular/ui/components/SideNavbar/utils/parseWidth.js.map +1 -0
  216. package/dist/granular/ui/components/Stat/Stat.js +84 -0
  217. package/dist/granular/ui/components/Stat/Stat.js.map +1 -0
  218. package/dist/granular/ui/components/Stat/StatGroup.js +61 -0
  219. package/dist/granular/ui/components/Stat/StatGroup.js.map +1 -0
  220. package/dist/granular/ui/components/Stepper/Stepper.js +248 -0
  221. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -0
  222. package/dist/granular/ui/components/Table/Table.js +162 -0
  223. package/dist/granular/ui/components/Table/Table.js.map +1 -0
  224. package/dist/granular/ui/components/Table/TableActions/TableActions.js +67 -0
  225. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -0
  226. package/dist/granular/ui/components/Table/TableActions.js +44 -0
  227. package/dist/granular/ui/components/Table/TableActions.js.map +1 -0
  228. package/dist/granular/ui/components/Table/TableBody.js +134 -0
  229. package/dist/granular/ui/components/Table/TableBody.js.map +1 -0
  230. package/dist/granular/ui/components/Table/TableCell.js +40 -0
  231. package/dist/granular/ui/components/Table/TableCell.js.map +1 -0
  232. package/dist/granular/ui/components/Table/TableContext.js +19 -0
  233. package/dist/granular/ui/components/Table/TableContext.js.map +1 -0
  234. package/dist/granular/ui/components/Table/TableEmptyState.js +62 -0
  235. package/dist/granular/ui/components/Table/TableEmptyState.js.map +1 -0
  236. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +189 -0
  237. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -0
  238. package/dist/granular/ui/components/Table/TableFilters.js +48 -0
  239. package/dist/granular/ui/components/Table/TableFilters.js.map +1 -0
  240. package/dist/granular/ui/components/Table/TableHeader.js +45 -0
  241. package/dist/granular/ui/components/Table/TableHeader.js.map +1 -0
  242. package/dist/granular/ui/components/Table/TableHeaderCell.js +117 -0
  243. package/dist/granular/ui/components/Table/TableHeaderCell.js.map +1 -0
  244. package/dist/granular/ui/components/Table/TableHeaderRow.js +89 -0
  245. package/dist/granular/ui/components/Table/TableHeaderRow.js.map +1 -0
  246. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js +216 -0
  247. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -0
  248. package/dist/granular/ui/components/Table/TablePagination.js +56 -0
  249. package/dist/granular/ui/components/Table/TablePagination.js.map +1 -0
  250. package/dist/granular/ui/components/Table/TableProvider.js +244 -0
  251. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -0
  252. package/dist/granular/ui/components/Table/TableRow.js +95 -0
  253. package/dist/granular/ui/components/Table/TableRow.js.map +1 -0
  254. package/dist/granular/ui/components/Table/useColumnResizing.js +71 -0
  255. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -0
  256. package/dist/granular/ui/components/Table/useVirtualScrolling.js +50 -0
  257. package/dist/granular/ui/components/Table/useVirtualScrolling.js.map +1 -0
  258. package/dist/granular/ui/components/Tabs/Tabs.js +39 -0
  259. package/dist/granular/ui/components/Tabs/Tabs.js.map +1 -0
  260. package/dist/granular/ui/components/Tabs/TabsContent.js +59 -0
  261. package/dist/granular/ui/components/Tabs/TabsContent.js.map +1 -0
  262. package/dist/granular/ui/components/Tabs/TabsContext.js +18 -0
  263. package/dist/granular/ui/components/Tabs/TabsContext.js.map +1 -0
  264. package/dist/granular/ui/components/Tabs/TabsList.js +84 -0
  265. package/dist/granular/ui/components/Tabs/TabsList.js.map +1 -0
  266. package/dist/granular/ui/components/Tabs/TabsProvider.js +31 -0
  267. package/dist/granular/ui/components/Tabs/TabsProvider.js.map +1 -0
  268. package/dist/granular/ui/components/Tabs/TabsTrigger.js +103 -0
  269. package/dist/granular/ui/components/Tabs/TabsTrigger.js.map +1 -0
  270. package/dist/granular/ui/components/TimePicker/TimePicker.js +216 -0
  271. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -0
  272. package/dist/granular/ui/components/Timeline/Timeline.js +152 -0
  273. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -0
  274. package/dist/granular/ui/components/Toast/Toast.js +159 -0
  275. package/dist/granular/ui/components/Toast/Toast.js.map +1 -0
  276. package/dist/granular/ui/components/Toast/ToastContainer.js +41 -0
  277. package/dist/granular/ui/components/Toast/ToastContainer.js.map +1 -0
  278. package/dist/granular/ui/components/Toast/useToast.js +64 -0
  279. package/dist/granular/ui/components/Toast/useToast.js.map +1 -0
  280. package/dist/granular/ui/hooks/createGenericContext.js +27 -0
  281. package/dist/granular/ui/hooks/createGenericContext.js.map +1 -0
  282. package/dist/granular/ui/hooks/focusable.js +14 -0
  283. package/dist/granular/ui/hooks/focusable.js.map +1 -0
  284. package/dist/granular/ui/hooks/useAutoFocus.js +23 -0
  285. package/dist/granular/ui/hooks/useAutoFocus.js.map +1 -0
  286. package/dist/granular/ui/hooks/useCollapsible.js +37 -0
  287. package/dist/granular/ui/hooks/useCollapsible.js.map +1 -0
  288. package/dist/granular/ui/hooks/useFocusRestore.js +20 -0
  289. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -0
  290. package/dist/granular/ui/hooks/useFocusTrap.js +31 -0
  291. package/dist/granular/ui/hooks/useFocusTrap.js.map +1 -0
  292. package/dist/granular/ui/hooks/useScrollSpy.js +23 -0
  293. package/dist/granular/ui/hooks/useScrollSpy.js.map +1 -0
  294. package/dist/granular/ui/layouts/Container/Container.js +73 -0
  295. package/dist/granular/ui/layouts/Container/Container.js.map +1 -0
  296. package/dist/granular/ui/layouts/Stack/Stack.js +79 -0
  297. package/dist/granular/ui/layouts/Stack/Stack.js.map +1 -0
  298. package/dist/granular/ui/primitives/Avatar/Avatar.js +122 -0
  299. package/dist/granular/ui/primitives/Avatar/Avatar.js.map +1 -0
  300. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js +97 -0
  301. package/dist/granular/ui/primitives/Avatar/AvatarGroup.js.map +1 -0
  302. package/dist/granular/ui/primitives/Badge/Badge.js +212 -0
  303. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -0
  304. package/dist/granular/ui/primitives/Button/Button.js +288 -0
  305. package/dist/granular/ui/primitives/Button/Button.js.map +1 -0
  306. package/dist/granular/ui/primitives/Checkbox/Checkbox.js +129 -0
  307. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -0
  308. package/dist/granular/ui/primitives/Chip/Chip.js +206 -0
  309. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -0
  310. package/dist/granular/ui/primitives/Collapsible/Collapsible.js +115 -0
  311. package/dist/granular/ui/primitives/Collapsible/Collapsible.js.map +1 -0
  312. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js +54 -0
  313. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -0
  314. package/dist/granular/ui/primitives/Info/Info.js +57 -0
  315. package/dist/granular/ui/primitives/Info/Info.js.map +1 -0
  316. package/dist/granular/ui/primitives/Input/Input.js +351 -0
  317. package/dist/granular/ui/primitives/Input/Input.js.map +1 -0
  318. package/dist/granular/ui/primitives/Label/Label.js +61 -0
  319. package/dist/granular/ui/primitives/Label/Label.js.map +1 -0
  320. package/dist/granular/ui/primitives/NavLink/NavLink.js +229 -0
  321. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -0
  322. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js +15 -0
  323. package/dist/granular/ui/primitives/NavLink/hooks/useNavLink.js.map +1 -0
  324. package/dist/granular/ui/primitives/Progress/Progress.js +182 -0
  325. package/dist/granular/ui/primitives/Progress/Progress.js.map +1 -0
  326. package/dist/granular/ui/primitives/Radio/Radio.js +118 -0
  327. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -0
  328. package/dist/granular/ui/primitives/Select/Select.js +210 -0
  329. package/dist/granular/ui/primitives/Select/Select.js.map +1 -0
  330. package/dist/granular/ui/primitives/Separator/Separator.js +69 -0
  331. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -0
  332. package/dist/granular/ui/primitives/Skeleton/Skeleton.js +87 -0
  333. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -0
  334. package/dist/granular/ui/primitives/Slider/Slider.js +291 -0
  335. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -0
  336. package/dist/granular/ui/primitives/Spinner/Spinner.js +95 -0
  337. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -0
  338. package/dist/granular/ui/primitives/Switch/Switch.js +212 -0
  339. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -0
  340. package/dist/granular/ui/primitives/Text/Text.js +118 -0
  341. package/dist/granular/ui/primitives/Text/Text.js.map +1 -0
  342. package/dist/granular/ui/primitives/Textarea/Textarea.js +129 -0
  343. package/dist/granular/ui/primitives/Textarea/Textarea.js.map +1 -0
  344. package/dist/granular/ui/primitives/Tooltip/Tooltip.js +227 -0
  345. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -0
  346. package/dist/granular/ui/providers/AppProvider.js +50 -0
  347. package/dist/granular/ui/providers/AppProvider.js.map +1 -0
  348. package/dist/granular/ui/providers/ConfigProvider.js +95 -0
  349. package/dist/granular/ui/providers/ConfigProvider.js.map +1 -0
  350. package/dist/granular/ui/providers/DialogContext.js +20 -0
  351. package/dist/granular/ui/providers/DialogContext.js.map +1 -0
  352. package/dist/granular/ui/providers/DialogProvider.js +32 -0
  353. package/dist/granular/ui/providers/DialogProvider.js.map +1 -0
  354. package/dist/granular/ui/providers/ThemeProvider.js +56 -0
  355. package/dist/granular/ui/providers/ThemeProvider.js.map +1 -0
  356. package/dist/granular/ui/providers/ToastContext.js +20 -0
  357. package/dist/granular/ui/providers/ToastContext.js.map +1 -0
  358. package/dist/granular/ui/providers/ToastProvider.js +47 -0
  359. package/dist/granular/ui/providers/ToastProvider.js.map +1 -0
  360. package/dist/granular/ui/providers/providers-bundle.js +23 -0
  361. package/dist/granular/ui/providers/providers-bundle.js.map +1 -0
  362. package/dist/granular/ui/tokens/animations.js +106 -0
  363. package/dist/granular/ui/tokens/animations.js.map +1 -0
  364. package/dist/granular/ui/tokens/borders.js +54 -0
  365. package/dist/granular/ui/tokens/borders.js.map +1 -0
  366. package/dist/granular/ui/tokens/breakpoints.js +43 -0
  367. package/dist/granular/ui/tokens/breakpoints.js.map +1 -0
  368. package/dist/granular/ui/tokens/colors/brand.js +67 -0
  369. package/dist/granular/ui/tokens/colors/brand.js.map +1 -0
  370. package/dist/granular/ui/tokens/colors/index.js +25 -0
  371. package/dist/granular/ui/tokens/colors/index.js.map +1 -0
  372. package/dist/granular/ui/tokens/colors/primitives.js +320 -0
  373. package/dist/granular/ui/tokens/colors/primitives.js.map +1 -0
  374. package/dist/granular/ui/tokens/colors/semantic.js +212 -0
  375. package/dist/granular/ui/tokens/colors/semantic.js.map +1 -0
  376. package/dist/granular/ui/tokens/colors/types.js +18 -0
  377. package/dist/granular/ui/tokens/colors/types.js.map +1 -0
  378. package/dist/granular/ui/tokens/colors/utils.js +131 -0
  379. package/dist/granular/ui/tokens/colors/utils.js.map +1 -0
  380. package/dist/granular/ui/tokens/opacity.js +59 -0
  381. package/dist/granular/ui/tokens/opacity.js.map +1 -0
  382. package/dist/granular/ui/tokens/radius.js +76 -0
  383. package/dist/granular/ui/tokens/radius.js.map +1 -0
  384. package/dist/granular/ui/tokens/shadows.js +63 -0
  385. package/dist/granular/ui/tokens/shadows.js.map +1 -0
  386. package/dist/granular/ui/tokens/sidebar.js +92 -0
  387. package/dist/granular/ui/tokens/sidebar.js.map +1 -0
  388. package/dist/granular/ui/tokens/spacing.js +143 -0
  389. package/dist/granular/ui/tokens/spacing.js.map +1 -0
  390. package/dist/granular/ui/tokens/switch.js +51 -0
  391. package/dist/granular/ui/tokens/switch.js.map +1 -0
  392. package/dist/granular/ui/tokens/typography.js +146 -0
  393. package/dist/granular/ui/tokens/typography.js.map +1 -0
  394. package/dist/granular/ui/tokens/z-index.js +79 -0
  395. package/dist/granular/ui/tokens/z-index.js.map +1 -0
  396. package/dist/granular/ui/utils/cn.js +10 -0
  397. package/dist/granular/ui/utils/cn.js.map +1 -0
  398. package/dist/granular/ui/utils/cva.js +14 -0
  399. package/dist/granular/ui/utils/cva.js.map +1 -0
  400. package/dist/granular/ui/utils/mergeRefs.js +11 -0
  401. package/dist/granular/ui/utils/mergeRefs.js.map +1 -0
  402. package/dist/granular/vite.svg +1 -0
  403. package/dist/hooks/index.cjs +2 -0
  404. package/dist/hooks/index.cjs.map +1 -0
  405. package/dist/hooks/index.js +23 -0
  406. package/dist/hooks/index.js.map +1 -0
  407. package/dist/index.cjs +44 -70
  408. package/dist/index.cjs.map +1 -1
  409. package/dist/index.js +1900 -1885
  410. package/dist/index.js.map +1 -1
  411. package/dist/react-design-system.css +1 -1
  412. package/dist/server/index.cjs +23 -23
  413. package/dist/server/index.cjs.map +1 -1
  414. package/dist/server/index.js +863 -1180
  415. package/dist/server/index.js.map +1 -1
  416. package/dist/ui/components/Accordion/Accordion.d.ts +9 -1
  417. package/dist/ui/hooks-entry.d.ts +2 -0
  418. package/dist/ui/utils/tailwind-safelist.d.ts +3 -1
  419. package/package.json +24 -13
@@ -0,0 +1,229 @@
1
+ "use client";
2
+ var M = Object.defineProperty, T = Object.defineProperties;
3
+ var q = Object.getOwnPropertyDescriptors;
4
+ var f = Object.getOwnPropertySymbols;
5
+ var C = Object.prototype.hasOwnProperty, R = Object.prototype.propertyIsEnumerable;
6
+ var V = (e, r, a) => r in e ? M(e, r, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[r] = a, c = (e, r) => {
7
+ for (var a in r || (r = {}))
8
+ C.call(r, a) && V(e, a, r[a]);
9
+ if (f)
10
+ for (var a of f(r))
11
+ R.call(r, a) && V(e, a, r[a]);
12
+ return e;
13
+ }, m = (e, r) => T(e, q(r));
14
+ var j = (e, r) => {
15
+ var a = {};
16
+ for (var t in e)
17
+ C.call(e, t) && r.indexOf(t) < 0 && (a[t] = e[t]);
18
+ if (e != null && f)
19
+ for (var t of f(e))
20
+ r.indexOf(t) < 0 && R.call(e, t) && (a[t] = e[t]);
21
+ return a;
22
+ };
23
+ import { jsx as B } from "react/jsx-runtime";
24
+ import { forwardRef as F, useMemo as v, useCallback as w } from "react";
25
+ import { useNavLink as G } from "./hooks/useNavLink.js";
26
+ import { getSpacingClass as i } from "../../tokens/spacing.js";
27
+ import { getTypographySize as x } from "../../tokens/typography.js";
28
+ import { getRadiusClass as H } from "../../tokens/radius.js";
29
+ import { cn as o } from "../../utils/cn.js";
30
+ import { cva as J } from "../../utils/cva.js";
31
+ const O = J(
32
+ // Base classes
33
+ o(
34
+ "inline-flex",
35
+ "items-center",
36
+ "transition-colors",
37
+ "focus:outline-none",
38
+ "focus:ring-2",
39
+ "focus:ring-offset-2",
40
+ "disabled:opacity-50",
41
+ "disabled:cursor-not-allowed",
42
+ "disabled:pointer-events-none",
43
+ "no-underline"
44
+ ),
45
+ {
46
+ variants: {
47
+ variant: {
48
+ default: o(
49
+ "text-fg-primary",
50
+ "hover:opacity-80",
51
+ "focus-visible:opacity-100",
52
+ "focus:ring-line-brand"
53
+ ),
54
+ underline: o(
55
+ "text-fg-primary",
56
+ "hover:opacity-80",
57
+ "focus-visible:opacity-100",
58
+ "border-b-2",
59
+ "border-transparent",
60
+ "hover:border-current",
61
+ "focus:ring-line-brand"
62
+ ),
63
+ background: o(
64
+ "text-fg-primary",
65
+ "hover:bg-surface-hover",
66
+ H("md"),
67
+ "focus:ring-line-brand"
68
+ )
69
+ },
70
+ size: {
71
+ sm: o(
72
+ i("sm", "px"),
73
+ i("xs", "py"),
74
+ x("bodySmall")
75
+ ),
76
+ md: o(
77
+ i("base", "px"),
78
+ i("sm", "py"),
79
+ x("body")
80
+ ),
81
+ lg: o(
82
+ i("lg", "px"),
83
+ i("md", "py"),
84
+ x("bodyLarge")
85
+ )
86
+ }
87
+ },
88
+ defaultVariants: {
89
+ variant: "default",
90
+ size: "md"
91
+ },
92
+ compoundVariants: [
93
+ {
94
+ variant: "underline",
95
+ size: "sm",
96
+ class: i("0.5", "pb")
97
+ },
98
+ {
99
+ variant: "underline",
100
+ size: "md",
101
+ class: i("xs", "pb")
102
+ },
103
+ {
104
+ variant: "underline",
105
+ size: "lg",
106
+ class: i("1.5", "pb")
107
+ },
108
+ {
109
+ variant: "background",
110
+ size: "sm",
111
+ class: i("xs", "px")
112
+ },
113
+ {
114
+ variant: "background",
115
+ size: "md",
116
+ class: i("sm", "px")
117
+ },
118
+ {
119
+ variant: "background",
120
+ size: "lg",
121
+ class: i("base", "px")
122
+ }
123
+ ]
124
+ }
125
+ ), Q = F(
126
+ function(U, A) {
127
+ var L = U, {
128
+ href: r,
129
+ children: a,
130
+ active: t,
131
+ disabled: s = !1,
132
+ variant: d = "default",
133
+ size: y = "md",
134
+ as: b,
135
+ className: k,
136
+ "aria-label": h,
137
+ onClick: l,
138
+ onKeyDown: p
139
+ } = L, z = j(L, [
140
+ "href",
141
+ "children",
142
+ "active",
143
+ "disabled",
144
+ "variant",
145
+ "size",
146
+ "as",
147
+ "className",
148
+ "aria-label",
149
+ "onClick",
150
+ "onKeyDown"
151
+ ]);
152
+ const u = v(() => t !== void 0 ? t : !1, [t]), { NextLink: g } = G({ href: r, active: u }), E = b || g || "a", N = v(() => {
153
+ if (!u) return "";
154
+ switch (d) {
155
+ case "underline":
156
+ return o(
157
+ "border-b-2",
158
+ "border-line-brand",
159
+ "text-fg-brand-emphasis"
160
+ );
161
+ case "background":
162
+ return o("bg-surface-brand-muted", "text-fg-brand-emphasis");
163
+ default:
164
+ return o("text-fg-brand-emphasis", "font-semibold");
165
+ }
166
+ }, [u, d]), P = w(
167
+ (n) => {
168
+ if (s) {
169
+ n.preventDefault(), n.stopPropagation();
170
+ return;
171
+ }
172
+ l == null || l(n);
173
+ },
174
+ [s, l]
175
+ ), S = w(
176
+ (n) => {
177
+ if (s) {
178
+ (n.key === "Enter" || n.key === " ") && (n.preventDefault(), n.stopPropagation());
179
+ return;
180
+ }
181
+ p == null || p(n);
182
+ },
183
+ [s, p]
184
+ ), I = v(() => {
185
+ const n = c({
186
+ className: o(
187
+ O({ variant: d, size: y }),
188
+ N,
189
+ s && "opacity-50 cursor-not-allowed pointer-events-none",
190
+ k
191
+ ),
192
+ "aria-current": u ? "page" : void 0,
193
+ "aria-disabled": s ? !0 : void 0,
194
+ "aria-label": h,
195
+ tabIndex: s ? -1 : void 0,
196
+ onClick: P,
197
+ onKeyDown: S,
198
+ "data-active": u,
199
+ "data-disabled": s
200
+ }, z);
201
+ return g && !b ? m(c({}, n), {
202
+ href: s ? void 0 : r
203
+ }) : m(c({}, n), {
204
+ href: s ? void 0 : r
205
+ });
206
+ }, [
207
+ d,
208
+ y,
209
+ N,
210
+ s,
211
+ k,
212
+ u,
213
+ h,
214
+ P,
215
+ S,
216
+ r,
217
+ g,
218
+ b,
219
+ z
220
+ ]);
221
+ return /* @__PURE__ */ B(E, m(c({ ref: A }, I), { children: a }));
222
+ }
223
+ );
224
+ Q.displayName = "NavLink";
225
+ export {
226
+ Q as NavLink,
227
+ Q as default
228
+ };
229
+ //# sourceMappingURL=NavLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavLink.js","sources":["../../../../../src/ui/primitives/NavLink/NavLink.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * NavLink Component\n *\n * Navigation link component with active state detection and Next.js integration.\n *\n * @see EPIC-001: NavLink Component (Atom)\n * @see RFC-001: NavLink Hook Strategy (APPROVED)\n * @see RFC-002: Next.js Integration Strategy (APPROVED)\n * @see ADR-001: Active State Detection (ACCEPTED)\n */\n\nimport React, { forwardRef, useMemo, useCallback } from \"react\";\nimport type { NavLinkProps } from \"./types\";\nimport { useNavLink } from \"./hooks/useNavLink\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\n/**\n * NavLink Variants using CVA\n * Type-safe variant system for NavLink component\n */\nconst navLinkVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"disabled:pointer-events-none\",\n \"no-underline\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"focus:ring-line-brand\",\n ),\n underline: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"border-b-2\",\n \"border-transparent\",\n \"hover:border-current\",\n \"focus:ring-line-brand\",\n ),\n background: cn(\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n getRadiusClass(\"md\"),\n \"focus:ring-line-brand\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n md: cn(\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n lg: cn(\n getSpacingClass(\"lg\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n getTypographySize(\"bodyLarge\"),\n ),\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n compoundVariants: [\n {\n variant: \"underline\",\n size: \"sm\",\n class: getSpacingClass(\"0.5\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"md\",\n class: getSpacingClass(\"xs\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"lg\",\n class: getSpacingClass(\"1.5\", \"pb\"),\n },\n {\n variant: \"background\",\n size: \"sm\",\n class: getSpacingClass(\"xs\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"md\",\n class: getSpacingClass(\"sm\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"lg\",\n class: getSpacingClass(\"base\", \"px\"),\n },\n ],\n },\n);\n\n/**\n * NavLink Component\n *\n * Navigation link with active state detection and Next.js integration.\n *\n * @example\n * ```tsx\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\" variant=\"underline\" active>About</NavLink>\n * <NavLink href=\"/contact\" variant=\"background\" size=\"lg\">Contact</NavLink>\n * ```\n *\n * Note: Auto-detection of active state via usePathname is deferred to a future enhancement\n * to avoid issues with conditional hook calls. For now, use the `active` prop manually\n * or implement pathname detection in the parent component.\n */\nexport const NavLink = forwardRef<HTMLAnchorElement, NavLinkProps>(\n function NavLink(\n {\n href,\n children,\n active,\n disabled = false,\n variant = \"default\",\n size = \"md\",\n as,\n className,\n \"aria-label\": ariaLabel,\n onClick,\n onKeyDown,\n ...props\n },\n ref,\n ) {\n // Calculate active state\n // Priority: manual active > false (ADR-001)\n // TODO: Add auto-detect via usePathname in future enhancement\n // This requires a wrapper component pattern to avoid conditional hook calls\n const calculatedActive = useMemo(() => {\n // Manual active prop has priority (ADR-001)\n if (active !== undefined) {\n return active;\n }\n\n // Default to false\n // TODO: Auto-detect using usePathname (if Next.js available)\n return false;\n }, [active]);\n\n // Use hook for Next.js Link integration\n const { NextLink } = useNavLink({ href, active: calculatedActive });\n\n // Determine Link component\n // Priority: as prop > NextLink (auto-detected) > 'a' (RFC-002)\n const LinkComponent: React.ElementType = as || NextLink || \"a\";\n\n // Active state classes\n const activeClasses = useMemo(() => {\n if (!calculatedActive) return \"\";\n\n switch (variant) {\n case \"underline\":\n return cn(\n \"border-b-2\",\n \"border-line-brand\",\n \"text-fg-brand-emphasis\",\n );\n case \"background\":\n return cn(\"bg-surface-brand-muted\", \"text-fg-brand-emphasis\");\n case \"default\":\n default:\n return cn(\"text-fg-brand-emphasis\", \"font-semibold\");\n }\n }, [calculatedActive, variant]);\n\n // Handle disabled state\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n onClick?.(e);\n },\n [disabled, onClick],\n );\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (disabled) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n }\n return;\n }\n onKeyDown?.(e);\n },\n [disabled, onKeyDown],\n );\n\n // Prepare props for LinkComponent\n // Next.js Link has different prop structure, so we need to handle it\n const linkProps = useMemo(() => {\n const baseProps = {\n className: cn(\n navLinkVariants({ variant, size }),\n activeClasses,\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className,\n ),\n \"aria-current\": calculatedActive ? \"page\" : undefined,\n \"aria-disabled\": disabled ? true : undefined,\n \"aria-label\": ariaLabel,\n tabIndex: disabled ? -1 : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n \"data-active\": calculatedActive,\n \"data-disabled\": disabled,\n ...props,\n };\n\n // For Next.js Link, we need to pass href differently\n if (NextLink && !as) {\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }\n\n // For regular anchor or custom component\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }, [\n variant,\n size,\n activeClasses,\n disabled,\n className,\n calculatedActive,\n ariaLabel,\n handleClick,\n handleKeyDown,\n href,\n NextLink,\n as,\n props,\n ]);\n\n return (\n <LinkComponent ref={ref} {...linkProps}>\n {children}\n </LinkComponent>\n );\n },\n);\n\nNavLink.displayName = \"NavLink\";\n\nexport default NavLink;\n"],"names":["navLinkVariants","cva","cn","getRadiusClass","getSpacingClass","getTypographySize","NavLink","forwardRef","_a","ref","_b","href","children","active","disabled","variant","size","as","className","ariaLabel","onClick","onKeyDown","props","__objRest","calculatedActive","useMemo","NextLink","useNavLink","LinkComponent","activeClasses","handleClick","useCallback","e","handleKeyDown","linkProps","baseProps","__spreadValues","__spreadProps","jsx"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { useMemo as i } from "react";
3
+ function s({
4
+ href: n,
5
+ active: e
6
+ }) {
7
+ return {
8
+ isActive: i(() => e !== void 0 ? e : !1, [e]),
9
+ NextLink: void 0
10
+ };
11
+ }
12
+ export {
13
+ s as useNavLink
14
+ };
15
+ //# sourceMappingURL=useNavLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavLink.js","sources":["../../../../../../src/ui/primitives/NavLink/hooks/useNavLink.ts"],"sourcesContent":["/**\n * useNavLink Hook\n *\n * Custom hook for NavLink active state detection and Next.js integration.\n *\n * @see RFC-001: NavLink Hook Strategy (APPROVED - Hybrid approach)\n * @see RFC-002: Next.js Integration Strategy (APPROVED - Auto-detect)\n * @see ADR-001: Active State Detection (ACCEPTED - Hybrid strategy)\n */\n\n\"use client\";\n\nimport { useMemo } from \"react\";\n\n/**\n * useNavLink Hook Options\n */\nexport interface UseNavLinkOptions {\n /**\n * URL of the navigation link\n */\n href: string;\n\n /**\n * Manual active state (has priority over auto-detect)\n *\n * Priority: manual active > auto-detect > false\n * @see ADR-001\n */\n active?: boolean;\n}\n\n/**\n * useNavLink Hook Result\n */\nexport interface UseNavLinkResult {\n /**\n * Whether the link is active\n */\n isActive: boolean;\n\n /**\n * Next.js Link component (if available)\n */\n NextLink?: React.ComponentType<{\n href: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n }>;\n}\n\n/**\n * useNavLink Hook\n *\n * Detects active state and provides Next.js Link integration.\n *\n * @param options - Hook options\n * @returns Hook result with active state and Next.js Link\n *\n * @example\n * ```tsx\n * const { isActive, NextLink } = useNavLink({ href: '/home' });\n *\n * const LinkComponent = NextLink || 'a';\n *\n * return (\n * <LinkComponent href={href} className={isActive ? 'active' : ''}>\n * {children}\n * </LinkComponent>\n * );\n * ```\n */\nexport function useNavLink({\n href: _href,\n active,\n}: UseNavLinkOptions): UseNavLinkResult {\n // Active state detection (ADR-001 ACCEPTED)\n // Priority: manual active > auto-detect (usePathname) > false\n const isActive = useMemo(() => {\n // Manual active prop has priority\n if (active !== undefined) {\n return active;\n }\n\n // TODO: Auto-detect using usePathname (if Next.js available)\n // This needs to be handled in the component since we can't conditionally call hooks\n // The component will call usePathname if available and pass pathname to this hook\n // For now, default to false\n return false;\n }, [active]);\n\n // Consumers who want Next.js routing pass `as={NextLink}` explicitly on\n // NavLink. We no longer auto-detect: a CommonJS `require(\"next/link\")`\n // probe doesn't survive ESM bundlers and the auto-detect branch was\n // already brittle in practice.\n const NextLink = undefined;\n\n return {\n isActive,\n NextLink,\n };\n}\n"],"names":["useNavLink","_href","active","useMemo"],"mappings":";;AAwEO,SAASA,EAAW;AAAA,EACzB,MAAMC;AAAA,EACN,QAAAC;AACF,GAAwC;AAsBtC,SAAO;AAAA,IACL,UApBeC,EAAQ,MAEnBD,MAAW,SACNA,IAOF,IACN,CAACA,CAAM,CAAC;AAAA,IAUT,UAJe;AAAA,EAIf;AAEJ;"}
@@ -0,0 +1,182 @@
1
+ "use client";
2
+ var C = Object.defineProperty, F = Object.defineProperties;
3
+ var L = Object.getOwnPropertyDescriptors;
4
+ var n = Object.getOwnPropertySymbols;
5
+ var u = Object.prototype.hasOwnProperty, p = Object.prototype.propertyIsEnumerable;
6
+ var f = (r, a, s) => a in r ? C(r, a, { enumerable: !0, configurable: !0, writable: !0, value: s }) : r[a] = s, b = (r, a) => {
7
+ for (var s in a || (a = {}))
8
+ u.call(a, s) && f(r, s, a[s]);
9
+ if (n)
10
+ for (var s of n(a))
11
+ p.call(a, s) && f(r, s, a[s]);
12
+ return r;
13
+ }, h = (r, a) => F(r, L(a));
14
+ var y = (r, a) => {
15
+ var s = {};
16
+ for (var e in r)
17
+ u.call(r, e) && a.indexOf(e) < 0 && (s[e] = r[e]);
18
+ if (r != null && n)
19
+ for (var e of n(r))
20
+ a.indexOf(e) < 0 && p.call(r, e) && (s[e] = r[e]);
21
+ return s;
22
+ };
23
+ import { jsxs as d, jsx as l } from "react/jsx-runtime";
24
+ import { forwardRef as M } from "react";
25
+ import { getSpacingClass as R } from "../../tokens/spacing.js";
26
+ import { getTypographyWeight as $, getTypographySize as v } from "../../tokens/typography.js";
27
+ /* empty css */
28
+ import { cn as o } from "../../utils/cn.js";
29
+ import { getRadiusClass as c } from "../../tokens/radius.js";
30
+ import { cva as x } from "../../utils/cva.js";
31
+ const k = x("w-full", {
32
+ variants: {
33
+ size: {
34
+ sm: "h-1",
35
+ md: "h-2",
36
+ lg: "h-3"
37
+ },
38
+ variant: {
39
+ primary: "bg-surface-muted",
40
+ secondary: "bg-surface-muted",
41
+ success: "bg-success-bg-emphasis",
42
+ error: "bg-error-bg-emphasis",
43
+ warning: "bg-warning-bg-emphasis",
44
+ info: "bg-info-bg-emphasis"
45
+ }
46
+ },
47
+ defaultVariants: {
48
+ size: "md",
49
+ variant: "primary"
50
+ }
51
+ }), w = x("transition-all", {
52
+ variants: {
53
+ variant: {
54
+ primary: "bg-surface-brand",
55
+ secondary: "bg-surface-secondary",
56
+ success: "bg-success",
57
+ error: "bg-error",
58
+ warning: "bg-warning",
59
+ info: "bg-info"
60
+ }
61
+ },
62
+ defaultVariants: {
63
+ variant: "primary"
64
+ }
65
+ }), A = M(function(B, z) {
66
+ var g = B, {
67
+ value: a,
68
+ max: s = 100,
69
+ variant: e = "primary",
70
+ size: N = "md",
71
+ showLabel: P = !1,
72
+ label: m,
73
+ "aria-label": S,
74
+ className: V = ""
75
+ } = g, j = y(g, [
76
+ "value",
77
+ "max",
78
+ "variant",
79
+ "size",
80
+ "showLabel",
81
+ "label",
82
+ "aria-label",
83
+ "className"
84
+ ]);
85
+ const i = a === void 0, t = i ? void 0 : Math.min(Math.max(a / s * 100, 0), 100), T = S || (i ? "Loading in progress" : `Progress: ${t == null ? void 0 : t.toFixed(0)}%`);
86
+ return /* @__PURE__ */ d("div", h(b({ ref: z, className: o("w-full", V) }, j), { children: [
87
+ P && (m || !i) && /* @__PURE__ */ d(
88
+ "div",
89
+ {
90
+ className: o(
91
+ "flex",
92
+ "items-center",
93
+ "justify-between",
94
+ R("xs", "mb")
95
+ ),
96
+ children: [
97
+ m && /* @__PURE__ */ l(
98
+ "span",
99
+ {
100
+ className: o(
101
+ v("bodySmall"),
102
+ $("label"),
103
+ "text-fg-primary"
104
+ ),
105
+ children: m
106
+ }
107
+ ),
108
+ !i && t !== void 0 && /* @__PURE__ */ d(
109
+ "span",
110
+ {
111
+ className: o(
112
+ v("bodySmall"),
113
+ "text-fg-secondary"
114
+ ),
115
+ children: [
116
+ t.toFixed(0),
117
+ "%"
118
+ ]
119
+ }
120
+ )
121
+ ]
122
+ }
123
+ ),
124
+ /* @__PURE__ */ l(
125
+ "div",
126
+ {
127
+ role: "progressbar",
128
+ "aria-valuemin": i ? void 0 : 0,
129
+ "aria-valuemax": i ? void 0 : s,
130
+ "aria-valuenow": i ? void 0 : a,
131
+ "aria-label": T,
132
+ "aria-busy": i,
133
+ className: o(
134
+ "relative",
135
+ "w-full",
136
+ "overflow-hidden",
137
+ k({ size: N, variant: e }),
138
+ c("full")
139
+ ),
140
+ children: i ? /* @__PURE__ */ l(
141
+ "div",
142
+ {
143
+ className: o(
144
+ "absolute",
145
+ "top-0",
146
+ "left-0",
147
+ "bottom-0",
148
+ w({ variant: e }),
149
+ c("full"),
150
+ "motion-reduce:animate-none"
151
+ ),
152
+ style: {
153
+ width: "30%",
154
+ animation: "progress-indeterminate 1.5s ease-in-out infinite"
155
+ }
156
+ }
157
+ ) : /* @__PURE__ */ l(
158
+ "div",
159
+ {
160
+ className: o(
161
+ "h-full",
162
+ w({ variant: e }),
163
+ c("full"),
164
+ "transition-all",
165
+ "duration-300",
166
+ "ease-out"
167
+ ),
168
+ style: {
169
+ width: `${t}%`
170
+ },
171
+ "aria-hidden": "true"
172
+ }
173
+ )
174
+ }
175
+ )
176
+ ] }));
177
+ });
178
+ A.displayName = "Progress";
179
+ export {
180
+ A as default
181
+ };
182
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sources":["../../../../../src/ui/primitives/Progress/Progress.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n"],"names":["progressTrackVariants","cva","progressBarVariants","Progress","forwardRef","_a","ref","_b","value","max","variant","size","showLabel","label","ariaLabel","className","props","__objRest","isIndeterminate","percentage","defaultAriaLabel","jsxs","cn","getSpacingClass","jsx","getTypographySize","getTypographyWeight","getRadiusClass"],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ "use client";
2
+ var q = Object.defineProperty;
3
+ var c = Object.getOwnPropertySymbols;
4
+ var x = Object.prototype.hasOwnProperty, C = Object.prototype.propertyIsEnumerable;
5
+ var h = (i, r, s) => r in i ? q(i, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : i[r] = s, I = (i, r) => {
6
+ for (var s in r || (r = {}))
7
+ x.call(r, s) && h(i, s, r[s]);
8
+ if (c)
9
+ for (var s of c(r))
10
+ C.call(r, s) && h(i, s, r[s]);
11
+ return i;
12
+ };
13
+ var N = (i, r) => {
14
+ var s = {};
15
+ for (var o in i)
16
+ x.call(i, o) && r.indexOf(o) < 0 && (s[o] = i[o]);
17
+ if (i != null && c)
18
+ for (var o of c(i))
19
+ r.indexOf(o) < 0 && C.call(i, o) && (s[o] = i[o]);
20
+ return s;
21
+ };
22
+ import { jsxs as w, jsx as f } from "react/jsx-runtime";
23
+ import { memo as z, forwardRef as A, useId as B, useMemo as a } from "react";
24
+ import { getTypographyClasses as F } from "../../tokens/typography.js";
25
+ import { getSpacingClass as m } from "../../tokens/spacing.js";
26
+ import { cn as n } from "../../utils/cn.js";
27
+ const D = z(
28
+ A(function(E, j) {
29
+ var p = E, {
30
+ id: r,
31
+ label: s,
32
+ error: o = !1,
33
+ success: d = !1,
34
+ helperText: t,
35
+ className: u = "",
36
+ disabled: l = !1
37
+ } = p, $ = N(p, [
38
+ "id",
39
+ "label",
40
+ "error",
41
+ "success",
42
+ "helperText",
43
+ "className",
44
+ "disabled"
45
+ ]);
46
+ const M = B(), e = r || `radio-${M}`, g = a(
47
+ () => o ? `${e}-error` : void 0,
48
+ [o, e]
49
+ ), b = a(
50
+ () => t ? `${e}-helper` : void 0,
51
+ [t, e]
52
+ ), y = a(() => "focus:border-line-focus", []), v = a(() => "focus:border-error", []), R = a(
53
+ () => o ? v.replace("focus:border-", "focus:ring-") : y.replace("focus:border-", "focus:ring-"),
54
+ [o, v, y]
55
+ ), S = a(
56
+ () => n(
57
+ "h-4",
58
+ "w-4",
59
+ "border",
60
+ "border-line-default",
61
+ "text-fg-brand",
62
+ "focus:ring-2",
63
+ R,
64
+ "focus:ring-offset-2",
65
+ "disabled:opacity-50",
66
+ "disabled:cursor-not-allowed",
67
+ "cursor-pointer",
68
+ o && "border-error",
69
+ !o && d && "border-success",
70
+ u
71
+ ),
72
+ [R, o, d, u]
73
+ ), k = a(
74
+ () => n(
75
+ F("label"),
76
+ m("sm", "ml"),
77
+ l ? "opacity-50 cursor-not-allowed" : "cursor-pointer"
78
+ ),
79
+ [l]
80
+ );
81
+ return /* @__PURE__ */ w("div", { className: n("flex", "flex-col", m("sm", "my")), children: [
82
+ /* @__PURE__ */ w("div", { className: "flex items-center", children: [
83
+ /* @__PURE__ */ f(
84
+ "input",
85
+ I({
86
+ type: "radio",
87
+ id: e,
88
+ ref: j,
89
+ className: S,
90
+ disabled: l,
91
+ "aria-invalid": o,
92
+ "aria-describedby": g || b || void 0,
93
+ "aria-label": s ? void 0 : "Radio button"
94
+ }, $)
95
+ ),
96
+ s && /* @__PURE__ */ f("label", { htmlFor: e, className: k, children: s })
97
+ ] }),
98
+ (o || d || t) && /* @__PURE__ */ f(
99
+ "div",
100
+ {
101
+ id: g || b,
102
+ className: n(
103
+ m("xs", "mt"),
104
+ F("caption"),
105
+ o ? "text-fg-error" : d ? "text-fg-success" : "text-fg-secondary"
106
+ ),
107
+ role: o || d ? "alert" : void 0,
108
+ children: o ? t || "This field has an error" : t
109
+ }
110
+ )
111
+ ] });
112
+ })
113
+ );
114
+ D.displayName = "Radio";
115
+ export {
116
+ D as default
117
+ };
118
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sources":["../../../../../src/ui/primitives/Radio/Radio.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, memo, useId, useMemo } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface RadioProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\"\n> {\n label?: ReactNode;\n error?: boolean;\n /**\n * Validation success state — paints the border and (when\n * `helperText` is also set) the helper-text color green. Matches\n * the Input + Select + Checkbox + Switch + Textarea convention;\n * the three feedback flags (`error`, `success`, `helperText`)\n * cover every form primitive in the DS. Error takes precedence\n * when both `error` and `success` are set.\n */\n success?: boolean;\n helperText?: string;\n}\n\n/**\n * Radio Component\n *\n * A styled radio input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Radio\n * id=\"option1\"\n * name=\"options\"\n * label=\"Option 1\"\n * value=\"1\"\n * checked={selected === \"1\"}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Radio = memo(\n forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n id,\n label,\n error = false,\n success = false,\n helperText,\n className = \"\",\n disabled = false,\n ...props\n },\n ref,\n ) {\n // Stable fallback id when the consumer doesn't provide one. useId\n // is SSR-safe and stable across renders, replacing the deprecated\n // Math.random().substr() pattern.\n const reactId = useId();\n const radioId = id || `radio-${reactId}`;\n\n const errorId = useMemo(\n () => (error ? `${radioId}-error` : undefined),\n [error, radioId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${radioId}-helper` : undefined),\n [helperText, radioId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes — error wins over success when both flags are\n // set (a field cannot be valid AND invalid; treat it as invalid).\n const radioClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n !error && success && \"border-success\",\n className,\n ),\n [focusRingColor, error, success, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={radioId}\n ref={ref}\n className={radioClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Radio button\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={radioId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || success || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error\n ? \"text-fg-error\"\n : success\n ? \"text-fg-success\"\n : \"text-fg-secondary\",\n )}\n role={error || success ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nRadio.displayName = \"Radio\";\n\nexport default Radio;\n"],"names":["Radio","memo","forwardRef","_a","ref","_b","id","label","error","success","helperText","className","disabled","props","__objRest","reactId","useId","radioId","errorId","useMemo","helperId","primaryFocusRing","errorFocusRing","focusRingColor","radioClasses","cn","labelClasses","getTypographyClasses","getSpacingClass","jsxs","jsx","__spreadValues"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAMA,IAAQC;AAAA,EACZC,EAAyC,SACvCC,GAUAC,GACA;AAXA,QAAAC,IAAAF,GACE;AAAA,UAAAG;AAAA,MACA,OAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,SAAAC,IAAU;AAAA,MACV,YAAAC;AAAA,MACA,WAAAC,IAAY;AAAA,MACZ,UAAAC,IAAW;AAAA,QAPbP,GAQKQ,IAAAC,EARLT,GAQK;AAAA,MAPH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAQF,UAAMU,IAAUC,EAAA,GACVC,IAAUX,KAAM,SAASS,CAAO,IAEhCG,IAAUC;AAAA,MACd,MAAOX,IAAQ,GAAGS,CAAO,WAAW;AAAA,MACpC,CAACT,GAAOS,CAAO;AAAA,IAAA,GAGXG,IAAWD;AAAA,MACf,MAAOT,IAAa,GAAGO,CAAO,YAAY;AAAA,MAC1C,CAACP,GAAYO,CAAO;AAAA,IAAA,GAIhBI,IAAmBF,EAAQ,MAAM,2BAA2B,CAAA,CAAE,GAE9DG,IAAiBH,EAAQ,MAAM,sBAAsB,CAAA,CAAE,GAEvDI,IAAiBJ;AAAA,MACrB,MACEX,IACIc,EAAe,QAAQ,iBAAiB,aAAa,IACrDD,EAAiB,QAAQ,iBAAiB,aAAa;AAAA,MAC7D,CAACb,GAAOc,GAAgBD,CAAgB;AAAA,IAAA,GAKpCG,IAAeL;AAAA,MACnB,MACEM;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAf,KAAS;AAAA,QACT,CAACA,KAASC,KAAW;AAAA,QACrBE;AAAA,MAAA;AAAA,MAEJ,CAACY,GAAgBf,GAAOC,GAASE,CAAS;AAAA,IAAA,GAGtCe,IAAeP;AAAA,MACnB,MACEM;AAAA,QACEE,EAAqB,OAAO;AAAA,QAC5BC,EAAgB,MAAM,IAAI;AAAA,QAC1BhB,IAAW,kCAAkC;AAAA,MAAA;AAAA,MAEjD,CAACA,CAAQ;AAAA,IAAA;AAGX,WACE,gBAAAiB,EAAC,OAAA,EAAI,WAAWJ,EAAG,QAAQ,YAAYG,EAAgB,MAAM,IAAI,CAAC,GAChE,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAAC,EAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAId;AAAA,YACJ,KAAAb;AAAA,YACA,WAAWoB;AAAA,YACX,UAAAZ;AAAA,YACA,gBAAcJ;AAAA,YACd,oBAAkBU,KAAWE,KAAY;AAAA,YACzC,cAAab,IAAyB,SAAjB;AAAA,aACjBM;AAAA,QAAA;AAAA,QAELN,KACC,gBAAAuB,EAAC,SAAA,EAAM,SAASb,GAAS,WAAWS,GACjC,UAAAnB,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,OACEC,KAASC,KAAWC,MACpB,gBAAAoB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIZ,KAAWE;AAAA,UACf,WAAWK;AAAA,YACTG,EAAgB,MAAM,IAAI;AAAA,YAC1BD,EAAqB,SAAS;AAAA,YAC9BnB,IACI,kBACAC,IACE,oBACA;AAAA,UAAA;AAAA,UAER,MAAMD,KAASC,IAAU,UAAU;AAAA,UAElC,UAAAD,IAAQE,KAAc,4BAA4BA;AAAA,QAAA;AAAA,MAAA;AAAA,IACrD,GAEJ;AAAA,EAEJ,CAAC;AACH;AAEAV,EAAM,cAAc;"}