@fabio.caffarello/react-design-system 3.8.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 (411) hide show
  1. package/README.md +2 -1
  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/index.cjs +37 -37
  404. package/dist/index.cjs.map +1 -1
  405. package/dist/index.js +1052 -1053
  406. package/dist/index.js.map +1 -1
  407. package/dist/server/index.cjs +23 -23
  408. package/dist/server/index.cjs.map +1 -1
  409. package/dist/server/index.js +858 -1193
  410. package/dist/server/index.js.map +1 -1
  411. package/package.json +9 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","sources":["../../../../../src/ui/primitives/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, memo, useId, useMemo, useCallback, useState } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getSwitchClasses } from \"../../tokens/switch\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\nexport type SwitchSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\" | \"type\"\n> {\n size?: SwitchSize;\n label?: string;\n /**\n * Secondary text rendered beneath the label, wired through\n * `aria-describedby`. Named `helperText` to match Input, Select,\n * Checkbox, and Radio — every form primitive in the DS uses the\n * same prop name for this role.\n */\n helperText?: string;\n error?: boolean;\n /**\n * Validation success state — paints the (off-state) track border\n * and (when `helperText` is also set) the helper-text color green.\n * Matches the Input + Select + Checkbox + Radio + Textarea\n * convention. Error takes precedence when both `error` and\n * `success` are set.\n */\n success?: boolean;\n}\n\n/**\n * Switch Component\n *\n * A toggle switch component for on/off states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Switch checked={isEnabled} onChange={(e) => setIsEnabled(e.target.checked)} />\n *\n * <Switch\n * label=\"Enable notifications\"\n * helperText=\"Receive email notifications\"\n * checked={notifications}\n * onChange={(e) => setNotifications(e.target.checked)}\n * />\n * ```\n */\nconst Switch = memo(\n forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = \"md\",\n label,\n helperText,\n error = false,\n success = false,\n className = \"\",\n disabled = false,\n checked,\n defaultChecked,\n onChange,\n id,\n ...props\n },\n ref,\n ) {\n // Controlled / uncontrolled pattern.\n //\n // Previously this primitive accepted `defaultChecked` via\n // `...props` and forwarded it to the hidden `<input type=\"checkbox\">`\n // (form-integration shim), but the visible `<button role=\"switch\">`\n // bound `aria-checked={checked}` directly. With `checked` undefined\n // in uncontrolled mode, `aria-checked` was missing — axe\n // `aria-required-attr` (critical) flagged every uncontrolled Switch\n // because `role=\"switch\"` REQUIRES `aria-checked`. The visual track\n // and thumb also stuck at the off state because their classes\n // derived from the same `checked` prop.\n //\n // The fix is the standard React pattern: when `checked` is provided\n // the consumer controls state; otherwise `defaultChecked` seeds\n // internal state and the click/keydown handlers update it locally\n // AND notify `onChange`. The visible button, the hidden input, and\n // every classes() consumer all read from a single resolved\n // `currentChecked`.\n const isControlled = checked !== undefined;\n const [internalChecked, setInternalChecked] = useState<boolean>(\n defaultChecked ?? false,\n );\n const currentChecked = isControlled ? !!checked : internalChecked;\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 switchId = id || `switch-${reactId}`;\n\n const labelId = useMemo(\n () => (label ? `${switchId}-label` : undefined),\n [label, switchId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${switchId}-helper` : undefined),\n [helperText, switchId],\n );\n\n // Component-scoped tokens (SWITCH_TOKENS) drive track/thumb/translate.\n const config = useMemo(() => getSwitchClasses(size), [size]);\n\n // Memoize focus ring color\n const focusRingColor = useMemo(\n () => \"focus:border-line-focus\".replace(\"focus:border-\", \"focus:ring-\"),\n [],\n );\n\n // Memoize classes — all consume `currentChecked` (the resolved\n // controlled-or-uncontrolled state), not the raw `checked` prop.\n const trackClasses = useMemo(\n () =>\n cn(\n \"relative\",\n \"inline-flex\",\n \"shrink-0\",\n \"cursor-pointer\",\n getRadiusClass(\"full\"),\n \"border-2\",\n \"border-transparent\",\n getAnimationClass(\"base\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n config.track,\n currentChecked ? \"bg-surface-brand\" : \"bg-surface-muted\",\n // Border feedback only shows in the off state — the on-state\n // brand background already saturates the track and overrides\n // any colored outline visually. Error wins over success.\n error && !currentChecked && \"border-error\",\n !error && success && !currentChecked && \"border-success\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n ),\n [\n focusRingColor,\n config.track,\n currentChecked,\n error,\n success,\n disabled,\n className,\n ],\n );\n\n const thumbClasses = useMemo(\n () =>\n cn(\n \"pointer-events-none\",\n \"inline-block\",\n getRadiusClass(\"full\"),\n \"bg-surface-base\",\n \"shadow\",\n \"transform\",\n getAnimationClass(\"base\"),\n config.thumb,\n currentChecked ? config.translate : \"translate-x-0\",\n ),\n [config.thumb, config.translate, currentChecked],\n );\n\n return (\n <div className={cn(\"flex\", \"items-start\", getSpacingClass(\"md\", \"gap\"))}>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n className={trackClasses}\n role=\"switch\"\n aria-checked={currentChecked}\n aria-labelledby={labelId}\n aria-describedby={helperId}\n disabled={disabled}\n onClick={useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n const next = !currentChecked;\n if (!isControlled) setInternalChecked(next);\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: next },\n currentTarget: { ...e.currentTarget, checked: next },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, currentChecked, isControlled],\n )}\n onKeyDown={useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n const next = !currentChecked;\n if (!isControlled) setInternalChecked(next);\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: next },\n currentTarget: { ...e.currentTarget, checked: next },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, currentChecked, isControlled],\n )}\n >\n <span className={thumbClasses} />\n </button>\n {/* Hidden checkbox for form-data integration. Follows the\n resolved `currentChecked` so submission picks up the\n correct value in both controlled and uncontrolled modes.\n `aria-hidden` + tabIndex=-1 keep it out of AT and Tab\n order — interaction happens on the visible button above.\n The onChange is a no-op fallback (real state changes\n flow through the button's handler); React requires it\n alongside `checked` to suppress the controlled-input\n warning when the consumer doesn't supply onChange. */}\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n checked={currentChecked}\n onChange={onChange ?? (() => {})}\n disabled={disabled}\n className=\"sr-only\"\n aria-hidden=\"true\"\n tabIndex={-1}\n {...props}\n />\n </div>\n {(label || helperText) && (\n <div className=\"flex-1\">\n {label && (\n <label\n id={labelId}\n htmlFor={switchId}\n className={cn(\n \"block\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n error ? \"text-fg-error\" : \"text-fg-primary\",\n disabled ? \"opacity-50\" : \"cursor-pointer\",\n )}\n >\n {label}\n </label>\n )}\n {helperText && (\n <p\n id={helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n error\n ? \"text-fg-error\"\n : success\n ? \"text-fg-success\"\n : \"text-fg-secondary\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }),\n);\n\nSwitch.displayName = \"Switch\";\n\nexport default Switch;\n"],"names":["Switch","memo","forwardRef","_a","ref","_b","size","label","helperText","error","success","className","disabled","checked","defaultChecked","onChange","id","props","__objRest","isControlled","internalChecked","setInternalChecked","useState","currentChecked","reactId","useId","switchId","labelId","useMemo","helperId","config","getSwitchClasses","focusRingColor","trackClasses","cn","getRadiusClass","getAnimationClass","thumbClasses","jsxs","getSpacingClass","jsx","useCallback","e","next","syntheticEvent","__spreadProps","__spreadValues","getTypographySize","getTypographyWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,MAAMA,KAASC;AAAA,EACbC,EAA0C,SACxCC,IAcAC,GACA;AAfA,QAAAC,IAAAF,IACE;AAAA,YAAAG,IAAO;AAAA,MACP,OAAAC;AAAA,MACA,YAAAC;AAAA,MACA,OAAAC,IAAQ;AAAA,MACR,SAAAC,IAAU;AAAA,MACV,WAAAC,IAAY;AAAA,MACZ,UAAAC,IAAW;AAAA,MACX,SAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,UAAAC;AAAA,MACA,IAAAC;AAAA,QAXFX,GAYKY,IAAAC,EAZLb,GAYK;AAAA,MAXH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAuBF,UAAMc,IAAeN,MAAY,QAC3B,CAACO,GAAiBC,CAAkB,IAAIC;AAAA,MAC5CR,KAAA,OAAAA,IAAkB;AAAA,IAAA,GAEdS,IAAiBJ,IAAe,CAAC,CAACN,IAAUO,GAI5CI,IAAUC,EAAA,GACVC,IAAWV,KAAM,UAAUQ,CAAO,IAElCG,IAAUC;AAAA,MACd,MAAOrB,IAAQ,GAAGmB,CAAQ,WAAW;AAAA,MACrC,CAACnB,GAAOmB,CAAQ;AAAA,IAAA,GAGZG,IAAWD;AAAA,MACf,MAAOpB,IAAa,GAAGkB,CAAQ,YAAY;AAAA,MAC3C,CAAClB,GAAYkB,CAAQ;AAAA,IAAA,GAIjBI,IAASF,EAAQ,MAAMG,EAAiBzB,CAAI,GAAG,CAACA,CAAI,CAAC,GAGrD0B,IAAiBJ;AAAA,MACrB,MAAM,0BAA0B,QAAQ,iBAAiB,aAAa;AAAA,MACtE,CAAA;AAAA,IAAC,GAKGK,IAAeL;AAAA,MACnB,MACEM;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAe,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACAC,EAAkB,MAAM;AAAA,QACxB;AAAA,QACA;AAAA,QACAJ;AAAA,QACA;AAAA,QACAF,EAAO;AAAA,QACPP,IAAiB,qBAAqB;AAAA;AAAA;AAAA;AAAA,QAItCd,KAAS,CAACc,KAAkB;AAAA,QAC5B,CAACd,KAASC,KAAW,CAACa,KAAkB;AAAA,QACxCX,KAAY;AAAA,QACZD;AAAA,MAAA;AAAA,MAEJ;AAAA,QACEqB;AAAA,QACAF,EAAO;AAAA,QACPP;AAAA,QACAd;AAAA,QACAC;AAAA,QACAE;AAAA,QACAD;AAAA,MAAA;AAAA,IACF,GAGI0B,IAAeT;AAAA,MACnB,MACEM;AAAA,QACE;AAAA,QACA;AAAA,QACAC,EAAe,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACAC,EAAkB,MAAM;AAAA,QACxBN,EAAO;AAAA,QACPP,IAAiBO,EAAO,YAAY;AAAA,MAAA;AAAA,MAExC,CAACA,EAAO,OAAOA,EAAO,WAAWP,CAAc;AAAA,IAAA;AAGjD,WACE,gBAAAe,EAAC,OAAA,EAAI,WAAWJ,EAAG,QAAQ,eAAeK,EAAgB,MAAM,KAAK,CAAC,GACpE,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAWP;AAAA,YACX,MAAK;AAAA,YACL,gBAAcV;AAAA,YACd,mBAAiBI;AAAA,YACjB,oBAAkBE;AAAA,YAClB,UAAAjB;AAAA,YACA,SAAS6B;AAAA,cACP,CAACC,MAA2C;AAC1C,oBAAI9B,EAAU;AACd,sBAAM+B,IAAO,CAACpB;AAEd,oBADKJ,KAAcE,EAAmBsB,CAAI,GACtC5B,GAAU;AACZ,wBAAM6B,IAAiBC,EAAAC,EAAA,IAClBJ,IADkB;AAAA,oBAErB,QAAQG,EAAAC,EAAA,IAAKJ,EAAE,SAAP,EAAe,SAASC,EAAA;AAAA,oBAChC,eAAeE,EAAAC,EAAA,IAAKJ,EAAE,gBAAP,EAAsB,SAASC,EAAA;AAAA,kBAAK;AAErD,kBAAA5B,EAAS6B,CAAc;AAAA,gBACzB;AAAA,cACF;AAAA,cACA,CAAChC,GAAUG,GAAUQ,GAAgBJ,CAAY;AAAA,YAAA;AAAA,YAEnD,WAAWsB;AAAA,cACT,CAACC,MAA8C;AAE7C,oBADI9B,KACA8B,EAAE,QAAQ,WAAWA,EAAE,QAAQ,IAAK;AACxC,gBAAAA,EAAE,eAAA;AACF,sBAAMC,IAAO,CAACpB;AAEd,oBADKJ,KAAcE,EAAmBsB,CAAI,GACtC5B,GAAU;AACZ,wBAAM6B,IAAiBC,EAAAC,EAAA,IAClBJ,IADkB;AAAA,oBAErB,QAAQG,EAAAC,EAAA,IAAKJ,EAAE,SAAP,EAAe,SAASC,EAAA;AAAA,oBAChC,eAAeE,EAAAC,EAAA,IAAKJ,EAAE,gBAAP,EAAsB,SAASC,EAAA;AAAA,kBAAK;AAErD,kBAAA5B,EAAS6B,CAAc;AAAA,gBACzB;AAAA,cACF;AAAA,cACA,CAAChC,GAAUG,GAAUQ,GAAgBJ,CAAY;AAAA,YAAA;AAAA,YAGnD,UAAA,gBAAAqB,EAAC,QAAA,EAAK,WAAWH,EAAA,CAAc;AAAA,UAAA;AAAA,QAAA;AAAA,QAWjC,gBAAAG;AAAA,UAAC;AAAA,UAAAM,EAAA;AAAA,YACC,KAAA1C;AAAA,YACA,MAAK;AAAA,YACL,IAAIsB;AAAA,YACJ,SAASH;AAAA,YACT,UAAUR,KAAA,OAAAA,KAAa,MAAM;AAAA,YAAC;AAAA,YAC9B,UAAAH;AAAA,YACA,WAAU;AAAA,YACV,eAAY;AAAA,YACZ,UAAU;AAAA,aACNK;AAAA,QAAA;AAAA,MACN,GACF;AAAA,OACEV,KAASC,MACT,gBAAA8B,EAAC,OAAA,EAAI,WAAU,UACZ,UAAA;AAAA,QAAA/B,KACC,gBAAAiC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIb;AAAA,YACJ,SAASD;AAAA,YACT,WAAWQ;AAAA,cACT;AAAA,cACAa,EAAkB,WAAW;AAAA,cAC7BC,GAAoB,OAAO;AAAA,cAC3BvC,IAAQ,kBAAkB;AAAA,cAC1BG,IAAW,eAAe;AAAA,YAAA;AAAA,YAG3B,UAAAL;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJC,KACC,gBAAAgC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAIX;AAAA,YACJ,WAAWK;AAAA,cACTK,EAAgB,MAAM,IAAI;AAAA,cAC1BQ,EAAkB,WAAW;AAAA,cAC7BtC,IACI,kBACAC,IACE,oBACA;AAAA,YAAA;AAAA,YAGP,UAAAF;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ,CAAC;AACH;AAEAR,GAAO,cAAc;"}
@@ -0,0 +1,118 @@
1
+ "use client";
2
+ var y = Object.defineProperty;
3
+ var n = Object.getOwnPropertySymbols;
4
+ var d = Object.prototype.hasOwnProperty, x = Object.prototype.propertyIsEnumerable;
5
+ var l = (e, r, t) => r in e ? y(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t, c = (e, r) => {
6
+ for (var t in r || (r = {}))
7
+ d.call(r, t) && l(e, t, r[t]);
8
+ if (n)
9
+ for (var t of n(r))
10
+ x.call(r, t) && l(e, t, r[t]);
11
+ return e;
12
+ };
13
+ var p = (e, r) => {
14
+ var t = {};
15
+ for (var s in e)
16
+ d.call(e, s) && r.indexOf(s) < 0 && (t[s] = e[s]);
17
+ if (e != null && n)
18
+ for (var s of n(e))
19
+ r.indexOf(s) < 0 && x.call(e, s) && (t[s] = e[s]);
20
+ return t;
21
+ };
22
+ import { jsx as m } from "react/jsx-runtime";
23
+ import { forwardRef as T } from "react";
24
+ import { getTypographyClasses as o } from "../../tokens/typography.js";
25
+ import { cn as L } from "../../utils/cn.js";
26
+ const E = {
27
+ primary: {
28
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
29
+ light: "text-indigo-400",
30
+ DEFAULT: "text-fg-brand",
31
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
32
+ dark: "text-indigo-600",
33
+ contrast: "text-fg-inverse"
34
+ },
35
+ secondary: {
36
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
37
+ light: "text-pink-300",
38
+ DEFAULT: "text-fg-brand-secondary",
39
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
40
+ dark: "text-pink-600",
41
+ contrast: "text-fg-inverse"
42
+ },
43
+ success: {
44
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
45
+ light: "text-green-300",
46
+ DEFAULT: "text-fg-success",
47
+ dark: "text-success-dark",
48
+ contrast: "text-fg-inverse"
49
+ },
50
+ warning: {
51
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
52
+ light: "text-yellow-300",
53
+ DEFAULT: "text-fg-warning",
54
+ dark: "text-warning-dark",
55
+ contrast: "text-fg-inverse"
56
+ },
57
+ error: {
58
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
59
+ light: "text-red-300",
60
+ DEFAULT: "text-fg-error",
61
+ dark: "text-error-dark",
62
+ contrast: "text-fg-inverse"
63
+ },
64
+ info: {
65
+ // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)
66
+ light: "text-blue-300",
67
+ DEFAULT: "text-fg-info",
68
+ dark: "text-info-dark",
69
+ contrast: "text-fg-inverse"
70
+ },
71
+ neutral: {
72
+ light: "text-fg-tertiary",
73
+ DEFAULT: "text-fg-secondary",
74
+ dark: "text-fg-primary",
75
+ contrast: "text-fg-inverse"
76
+ }
77
+ };
78
+ function A(D, b) {
79
+ var f = D, {
80
+ variant: e = "paragraph",
81
+ bold: r,
82
+ italic: t,
83
+ className: s,
84
+ as: g,
85
+ colorRole: h = "neutral",
86
+ colorShade: u = "dark"
87
+ } = f, k = p(f, [
88
+ "variant",
89
+ "bold",
90
+ "italic",
91
+ "className",
92
+ "as",
93
+ "colorRole",
94
+ "colorShade"
95
+ ]);
96
+ const a = [];
97
+ let i;
98
+ if (g)
99
+ i = g;
100
+ else
101
+ switch (e) {
102
+ case "heading":
103
+ i = "h2";
104
+ break;
105
+ case "list":
106
+ i = "li";
107
+ break;
108
+ default:
109
+ i = "p";
110
+ break;
111
+ }
112
+ return e === "heading" ? a.push(o("h2")) : e === "body" || e === "paragraph" ? a.push(o("body")) : e === "bodySmall" ? a.push(o("bodySmall")) : e === "bodyLarge" ? a.push(o("bodyLarge")) : e === "caption" ? a.push(o("caption")) : e === "label" ? a.push(o("label")) : a.push(o("body")), r && a.push("font-bold"), t && a.push("italic"), a.push(E[h][u]), /* @__PURE__ */ m(i, c({ ref: b, className: L(...a, s) }, k));
113
+ }
114
+ const N = T(A);
115
+ export {
116
+ N as default
117
+ };
118
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.js","sources":["../../../../../src/ui/primitives/Text/Text.tsx"],"sourcesContent":["import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\nexport interface TextProps<\n T extends ElementType,\n> extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = TextProps<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof TextProps<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. Tailwind v4 needs literal class names\n // at build time, so role/shade resolve to a fixed entry in\n // TEXT_COLOR_CLASSES rather than constructing `text-${...}` dynamically.\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n"],"names":["TEXT_COLOR_CLASSES","TextComponent","_a","ref","_b","variant","bold","italic","className","as","colorRole","colorShade","rest","__objRest","classNames","Tag","getTypographyClasses","jsx","__spreadValues","cn","Text","forwardRef"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAMA,IAGF;AAAA,EACF,SAAS;AAAA;AAAA,IAEP,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,IAET,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,WAAW;AAAA;AAAA,IAET,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,IAET,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,IAEP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,IAEP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,OAAO;AAAA;AAAA,IAEL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA;AAAA,IAEJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ,SAAS;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAEd;AAwBA,SAASC,EACPC,GAUAC,GACA;AAXA,MAAAC,IAAAF,GACE;AAAA,aAAAG,IAAU;AAAA,IACV,MAAAC;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC,IAAa;AAAA,MAPfP,GAQKQ,IAAAC,EARLT,GAQK;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKF,QAAMU,IAAuB,CAAA;AAC7B,MAAIC;AAEJ,MAAIN;AACF,IAAAM,IAAMN;AAAA;AAEN,YAAQJ,GAAA;AAAA,MACN,KAAK;AACH,QAAAU,IAAM;AACN;AAAA,MACF,KAAK;AACH,QAAAA,IAAM;AACN;AAAA,MAEF;AACE,QAAAA,IAAM;AACN;AAAA,IAAA;AAKN,SAAIV,MAAY,YACdS,EAAW,KAAKE,EAAqB,IAAI,CAAC,IACjCX,MAAY,UAAUA,MAAY,cAC3CS,EAAW,KAAKE,EAAqB,MAAM,CAAC,IACnCX,MAAY,cACrBS,EAAW,KAAKE,EAAqB,WAAW,CAAC,IACxCX,MAAY,cACrBS,EAAW,KAAKE,EAAqB,WAAW,CAAC,IACxCX,MAAY,YACrBS,EAAW,KAAKE,EAAqB,SAAS,CAAC,IACtCX,MAAY,UACrBS,EAAW,KAAKE,EAAqB,OAAO,CAAC,IAG7CF,EAAW,KAAKE,EAAqB,MAAM,CAAC,GAI1CV,KACFQ,EAAW,KAAK,WAAW,GAGzBP,KACFO,EAAW,KAAK,QAAQ,GAM1BA,EAAW,KAAKd,EAAmBU,CAAS,EAAEC,CAAU,CAAC,GAElD,gBAAAM,EAACF,GAAAG,EAAA,EAAI,KAAAf,GAAU,WAAWgB,EAAG,GAAGL,GAAYN,CAAS,KAAOI,EAAM;AAC3E;AAGA,MAAMQ,IAAOC,EAAWpB,CAAa;"}
@@ -0,0 +1,129 @@
1
+ "use client";
2
+ var I = Object.defineProperty;
3
+ var d = Object.getOwnPropertySymbols;
4
+ var k = Object.prototype.hasOwnProperty, w = Object.prototype.propertyIsEnumerable;
5
+ var N = (s, e, o) => e in s ? I(s, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : s[e] = o, E = (s, e) => {
6
+ for (var o in e || (e = {}))
7
+ k.call(e, o) && N(s, o, e[o]);
8
+ if (d)
9
+ for (var o of d(e))
10
+ w.call(e, o) && N(s, o, e[o]);
11
+ return s;
12
+ };
13
+ var F = (s, e) => {
14
+ var o = {};
15
+ for (var r in s)
16
+ k.call(s, r) && e.indexOf(r) < 0 && (o[r] = s[r]);
17
+ if (s != null && d)
18
+ for (var r of d(s))
19
+ e.indexOf(r) < 0 && w.call(s, r) && (o[r] = s[r]);
20
+ return o;
21
+ };
22
+ import { jsx as g, jsxs as M } from "react/jsx-runtime";
23
+ import { memo as T, forwardRef as q, useId as A, useMemo as t, useEffect as G } from "react";
24
+ import { getRadiusClass as H } from "../../tokens/radius.js";
25
+ import { getSpacingClass as u } from "../../tokens/spacing.js";
26
+ import { getTypographySize as y } from "../../tokens/typography.js";
27
+ import { cn as c } from "../../utils/cn.js";
28
+ const J = T(
29
+ q(function(K, S) {
30
+ var p = K, {
31
+ error: e = !1,
32
+ success: o = !1,
33
+ resize: r = "vertical",
34
+ className: x = "",
35
+ label: n,
36
+ helperText: l,
37
+ id: m
38
+ } = p, b = F(p, [
39
+ "error",
40
+ "success",
41
+ "resize",
42
+ "className",
43
+ "label",
44
+ "helperText",
45
+ "id"
46
+ ]);
47
+ const j = A(), a = m != null ? m : j, v = t(() => "focus:border-line-focus", []), z = t(() => "focus:border-error", []), f = t(
48
+ () => e ? z.replace("focus:border-", "focus:ring-") : v.replace("focus:border-", "focus:ring-"),
49
+ [e, z, v]
50
+ ), h = t(
51
+ () => ({
52
+ none: "resize-none",
53
+ both: "resize",
54
+ horizontal: "resize-x",
55
+ vertical: "resize-y"
56
+ }),
57
+ []
58
+ ), B = t(
59
+ () => c(
60
+ "block",
61
+ "w-full",
62
+ H("md"),
63
+ u("base", "px"),
64
+ u("md", "py"),
65
+ "border",
66
+ y("body"),
67
+ "focus:outline-none",
68
+ "focus:ring-2",
69
+ "focus:ring-offset-2",
70
+ h[r],
71
+ e ? c("border-error", f) : o ? c("border-success", f) : c("border-line-default", f),
72
+ x
73
+ ),
74
+ [r, h, e, o, f, x]
75
+ ), i = t(
76
+ () => l ? `${a}-helper` : void 0,
77
+ [l, a]
78
+ ), L = t(
79
+ () => i != null ? i : e ? `${a}-error` : void 0,
80
+ [i, e, a]
81
+ ), $ = b["aria-label"], D = b["aria-labelledby"];
82
+ G(() => {
83
+ }, [n, $, D, a]);
84
+ const R = /* @__PURE__ */ g(
85
+ "textarea",
86
+ E({
87
+ ref: S,
88
+ id: a,
89
+ className: B,
90
+ "aria-invalid": e,
91
+ "aria-describedby": L
92
+ }, b)
93
+ ), C = l ? /* @__PURE__ */ g(
94
+ "p",
95
+ {
96
+ id: i,
97
+ className: c(
98
+ u("xs", "mt"),
99
+ y("bodySmall"),
100
+ e ? "text-fg-error" : o ? "text-fg-success" : "text-fg-secondary"
101
+ ),
102
+ children: l
103
+ }
104
+ ) : null;
105
+ return !n && !C ? R : /* @__PURE__ */ M("div", { className: "block w-full", children: [
106
+ n && /* @__PURE__ */ g(
107
+ "label",
108
+ {
109
+ htmlFor: a,
110
+ className: c(
111
+ "block",
112
+ u("xs", "mb"),
113
+ y("label"),
114
+ "font-medium",
115
+ "text-fg-primary"
116
+ ),
117
+ children: n
118
+ }
119
+ ),
120
+ R,
121
+ C
122
+ ] });
123
+ })
124
+ );
125
+ J.displayName = "Textarea";
126
+ export {
127
+ J as default
128
+ };
129
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","sources":["../../../../../src/ui/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { forwardRef, memo, useEffect, useId, useMemo } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends TextareaHTMLAttributes<HTMLTextAreaElement> {\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 + Radio + Switch convention; the\n * three feedback flags (`error`, `success`, `helperText`) cover\n * every form primitive in the DS. Error takes precedence when\n * both `error` and `success` are set.\n */\n success?: boolean;\n resize?: \"none\" | \"both\" | \"horizontal\" | \"vertical\";\n label?: string;\n /**\n * Secondary text rendered beneath the textarea, wired through\n * `aria-describedby`. Named `helperText` to match Input, Select,\n * Checkbox, Radio, and Switch — every form primitive in the DS\n * uses the same prop name for this role. When `error` or\n * `success` is also set, the helper text inherits the matching\n * red / green color.\n */\n helperText?: string;\n}\n\n/**\n * Textarea Component\n *\n * A styled textarea component for longer text input.\n *\n * For an accessible name, supply ONE of:\n * - `label` prop (renders a visible `<label>` above the textarea), OR\n * - `aria-label` / `aria-labelledby`, OR\n * - an external `<Label htmlFor={id}>` paired with the same `id` prop\n * (use the Label primitive when you need `variant=\"required\" | \"optional\"`).\n *\n * In development, a missing accessible name logs a warning to the console.\n *\n * @example\n * ```tsx\n * <Textarea label=\"Description\" rows={4} />\n * ```\n */\nconst Textarea = memo(\n forwardRef<HTMLTextAreaElement, Props>(function Textarea(\n {\n error = false,\n success = false,\n resize = \"vertical\",\n className = \"\",\n label,\n helperText,\n id: idProp,\n ...props\n },\n ref,\n ) {\n const autoId = useId();\n const id = idProp ?? autoId;\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 resize classes\n const resizeClasses = useMemo<Record<NonNullable<Props[\"resize\"]>, string>>(\n () => ({\n none: \"resize-none\",\n both: \"resize\",\n horizontal: \"resize-x\",\n vertical: \"resize-y\",\n }),\n [],\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 classes = useMemo(\n () =>\n cn(\n \"block\",\n \"w-full\",\n getRadiusClass(\"md\"),\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n \"border\",\n getTypographySize(\"body\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n resizeClasses[resize],\n error\n ? cn(\"border-error\", focusRingColor)\n : success\n ? cn(\"border-success\", focusRingColor)\n : cn(\"border-line-default\", focusRingColor),\n className,\n ),\n [resize, resizeClasses, error, success, focusRingColor, className],\n );\n\n // Memoize aria-describedby — points to the helper paragraph when\n // helperText is provided; falls back to an error id when only\n // error is set (kept for back-compat with consumers that don't\n // pass helperText).\n const helperId = useMemo(\n () => (helperText ? `${id}-helper` : undefined),\n [helperText, id],\n );\n\n const ariaDescribedBy = useMemo(\n () => helperId ?? (error ? `${id}-error` : undefined),\n [helperId, error, id],\n );\n\n const ariaLabel = props[\"aria-label\"];\n const ariaLabelledBy = props[\"aria-labelledby\"];\n\n // Dev-only accessibility warning: ensure some accessible name source exists.\n useEffect(() => {\n if (!import.meta.env.DEV) return;\n if (label || ariaLabel || ariaLabelledBy) return;\n const externalLabel =\n typeof document !== \"undefined\"\n ? document.querySelector(`label[for=\"${CSS.escape(id)}\"]`)\n : null;\n if (externalLabel) return;\n console.warn(\n \"[Textarea] Missing accessible name. Provide a `label` prop, `aria-label`, `aria-labelledby`, or pair an external `<Label htmlFor={id}>` with the same `id`.\",\n );\n }, [label, ariaLabel, ariaLabelledBy, id]);\n\n const textareaEl = (\n <textarea\n ref={ref}\n id={id}\n className={classes}\n aria-invalid={error}\n aria-describedby={ariaDescribedBy}\n {...props}\n />\n );\n\n const helperEl = helperText ? (\n <p\n id={helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n error\n ? \"text-fg-error\"\n : success\n ? \"text-fg-success\"\n : \"text-fg-secondary\",\n )}\n >\n {helperText}\n </p>\n ) : null;\n\n if (!label && !helperEl) return textareaEl;\n\n return (\n <div className=\"block w-full\">\n {label && (\n <label\n htmlFor={id}\n className={cn(\n \"block\",\n getSpacingClass(\"xs\", \"mb\"),\n getTypographySize(\"label\"),\n \"font-medium\",\n \"text-fg-primary\",\n )}\n >\n {label}\n </label>\n )}\n {textareaEl}\n {helperEl}\n </div>\n );\n }),\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport default Textarea;\n"],"names":["Textarea","memo","forwardRef","_a","ref","_b","error","success","resize","className","label","helperText","idProp","props","__objRest","autoId","useId","id","primaryFocusRing","useMemo","errorFocusRing","focusRingColor","resizeClasses","classes","cn","getRadiusClass","getSpacingClass","getTypographySize","helperId","ariaDescribedBy","ariaLabel","ariaLabelledBy","useEffect","textareaEl","jsx","__spreadValues","helperEl","jsxs"],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ "use client";
2
+ var $ = Object.defineProperty, q = Object.defineProperties;
3
+ var G = Object.getOwnPropertyDescriptors;
4
+ var b = Object.getOwnPropertySymbols;
5
+ var C = Object.prototype.hasOwnProperty, M = Object.prototype.propertyIsEnumerable;
6
+ var E = (e, o, r) => o in e ? $(e, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[o] = r, R = (e, o) => {
7
+ for (var r in o || (o = {}))
8
+ C.call(o, r) && E(e, r, o[r]);
9
+ if (b)
10
+ for (var r of b(o))
11
+ M.call(o, r) && E(e, r, o[r]);
12
+ return e;
13
+ }, T = (e, o) => q(e, G(o));
14
+ var V = (e, o) => {
15
+ var r = {};
16
+ for (var s in e)
17
+ C.call(e, s) && o.indexOf(s) < 0 && (r[s] = e[s]);
18
+ if (e != null && b)
19
+ for (var s of b(e))
20
+ o.indexOf(s) < 0 && M.call(e, s) && (r[s] = e[s]);
21
+ return r;
22
+ };
23
+ import { jsxs as L, jsx as H } from "react/jsx-runtime";
24
+ import { forwardRef as J, useState as Q, useRef as v, useId as U, useEffect as k, isValidElement as X, cloneElement as Y } from "react";
25
+ import { getBorderWidthClass as P } from "../../tokens/borders.js";
26
+ import { getRadiusClass as tt } from "../../tokens/radius.js";
27
+ import { getShadowClass as et } from "../../tokens/shadows.js";
28
+ import { getSpacingClass as c } from "../../tokens/spacing.js";
29
+ import { getTypographySize as rt } from "../../tokens/typography.js";
30
+ import { getZIndexClass as ot } from "../../tokens/z-index.js";
31
+ import { cva as B } from "../../utils/cva.js";
32
+ import { cn as a } from "../../utils/cn.js";
33
+ import { mergeRefs as nt } from "../../utils/mergeRefs.js";
34
+ const at = J(function(lt, x) {
35
+ var y = lt, {
36
+ content: o,
37
+ children: r,
38
+ position: s = "top",
39
+ delay: I = 200,
40
+ className: g = "",
41
+ "aria-label": st,
42
+ preservePositioning: N = !1
43
+ } = y, S = V(y, [
44
+ "content",
45
+ "children",
46
+ "position",
47
+ "delay",
48
+ "className",
49
+ "aria-label",
50
+ "preservePositioning"
51
+ ]);
52
+ const [m, f] = Q(!1), u = v(null), h = v(null), d = v(null), w = `tooltip-${U()}`, D = () => {
53
+ const l = setTimeout(() => {
54
+ f(!0);
55
+ }, I);
56
+ u.current = l;
57
+ }, F = () => {
58
+ u.current && (clearTimeout(u.current), u.current = null), f(!1);
59
+ }, K = () => {
60
+ f(!0);
61
+ }, j = () => {
62
+ f(!1);
63
+ }, W = (l) => {
64
+ var t;
65
+ l.key === "Escape" && (f(!1), (t = d.current) == null || t.blur());
66
+ };
67
+ k(() => () => {
68
+ u.current && (clearTimeout(u.current), u.current = null);
69
+ }, []), k(() => {
70
+ if (!m) return;
71
+ const l = (t) => {
72
+ h.current && !h.current.contains(t.target) && d.current && !d.current.contains(t.target) && f(!1);
73
+ };
74
+ return document.addEventListener("mousedown", l), () => {
75
+ document.removeEventListener("mousedown", l);
76
+ };
77
+ }, [m]);
78
+ const p = (l) => ({
79
+ top: "border-t-surface-inverse",
80
+ bottom: "border-b-surface-inverse",
81
+ left: "border-l-surface-inverse",
82
+ right: "border-r-surface-inverse"
83
+ })[l], z = B(
84
+ a(
85
+ "absolute",
86
+ ot("tooltip"),
87
+ c("sm", "px"),
88
+ c("xs", "py"),
89
+ rt("caption"),
90
+ "text-fg-inverse",
91
+ "bg-surface-inverse",
92
+ tt("md"),
93
+ et("lg"),
94
+ "whitespace-nowrap"
95
+ ),
96
+ {
97
+ variants: {
98
+ position: {
99
+ top: a(
100
+ "bottom-full",
101
+ "left-1/2",
102
+ "transform",
103
+ "-translate-x-1/2",
104
+ c("sm", "mb")
105
+ ),
106
+ bottom: a(
107
+ "top-full",
108
+ "left-1/2",
109
+ "transform",
110
+ "-translate-x-1/2",
111
+ c("sm", "mt")
112
+ ),
113
+ left: a(
114
+ "right-full",
115
+ "top-1/2",
116
+ "transform",
117
+ "-translate-y-1/2",
118
+ c("sm", "mr")
119
+ ),
120
+ right: a(
121
+ "left-full",
122
+ "top-1/2",
123
+ "transform",
124
+ "-translate-y-1/2",
125
+ c("sm", "ml")
126
+ )
127
+ }
128
+ },
129
+ defaultVariants: {
130
+ position: "top"
131
+ }
132
+ }
133
+ ), A = B(
134
+ a(
135
+ "absolute",
136
+ "w-0",
137
+ "h-0",
138
+ P("thick"),
139
+ "border-transparent"
140
+ ),
141
+ {
142
+ variants: {
143
+ position: {
144
+ top: a(
145
+ "top-full",
146
+ "left-1/2",
147
+ "transform",
148
+ "-translate-x-1/2",
149
+ p("top")
150
+ ),
151
+ bottom: a(
152
+ "bottom-full",
153
+ "left-1/2",
154
+ "transform",
155
+ "-translate-x-1/2",
156
+ p("bottom")
157
+ ),
158
+ left: a(
159
+ "left-full",
160
+ "top-1/2",
161
+ "transform",
162
+ "-translate-y-1/2",
163
+ p("left")
164
+ ),
165
+ right: a(
166
+ "right-full",
167
+ "top-1/2",
168
+ "transform",
169
+ "-translate-y-1/2",
170
+ p("right")
171
+ )
172
+ }
173
+ },
174
+ defaultVariants: {
175
+ position: "top"
176
+ }
177
+ }
178
+ ), O = X(r) ? (() => {
179
+ const l = r, t = l.props, _ = t.ref;
180
+ return Y(l, {
181
+ ref: nt(d, _),
182
+ "aria-describedby": m ? w : t["aria-describedby"],
183
+ onMouseEnter: (i) => {
184
+ var n;
185
+ D(), (n = t.onMouseEnter) == null || n.call(t, i);
186
+ },
187
+ onMouseLeave: (i) => {
188
+ var n;
189
+ F(), (n = t.onMouseLeave) == null || n.call(t, i);
190
+ },
191
+ onFocus: (i) => {
192
+ var n;
193
+ K(), (n = t.onFocus) == null || n.call(t, i);
194
+ },
195
+ onBlur: (i) => {
196
+ var n;
197
+ j(), (n = t.onBlur) == null || n.call(t, i);
198
+ },
199
+ onKeyDown: (i) => {
200
+ var n;
201
+ W(i), (n = t.onKeyDown) == null || n.call(t, i);
202
+ }
203
+ });
204
+ })() : r, Z = N ? a("static", "inline-block", g) : a("relative", "inline-block", g);
205
+ return /* @__PURE__ */ L("div", T(R({ ref: x, className: Z }, S), { children: [
206
+ O,
207
+ m && /* @__PURE__ */ L(
208
+ "div",
209
+ {
210
+ ref: h,
211
+ id: w,
212
+ className: a(z({ position: s })),
213
+ role: "tooltip",
214
+ "aria-live": "polite",
215
+ children: [
216
+ o,
217
+ /* @__PURE__ */ H("div", { className: a(A({ position: s })), "aria-hidden": "true" })
218
+ ]
219
+ }
220
+ )
221
+ ] }));
222
+ });
223
+ at.displayName = "Tooltip";
224
+ export {
225
+ at as default
226
+ };
227
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../../../src/ui/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n HTMLAttributes,\n ReactNode,\n KeyboardEvent,\n FocusEvent,\n ReactElement,\n} from \"react\";\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n useId,\n cloneElement,\n isValidElement,\n} from \"react\";\nimport { getBorderWidthClass } from \"../../tokens/borders\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getShadowClass } from \"../../tokens/shadows\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { cn, cva, mergeRefs } from \"../../utils\";\n\nexport interface TooltipProps extends HTMLAttributes<HTMLDivElement> {\n content: string;\n children: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n delay?: number;\n \"aria-label\"?: string;\n /**\n * When true, the tooltip wrapper won't interfere with absolute positioning of children.\n * The wrapper will use `position: static` instead of `position: relative`.\n */\n preservePositioning?: boolean;\n}\n\n/**\n * Tooltip Component\n *\n * A tooltip component for displaying additional information on hover.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"This is a tooltip\">\n * <Button>Hover me</Button>\n * </Tooltip>\n * ```\n */\nconst Tooltip = forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(\n {\n content,\n children,\n position = \"top\",\n delay = 200,\n className = \"\",\n \"aria-label\": _ariaLabel,\n preservePositioning = false,\n ...props\n },\n ref,\n) {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Stable per-instance ID for the tooltip popup. useId is SSR-safe and\n // stable across renders — the previous Math.random() approach generated\n // a fresh ID on every render, which silently breaks the\n // aria-describedby <-> tooltip id pairing observed by assistive tech\n // across re-renders.\n const tooltipId = `tooltip-${useId()}`;\n\n const handleMouseEnter = () => {\n const id = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n timeoutIdRef.current = id;\n };\n\n const handleMouseLeave = () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n setIsVisible(false);\n };\n\n const handleFocus = () => {\n // Show tooltip immediately on focus (no delay for keyboard users)\n setIsVisible(true);\n };\n\n const handleBlur = () => {\n setIsVisible(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setIsVisible(false);\n triggerRef.current?.blur();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n };\n }, []);\n\n // Close tooltip when clicking outside\n useEffect(() => {\n if (!isVisible) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n tooltipRef.current &&\n !tooltipRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsVisible(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isVisible]);\n\n // Helper to get arrow border color\n // Uses complete classes that Tailwind can detect\n const getArrowBorderColor = (\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n ): string => {\n // Arrow follows the tooltip body's surface-inverse color so the\n // triangle's point visually merges into the body.\n const borderMap: Record<\"top\" | \"bottom\" | \"left\" | \"right\", string> = {\n top: \"border-t-surface-inverse\",\n bottom: \"border-b-surface-inverse\",\n left: \"border-l-surface-inverse\",\n right: \"border-r-surface-inverse\",\n };\n return borderMap[position];\n };\n\n // Tooltip variants using CVA\n const tooltipVariants = cva(\n cn(\n \"absolute\",\n getZIndexClass(\"tooltip\"),\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n \"text-fg-inverse\",\n \"bg-surface-inverse\",\n getRadiusClass(\"md\"),\n getShadowClass(\"lg\"),\n \"whitespace-nowrap\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mb\"),\n ),\n bottom: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mt\"),\n ),\n left: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"mr\"),\n ),\n right: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"ml\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n const arrowVariants = cva(\n cn(\n \"absolute\",\n \"w-0\",\n \"h-0\",\n getBorderWidthClass(\"thick\"),\n \"border-transparent\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"top\"),\n ),\n bottom: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"bottom\"),\n ),\n left: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"left\"),\n ),\n right: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"right\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n // Clone children to add accessibility props\n const childrenWithProps = isValidElement(children)\n ? (() => {\n const childElement = children as ReactElement<\n HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n >;\n const existingProps = childElement.props;\n const existingRef = existingProps.ref;\n\n return cloneElement(childElement, {\n ref: mergeRefs<HTMLElement>(triggerRef, existingRef),\n \"aria-describedby\": isVisible\n ? tooltipId\n : existingProps[\"aria-describedby\"],\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseEnter();\n existingProps.onMouseEnter?.(e);\n },\n onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseLeave();\n existingProps.onMouseLeave?.(e);\n },\n onFocus: (e: FocusEvent<HTMLElement>) => {\n handleFocus();\n existingProps.onFocus?.(e);\n },\n onBlur: (e: FocusEvent<HTMLElement>) => {\n handleBlur();\n existingProps.onBlur?.(e);\n },\n onKeyDown: (e: KeyboardEvent<HTMLElement>) => {\n handleKeyDown(e);\n existingProps.onKeyDown?.(e);\n },\n } as Partial<typeof existingProps>);\n })()\n : children;\n\n // When preservePositioning is true, use static positioning to avoid interfering\n // with absolute positioned children. The tooltip will still be positioned correctly\n // using absolute positioning relative to the viewport/nearest positioned ancestor.\n const wrapperClassName = preservePositioning\n ? cn(\"static\", \"inline-block\", className)\n : cn(\"relative\", \"inline-block\", className);\n\n return (\n <div ref={ref} className={wrapperClassName} {...props}>\n {childrenWithProps}\n {isVisible && (\n <div\n ref={tooltipRef}\n id={tooltipId}\n className={cn(tooltipVariants({ position }))}\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n {content}\n <div className={cn(arrowVariants({ position }))} aria-hidden=\"true\" />\n </div>\n )}\n </div>\n );\n});\n\nTooltip.displayName = \"Tooltip\";\n\nexport default Tooltip;\n"],"names":["Tooltip","forwardRef","_a","ref","_b","content","children","position","delay","className","_ariaLabel","preservePositioning","props","__objRest","isVisible","setIsVisible","useState","timeoutIdRef","useRef","tooltipRef","triggerRef","tooltipId","useId","handleMouseEnter","id","handleMouseLeave","handleFocus","handleBlur","handleKeyDown","e","useEffect","handleClickOutside","event","getArrowBorderColor","tooltipVariants","cva","cn","getZIndexClass","getSpacingClass","getTypographySize","getRadiusClass","getShadowClass","arrowVariants","getBorderWidthClass","childrenWithProps","isValidElement","childElement","existingProps","existingRef","cloneElement","mergeRefs","wrapperClassName","__spreadProps","__spreadValues","jsxs","jsx"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ var l = Object.defineProperty, p = Object.defineProperties;
3
+ var h = Object.getOwnPropertyDescriptors;
4
+ var a = Object.getOwnPropertySymbols;
5
+ var v = Object.prototype.hasOwnProperty, P = Object.prototype.propertyIsEnumerable;
6
+ var g = (o, e, r) => e in o ? l(o, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[e] = r, i = (o, e) => {
7
+ for (var r in e || (e = {}))
8
+ v.call(e, r) && g(o, r, e[r]);
9
+ if (a)
10
+ for (var r of a(e))
11
+ P.call(e, r) && g(o, r, e[r]);
12
+ return o;
13
+ }, n = (o, e) => p(o, h(e));
14
+ import { jsx as c, Fragment as I } from "react/jsx-runtime";
15
+ import { useMemo as A } from "react";
16
+ import { ProvidersBundle as C } from "./providers-bundle.js";
17
+ const f = C;
18
+ function T(o, e) {
19
+ const {
20
+ theme: r,
21
+ config: s,
22
+ toast: u,
23
+ dialog: m,
24
+ providers: d = {
25
+ theme: !0,
26
+ config: !0,
27
+ toast: !0,
28
+ dialog: !0
29
+ }
30
+ } = e || {};
31
+ let t = o;
32
+ return d.dialog && (t = /* @__PURE__ */ c(f.DialogProvider, n(i({}, m), { children: t }))), d.toast && (t = /* @__PURE__ */ c(f.ToastProvider, n(i({}, u), { children: t }))), d.config && (t = /* @__PURE__ */ c(f.ConfigProvider, n(i({}, s), { children: t }))), d.theme && (t = /* @__PURE__ */ c(f.ThemeProvider, n(i({}, r), { children: t }))), t;
33
+ }
34
+ function N({ children: o, config: e }) {
35
+ const r = A(
36
+ () => T(o, e),
37
+ [o, e]
38
+ );
39
+ return /* @__PURE__ */ c(I, { children: r });
40
+ }
41
+ function O() {
42
+ return {
43
+ // Placeholder for future unified API
44
+ };
45
+ }
46
+ export {
47
+ N as AppProvider,
48
+ O as useApp
49
+ };
50
+ //# sourceMappingURL=AppProvider.js.map