@react-fabric/core 1.0.0-beta.6 → 1.0.0-beta.60

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 (425) hide show
  1. package/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
  2. package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
  3. package/{src/components/animations/Animations.module.css → css/components/_animations.css} +9 -9
  4. package/{src/components/avatar/Avatar.module.css → css/components/_avatar.css} +11 -11
  5. package/{src/components/badge/Badge.module.css → css/components/_badge.css} +19 -17
  6. package/{src/components/breadcrumbs/Breadcrumbs.module.css → css/components/_breadcrumbs.css} +52 -47
  7. package/{src/components/button/Button.module.css → css/components/_button.css} +77 -83
  8. package/{src/components/card/Card.module.css → css/components/_card.css} +54 -28
  9. package/{src/components/chip/Chip.module.css → css/components/_chip.css} +14 -10
  10. package/{src/components/collapsable/Collapsable.module.css → css/components/_collapsable.css} +3 -3
  11. package/css/components/_divider.css +38 -0
  12. package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +2 -2
  13. package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +6 -6
  14. package/{src/components/icon/Icon.module.css → css/components/_icon.css} +11 -8
  15. package/{src/components/media/Media.module.css → css/components/_media.css} +17 -17
  16. package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
  17. package/{src/overlays/message/Message.module.css → css/components/_message.css} +2 -2
  18. package/{src/components/meter/Meter.module.css → css/components/_meter.css} +10 -10
  19. package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +8 -8
  20. package/{src/components/panel/Panel.module.css → css/components/_panel.css} +17 -17
  21. package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
  22. package/css/components/_stepper.css +86 -0
  23. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +130 -85
  24. package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
  25. package/css/components/_tooltip.css +29 -0
  26. package/{src/core/content/Content.module.css → css/components/index.css} +26 -18
  27. package/{src/core/aside/Aside.module.css → css/core/_aside.css} +60 -48
  28. package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
  29. package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
  30. package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
  31. package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
  32. package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
  33. package/css/core/_section.css +28 -0
  34. package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
  35. package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
  36. package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
  37. package/css/core/index.css +33 -0
  38. package/css/reset/_gradients.css +8 -8
  39. package/css/reset/_reset.css +56 -224
  40. package/css/reset/_text.css +14 -29
  41. package/css/reset/_theme.css +331 -52
  42. package/css/reset/index.css +4 -4
  43. package/css/styles.css +7 -6
  44. package/css/theme/_colors.css +320 -0
  45. package/css/theme/_utilities.css +541 -0
  46. package/css/theme/index.css +45 -0
  47. package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
  48. package/dist/cjs/components/animations/Animations.js +110 -23
  49. package/dist/cjs/components/avatar/Avatar.js +46 -13
  50. package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
  51. package/dist/cjs/components/badge/Badge.js +36 -15
  52. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +40 -9
  53. package/dist/cjs/components/button/Button.js +50 -28
  54. package/dist/cjs/components/button/ButtonGroup.js +30 -3
  55. package/dist/cjs/components/button/ConfirmButton.js +28 -2
  56. package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
  57. package/dist/cjs/components/callout/Callout.js +44 -4
  58. package/dist/cjs/components/card/Card.js +60 -18
  59. package/dist/cjs/components/card/CardCover.js +36 -5
  60. package/dist/cjs/components/card/FlipContent.js +56 -0
  61. package/dist/cjs/components/chip/Chip.js +40 -20
  62. package/dist/cjs/components/collapsable/Collapsable.js +30 -5
  63. package/dist/cjs/components/divider/Divider.js +30 -7
  64. package/dist/cjs/components/dropdown/Dropdown.js +48 -9
  65. package/dist/cjs/components/dropdown/DropdownTool.js +1 -1
  66. package/dist/cjs/components/empty/EmptyContent.js +37 -7
  67. package/dist/cjs/components/icon/Icon.js +76 -13
  68. package/dist/cjs/components/media/Media.js +172 -75
  69. package/dist/cjs/components/menu/ContextMenu.js +19 -0
  70. package/dist/cjs/components/menu/Menu.js +76 -21
  71. package/dist/cjs/components/menu/MenuItem.js +54 -26
  72. package/dist/cjs/components/meter/Meter.js +26 -3
  73. package/dist/cjs/components/navigator/Navigator.js +48 -15
  74. package/dist/cjs/components/panel/Panel.js +53 -22
  75. package/dist/cjs/components/panel/PanelGroup.js +25 -2
  76. package/dist/cjs/components/panel/PanelStack.js +31 -2
  77. package/dist/cjs/components/progress/ProgressBar.js +31 -9
  78. package/dist/cjs/components/progress/ProgressCircle.js +29 -7
  79. package/dist/cjs/components/tabpanel/Tab.js +39 -15
  80. package/dist/cjs/components/tabpanel/TabPanel.js +56 -16
  81. package/dist/cjs/context/Global.js +28 -1
  82. package/dist/cjs/context/NotificationCenter.js +3 -3
  83. package/dist/cjs/core/aside/Aside.js +48 -22
  84. package/dist/cjs/core/boundary/ErrorBoundary.js +25 -8
  85. package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
  86. package/dist/cjs/core/content/Content.js +7 -3
  87. package/dist/cjs/core/headfoot/HeadFoot.js +48 -22
  88. package/dist/cjs/core/page/Page.js +40 -39
  89. package/dist/cjs/core/responsive/Responsive.js +59 -6
  90. package/dist/cjs/core/section/Section.js +12 -29
  91. package/dist/cjs/core/theme/ThemeProvider.js +32 -10
  92. package/dist/cjs/core/viewport/Viewport.js +18 -2
  93. package/dist/cjs/hooks/useControlledValue.js +12 -0
  94. package/dist/cjs/hooks/useDebounce.js +14 -1
  95. package/dist/cjs/hooks/useEffectDebugger.js +54 -2
  96. package/dist/cjs/hooks/useIsDark.js +8 -0
  97. package/dist/cjs/hooks/useIsRtl.js +12 -0
  98. package/dist/cjs/hooks/useNavigator.js +6 -4
  99. package/dist/cjs/hooks/useOverlayService.js +24 -0
  100. package/dist/cjs/hooks/usePropToggle.js +16 -5
  101. package/dist/cjs/hooks/useResize.js +18 -0
  102. package/dist/cjs/hooks/useResizeObserver.js +20 -1
  103. package/dist/cjs/hooks/useStepper.js +75 -0
  104. package/dist/cjs/hooks/useStorage.js +39 -0
  105. package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
  106. package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
  107. package/dist/cjs/index.js +11 -2
  108. package/dist/cjs/overlays/alert/Alert.js +23 -15
  109. package/dist/cjs/overlays/flyout/Flyout.js +48 -64
  110. package/dist/cjs/overlays/message/Message.js +8 -3
  111. package/dist/cjs/overlays/modal/Modal.js +17 -20
  112. package/dist/cjs/overlays/toast/Toast.js +20 -10
  113. package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
  114. package/dist/cjs/types/icons.js +17 -4
  115. package/dist/cjs/typography/Abbr.js +35 -7
  116. package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
  117. package/dist/cjs/typography/Mark.js +25 -5
  118. package/dist/cjs/typography/Text.js +30 -5
  119. package/dist/cjs/typography/Title.js +19 -4
  120. package/dist/cjs/utils/cloneElement.js +47 -0
  121. package/dist/cjs/utils/getColor.js +1 -18
  122. package/dist/esm/components/actionLabel/ActionLabel.js +26 -8
  123. package/dist/esm/components/animations/Animations.js +111 -24
  124. package/dist/esm/components/avatar/Avatar.js +46 -13
  125. package/dist/esm/components/avatar/AvatarGroup.js +22 -4
  126. package/dist/esm/components/badge/Badge.js +38 -17
  127. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +40 -9
  128. package/dist/esm/components/button/Button.js +52 -30
  129. package/dist/esm/components/button/ButtonGroup.js +31 -4
  130. package/dist/esm/components/button/ConfirmButton.js +28 -2
  131. package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
  132. package/dist/esm/components/callout/Callout.js +44 -4
  133. package/dist/esm/components/card/Card.js +61 -19
  134. package/dist/esm/components/card/CardCover.js +36 -5
  135. package/dist/esm/components/card/FlipContent.js +56 -0
  136. package/dist/esm/components/chip/Chip.js +42 -22
  137. package/dist/esm/components/collapsable/Collapsable.js +30 -5
  138. package/dist/esm/components/divider/Divider.js +31 -8
  139. package/dist/esm/components/dropdown/Dropdown.js +48 -9
  140. package/dist/esm/components/dropdown/DropdownTool.js +1 -1
  141. package/dist/esm/components/empty/EmptyContent.js +37 -7
  142. package/dist/esm/components/icon/Icon.js +78 -16
  143. package/dist/esm/components/media/Media.js +173 -76
  144. package/dist/esm/components/menu/ContextMenu.js +19 -0
  145. package/dist/esm/components/menu/Menu.js +78 -23
  146. package/dist/esm/components/menu/MenuItem.js +49 -21
  147. package/dist/esm/components/meter/Meter.js +26 -3
  148. package/dist/esm/components/navigator/Navigator.js +48 -15
  149. package/dist/esm/components/panel/Panel.js +54 -23
  150. package/dist/esm/components/panel/PanelGroup.js +25 -2
  151. package/dist/esm/components/panel/PanelStack.js +31 -2
  152. package/dist/esm/components/progress/ProgressBar.js +31 -9
  153. package/dist/esm/components/progress/ProgressCircle.js +29 -7
  154. package/dist/esm/components/tabpanel/Tab.js +40 -16
  155. package/dist/esm/components/tabpanel/TabPanel.js +56 -16
  156. package/dist/esm/context/Global.js +28 -1
  157. package/dist/esm/context/NotificationCenter.js +3 -3
  158. package/dist/esm/core/aside/Aside.js +49 -23
  159. package/dist/esm/core/boundary/ErrorBoundary.js +25 -8
  160. package/dist/esm/core/boundary/ErrorIcon.js +1 -2
  161. package/dist/esm/core/content/Content.js +7 -3
  162. package/dist/esm/core/headfoot/HeadFoot.js +48 -22
  163. package/dist/esm/core/page/Page.js +41 -40
  164. package/dist/esm/core/responsive/Responsive.js +59 -6
  165. package/dist/esm/core/section/Section.js +12 -29
  166. package/dist/esm/core/theme/ThemeProvider.js +32 -10
  167. package/dist/esm/core/viewport/Viewport.js +18 -2
  168. package/dist/esm/hooks/useControlledValue.js +12 -0
  169. package/dist/esm/hooks/useDebounce.js +14 -1
  170. package/dist/esm/hooks/useEffectDebugger.js +54 -2
  171. package/dist/esm/hooks/useIsDark.js +8 -0
  172. package/dist/esm/hooks/useIsRtl.js +12 -0
  173. package/dist/esm/hooks/useNavigator.js +7 -5
  174. package/dist/esm/hooks/useOverlayService.js +24 -0
  175. package/dist/esm/hooks/usePropToggle.js +16 -5
  176. package/dist/esm/hooks/useResize.js +18 -0
  177. package/dist/esm/hooks/useResizeObserver.js +20 -1
  178. package/dist/esm/hooks/useStepper.js +75 -0
  179. package/dist/esm/hooks/useStorage.js +39 -0
  180. package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
  181. package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
  182. package/dist/esm/index.js +6 -2
  183. package/dist/esm/overlays/alert/Alert.js +24 -16
  184. package/dist/esm/overlays/flyout/Flyout.js +52 -68
  185. package/dist/esm/overlays/message/Message.js +9 -4
  186. package/dist/esm/overlays/modal/Modal.js +19 -22
  187. package/dist/esm/overlays/toast/Toast.js +21 -11
  188. package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
  189. package/dist/esm/types/icons.js +17 -4
  190. package/dist/esm/typography/Abbr.js +35 -7
  191. package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
  192. package/dist/esm/typography/Mark.js +25 -5
  193. package/dist/esm/typography/Text.js +31 -6
  194. package/dist/esm/typography/Title.js +20 -5
  195. package/dist/esm/utils/cloneElement.js +47 -0
  196. package/dist/esm/utils/getColor.js +2 -16
  197. package/dist/types/components/actionLabel/ActionLabel.d.ts +21 -2
  198. package/dist/types/components/animations/Animations.d.ts +84 -5
  199. package/dist/types/components/avatar/Avatar.d.ts +34 -6
  200. package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
  201. package/dist/types/components/badge/Badge.d.ts +37 -3
  202. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
  203. package/dist/types/components/button/Button.d.ts +39 -7
  204. package/dist/types/components/button/ButtonGroup.d.ts +28 -3
  205. package/dist/types/components/button/ConfirmButton.d.ts +23 -3
  206. package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
  207. package/dist/types/components/callout/Callout.d.ts +29 -3
  208. package/dist/types/components/card/Card.d.ts +44 -4
  209. package/dist/types/components/card/CardCover.d.ts +25 -0
  210. package/dist/types/components/card/FlipContent.d.ts +28 -0
  211. package/dist/types/components/chip/Chip.d.ts +34 -5
  212. package/dist/types/components/collapsable/Collapsable.d.ts +28 -2
  213. package/dist/types/components/divider/Divider.d.ts +30 -7
  214. package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
  215. package/dist/types/components/dropdown/DropdownTool.d.ts +25 -0
  216. package/dist/types/components/empty/EmptyContent.d.ts +32 -3
  217. package/dist/types/components/icon/Icon.d.ts +40 -8
  218. package/dist/types/components/index.d.ts +3 -2
  219. package/dist/types/components/media/Media.d.ts +54 -0
  220. package/dist/types/components/menu/ContextMenu.d.ts +19 -1
  221. package/dist/types/components/menu/Menu.d.ts +29 -0
  222. package/dist/types/components/menu/MenuItem.d.ts +22 -2
  223. package/dist/types/components/menu/types.d.ts +9 -3
  224. package/dist/types/components/meter/Meter.d.ts +24 -0
  225. package/dist/types/components/navigator/Navigator.d.ts +29 -4
  226. package/dist/types/components/panel/Panel.d.ts +43 -4
  227. package/dist/types/components/panel/PanelGroup.d.ts +24 -0
  228. package/dist/types/components/panel/PanelStack.d.ts +31 -0
  229. package/dist/types/components/progress/ProgressBar.d.ts +23 -3
  230. package/dist/types/components/progress/ProgressCircle.d.ts +22 -3
  231. package/dist/types/components/tabpanel/Tab.d.ts +38 -4
  232. package/dist/types/components/tabpanel/TabPanel.d.ts +51 -2
  233. package/dist/types/context/Global.d.ts +24 -1
  234. package/dist/types/core/aside/Aside.d.ts +45 -6
  235. package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
  236. package/dist/types/core/content/Content.d.ts +6 -1
  237. package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
  238. package/dist/types/core/page/Page.d.ts +32 -4
  239. package/dist/types/core/responsive/Responsive.d.ts +58 -3
  240. package/dist/types/core/section/Section.d.ts +18 -3
  241. package/dist/types/core/theme/ThemeProvider.d.ts +25 -5
  242. package/dist/types/core/viewport/Viewport.d.ts +15 -1
  243. package/dist/types/hooks/useControlledValue.d.ts +13 -2
  244. package/dist/types/hooks/useDebounce.d.ts +12 -0
  245. package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
  246. package/dist/types/hooks/useIsDark.d.ts +8 -0
  247. package/dist/types/hooks/useIsRtl.d.ts +12 -0
  248. package/dist/types/hooks/useNavigator.d.ts +18 -1
  249. package/dist/types/hooks/useOverlayService.d.ts +28 -9
  250. package/dist/types/hooks/usePropToggle.d.ts +16 -5
  251. package/dist/types/hooks/useResize.d.ts +19 -1
  252. package/dist/types/hooks/useResizeObserver.d.ts +20 -1
  253. package/dist/types/hooks/useStepper.d.ts +14 -0
  254. package/dist/types/hooks/useStorage.d.ts +38 -0
  255. package/dist/types/index.d.ts +4 -0
  256. package/dist/types/overlays/alert/Alert.d.ts +16 -5
  257. package/dist/types/overlays/flyout/Flyout.d.ts +9 -4
  258. package/dist/types/overlays/message/Message.d.ts +16 -5
  259. package/dist/types/overlays/modal/Modal.d.ts +13 -4
  260. package/dist/types/overlays/toast/Toast.d.ts +16 -5
  261. package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
  262. package/dist/types/types/icons.d.ts +17 -3
  263. package/dist/types/types/index.d.ts +20 -22
  264. package/dist/types/typography/Abbr.d.ts +34 -4
  265. package/dist/types/typography/Anchor.d.ts +42 -0
  266. package/dist/types/typography/Copy.d.ts +15 -0
  267. package/dist/types/typography/Mark.d.ts +22 -4
  268. package/dist/types/typography/Text.d.ts +27 -1
  269. package/dist/types/typography/Title.d.ts +16 -1
  270. package/dist/types/typography/index.d.ts +1 -1
  271. package/dist/types/utils/cloneElement.d.ts +1 -0
  272. package/dist/types/utils/getColor.d.ts +1 -4
  273. package/dist/types/utils/index.d.ts +1 -0
  274. package/package.json +14 -16
  275. package/src/components/actionLabel/ActionLabel.tsx +26 -8
  276. package/src/components/animations/Animations.tsx +115 -36
  277. package/src/components/avatar/Avatar.tsx +51 -15
  278. package/src/components/avatar/AvatarGroup.tsx +23 -5
  279. package/src/components/badge/Badge.tsx +50 -22
  280. package/src/components/breadcrumbs/Breadcrumbs.tsx +43 -10
  281. package/src/components/button/Button.tsx +74 -42
  282. package/src/components/button/ButtonGroup.tsx +33 -7
  283. package/src/components/button/ConfirmButton.tsx +31 -3
  284. package/src/components/button/ToggleButtonGroup.tsx +74 -47
  285. package/src/components/callout/Callout.tsx +55 -12
  286. package/src/components/card/Card.tsx +84 -25
  287. package/src/components/card/CardCover.tsx +36 -6
  288. package/src/components/card/FlipContent.tsx +90 -0
  289. package/src/components/chip/Chip.tsx +53 -25
  290. package/src/components/collapsable/Collapsable.tsx +33 -8
  291. package/src/components/divider/Divider.tsx +42 -16
  292. package/src/components/dropdown/Dropdown.tsx +47 -12
  293. package/src/components/dropdown/DropdownTool.tsx +27 -2
  294. package/src/components/empty/EmptyContent.tsx +49 -8
  295. package/src/components/icon/Icon.tsx +96 -18
  296. package/src/components/index.ts +3 -2
  297. package/src/components/media/Media.tsx +193 -104
  298. package/src/components/menu/ContextMenu.tsx +19 -0
  299. package/src/components/menu/Menu.tsx +87 -30
  300. package/src/components/menu/MenuItem.tsx +44 -19
  301. package/src/components/menu/types.ts +9 -8
  302. package/src/components/meter/Meter.tsx +27 -4
  303. package/src/components/navigator/Navigator.tsx +58 -9
  304. package/src/components/panel/Panel.tsx +53 -21
  305. package/src/components/panel/PanelGroup.tsx +25 -2
  306. package/src/components/panel/PanelStack.tsx +33 -2
  307. package/src/components/progress/ProgressBar.tsx +33 -14
  308. package/src/components/progress/ProgressCircle.tsx +29 -13
  309. package/src/components/tabpanel/Tab.tsx +47 -24
  310. package/src/components/tabpanel/TabPanel.tsx +79 -13
  311. package/src/context/Global.tsx +28 -1
  312. package/src/context/NotificationCenter.tsx +3 -3
  313. package/src/core/aside/Aside.tsx +56 -34
  314. package/src/core/boundary/ErrorBoundary.tsx +26 -8
  315. package/src/core/boundary/ErrorIcon.tsx +1 -2
  316. package/src/core/content/Content.tsx +7 -3
  317. package/src/core/headfoot/HeadFoot.tsx +44 -37
  318. package/src/core/page/Page.tsx +42 -20
  319. package/src/core/responsive/Responsive.tsx +66 -8
  320. package/src/core/section/Section.tsx +26 -4
  321. package/src/core/theme/ThemeProvider.tsx +35 -14
  322. package/src/core/viewport/Viewport.tsx +16 -3
  323. package/src/hooks/useControlledValue.tsx +12 -0
  324. package/src/hooks/useDebounce.ts +13 -1
  325. package/src/hooks/useEffectDebugger.ts +50 -2
  326. package/src/hooks/useIsDark.ts +8 -0
  327. package/src/hooks/useIsRtl.ts +12 -0
  328. package/src/hooks/useNavigator.tsx +28 -5
  329. package/src/hooks/useOverlayService.tsx +33 -8
  330. package/src/hooks/usePropToggle.ts +16 -5
  331. package/src/hooks/useResize.ts +19 -1
  332. package/src/hooks/useResizeObserver.ts +32 -9
  333. package/src/hooks/useStepper.tsx +68 -0
  334. package/src/hooks/useStorage.ts +38 -0
  335. package/src/hotkeys/HotKeyLabel.tsx +1 -1
  336. package/src/hotkeys/HotKeyWrapper.tsx +3 -1
  337. package/src/index.ts +5 -0
  338. package/src/overlays/alert/Alert.tsx +50 -34
  339. package/src/overlays/flyout/Flyout.tsx +73 -97
  340. package/src/overlays/message/Message.tsx +28 -9
  341. package/src/overlays/modal/Modal.tsx +36 -30
  342. package/src/overlays/toast/Toast.tsx +42 -30
  343. package/src/overlays/tooltip/Tooltip.tsx +43 -18
  344. package/src/types/global.d.ts +8 -0
  345. package/src/types/icons.ts +32 -6
  346. package/src/types/index.ts +261 -45
  347. package/src/typography/Abbr.tsx +45 -11
  348. package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
  349. package/src/typography/Copy.tsx +15 -0
  350. package/src/typography/Mark.tsx +25 -10
  351. package/src/typography/Text.tsx +31 -13
  352. package/src/typography/Title.tsx +18 -7
  353. package/src/typography/index.ts +1 -1
  354. package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
  355. package/src/utils/getColor.ts +1 -17
  356. package/src/utils/index.ts +1 -0
  357. package/css/index.js +0 -250
  358. package/css/tailwind/colors.ts +0 -158
  359. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  360. package/dist/cjs/components/animations/Animations.module.css +0 -1
  361. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  362. package/dist/cjs/components/badge/Badge.module.css +0 -1
  363. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  364. package/dist/cjs/components/button/Button.module.css +0 -1
  365. package/dist/cjs/components/card/Card.module.css +0 -1
  366. package/dist/cjs/components/chip/Chip.module.css +0 -1
  367. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  368. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  369. package/dist/cjs/components/icon/Icon.module.css +0 -1
  370. package/dist/cjs/components/media/Media.module.css +0 -1
  371. package/dist/cjs/components/menu/Menu.module.css +0 -1
  372. package/dist/cjs/components/meter/Meter.module.css +0 -1
  373. package/dist/cjs/components/panel/Panel.module.css +0 -1
  374. package/dist/cjs/components/progress/Progress.module.css +0 -1
  375. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  376. package/dist/cjs/core/aside/Aside.module.css +0 -1
  377. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  378. package/dist/cjs/core/content/Content.module.css +0 -1
  379. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  380. package/dist/cjs/core/page/Page.module.css +0 -1
  381. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  382. package/dist/cjs/core/section/Section.module.css +0 -1
  383. package/dist/cjs/core/theme/Theme.module.css +0 -1
  384. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  385. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  386. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  387. package/dist/cjs/overlays/message/Message.module.css +0 -1
  388. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  389. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  390. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  391. package/dist/cjs/typography/Typography.module.css +0 -1
  392. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  393. package/dist/esm/components/animations/Animations.module.css +0 -1
  394. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  395. package/dist/esm/components/badge/Badge.module.css +0 -1
  396. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  397. package/dist/esm/components/button/Button.module.css +0 -1
  398. package/dist/esm/components/card/Card.module.css +0 -1
  399. package/dist/esm/components/chip/Chip.module.css +0 -1
  400. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  401. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  402. package/dist/esm/components/icon/Icon.module.css +0 -1
  403. package/dist/esm/components/media/Media.module.css +0 -1
  404. package/dist/esm/components/menu/Menu.module.css +0 -1
  405. package/dist/esm/components/meter/Meter.module.css +0 -1
  406. package/dist/esm/components/panel/Panel.module.css +0 -1
  407. package/dist/esm/components/progress/Progress.module.css +0 -1
  408. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  409. package/dist/esm/core/aside/Aside.module.css +0 -1
  410. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  411. package/dist/esm/core/content/Content.module.css +0 -1
  412. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  413. package/dist/esm/core/page/Page.module.css +0 -1
  414. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  415. package/dist/esm/core/section/Section.module.css +0 -1
  416. package/dist/esm/core/theme/Theme.module.css +0 -1
  417. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  418. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  419. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  420. package/dist/esm/overlays/message/Message.module.css +0 -1
  421. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  422. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  423. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  424. package/dist/esm/typography/Typography.module.css +0 -1
  425. package/dist/types/typography/Link.d.ts +0 -25
@@ -30,6 +30,32 @@ export interface TextProps extends ChildrenProp, CssProp, AriaProps, TestProps {
30
30
  clamp?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
31
31
  }
32
32
  /**
33
- * Typography text component
33
+ * A component that renders text with various styles, supports line clamping, and provides a "show more" link if the text is clipped.
34
+ * It can be rendered as an inline element or a block element, and allows customization of background color, text color, font size, font family, and text alignment.
35
+ * It also supports line clamping to limit the number of visible lines, and provides a toggle to show more or less text when the content exceeds the specified clamp.
36
+ * The component uses a combination of CSS and JavaScript to achieve the desired effects, ensuring a smooth user experience.
37
+ * It leverages the ResizeObserver API to detect changes in the text container's size and adjust the line clamping accordingly.
38
+ *
39
+ * @param {TextProps} props - The properties for the Text component.
40
+ * @returns {JSX.Element} The rendered Text component.
41
+ *
42
+ * @example
43
+ * ```jsx
44
+ * <Text
45
+ * inline={false}
46
+ * bg="bg-gray-100"
47
+ * color="text-gray-800"
48
+ * size="md"
49
+ * family="sans"
50
+ * clamp={2}
51
+ * align="start"
52
+ * >
53
+ * This is a sample text that demonstrates the Text component with various styles applied.
54
+ * </Text>
55
+ * // Renders a block-level text with gray background, dark gray text, medium font size,
56
+ * // sans-serif font family, clamped to 2 lines, and left-aligned.
57
+ * ```
58
+ *
59
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-typography--text} for more details.
34
60
  */
35
61
  export declare const Text: ({ children, className, inline, bg, color, family, size, clamp, align, ...aria }: TextProps) => import("react/jsx-runtime").JSX.Element;
@@ -24,6 +24,21 @@ export interface TitleProps extends ChildrenProp, CssProp, AriaProps {
24
24
  align?: "start" | "end" | "center" | "justify";
25
25
  }
26
26
  /**
27
- * Typography title component
27
+ * A component that renders a title with customizable styles such as background color, text color, size, alignment, and font family.
28
+ * It can be rendered as different HTML elements based on the `as` prop.
29
+ * This component is useful for creating headings or titles in a consistent style across an application.
30
+ *
31
+ * @param {TitleProps} props - The properties for the Title component.
32
+ * @returns {JSX.Element} The rendered Title component.
33
+ *
34
+ * @example
35
+ * ```jsx
36
+ * <Title as="h1" bg="blue-500" color="white" size="2xl" align="center">
37
+ * This is a Title
38
+ * </Title>
39
+ * // Renders a title as an h1 element with a blue background, white text color, size of 2xl, and centered alignment.
40
+ * ```
41
+ *
42
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-typography--title} for more details.
28
43
  */
29
44
  export declare const Title: ({ children, className, as, bg, color, size, align, family, ...aria }: TitleProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  export { Abbr } from "./Abbr";
2
+ export { Anchor } from "./Anchor";
2
3
  export { Copy } from "./Copy";
3
- export { Link } from "./Link";
4
4
  export { Mark } from "./Mark";
5
5
  export { Text } from "./Text";
6
6
  export { Title } from "./Title";
@@ -0,0 +1 @@
1
+ export declare const cloneChildren: (children: React.ReactNode, callback: (child: React.ReactNode, index: number) => React.ReactNode) => React.ReactNode;
@@ -1,4 +1 @@
1
- export declare const getColor: (color: string) => string | undefined;
2
- export declare const getBgClass: (bg: string) => string | undefined;
3
- export declare const getColorClass: (color: string) => string | undefined;
4
- export declare const getBorderClass: (color: string) => string | undefined;
1
+ export declare const getColor: (color: string) => string;
@@ -1,3 +1,4 @@
1
1
  export * from "./calculateDimensions";
2
+ export * from "./cloneElement";
2
3
  export * from "./getColor";
3
4
  export * from "./nodeCheck";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-fabric/core",
3
- "version": "1.0.0-beta.6",
3
+ "version": "1.0.0-beta.60",
4
4
  "description": "RUF: Core package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
@@ -35,26 +35,24 @@
35
35
  "watch": "npm-run-all -p watch:rollup watch:dts"
36
36
  },
37
37
  "dependencies": {
38
- "@floating-ui/react": "^0.26.24",
39
- "@react-fabric/utilities": "^1.0.0-beta.6",
40
- "@tailwindcss/container-queries": "^0.1.1",
41
- "@tailwindcss/forms": "^0.5.7",
42
- "@tailwindcss/typography": "^0.5.13",
43
- "boring-avatars": "^1.10.2",
44
- "classnames": "^2.5.1",
45
- "color": "^4.2.3",
46
- "resize-observer-polyfill": "^1.5.1",
47
- "tailwindcss": "^3.4.4"
38
+ "@floating-ui/react": "~0.27.16",
39
+ "@react-fabric/utilities": "^1.0.0-beta.60",
40
+ "@tailwindcss/postcss": "~4.1.16",
41
+ "boring-avatars": "~1.11.2",
42
+ "classnames": "~2.5.1",
43
+ "color": "~5.0.2",
44
+ "resize-observer-polyfill": "~1.5.1",
45
+ "tailwindcss": "~4.1.16"
48
46
  },
49
47
  "peerDependencies": {
50
- "i18next": "^23.15.1",
51
- "react": ">=18.0.0 <20.0.0",
52
- "react-dom": ">=18.0.0 <20.0.0",
53
- "react-i18next": "^15.0.2"
48
+ "i18next": "~25.6.0",
49
+ "react": "~19.2.0",
50
+ "react-dom": "~19.2.0",
51
+ "react-i18next": "~16.2.1"
54
52
  },
55
53
  "engines": {
56
54
  "node": ">=18.12.0",
57
55
  "npm": ">=8.19.0"
58
56
  },
59
- "gitHead": "21167df13cedeae8b365e87b9bab6d7401298cb6"
57
+ "gitHead": "a79f053ee7e13422c06d7d9c35d4f0c2610cdf5d"
60
58
  }
@@ -30,7 +30,6 @@ import {
30
30
  type TestProps,
31
31
  } from "../../types";
32
32
  import { ButtonGroup } from "../button/ButtonGroup";
33
- import classes from "./ActionLabel.module.css";
34
33
 
35
34
  export interface ActionLabelProps
36
35
  extends AriaProps,
@@ -52,8 +51,27 @@ export interface ActionLabelProps
52
51
  }
53
52
 
54
53
  /**
55
- * A simple label component with additional actions (like a button or icon) that becomes visible only when the user hovers over the label,
56
- * useful in interfaces where space is limited or where it's important to keep the UI clean and focused
54
+ * A label with action buttons that can be aligned to the start or end.
55
+ * This component is useful for displaying a label with associated actions, such as buttons, that can be aligned based on the design requirements.
56
+ * It automatically calculates the width of the action buttons to ensure that the label text does not overflow the container.
57
+ * It uses CSS variables to manage the width of the label text dynamically based on the action buttons' width.
58
+ * This component is designed to be flexible and can be used in various contexts where a label with actions is needed.
59
+ * It supports custom alignment, disabled states, and can be easily styled with additional CSS classes.
60
+ *
61
+ * @param {ActionLabelProps} props - The properties for the ActionLabel component.
62
+ * @returns {JSX.Element} The rendered ActionLabel component.
63
+ *
64
+ * @example
65
+ * ```jsx
66
+ * <ActionLabel
67
+ * actions={[<Button>Action 1</Button>, <Button>Action 2</Button>]}
68
+ * align="end"
69
+ * >
70
+ * Label Text
71
+ * </ActionLabel>
72
+ * ```
73
+ *
74
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-action-label--docs} for more details.
57
75
  */
58
76
  export const ActionLabel = ({
59
77
  children,
@@ -63,9 +81,8 @@ export const ActionLabel = ({
63
81
  disabled,
64
82
  ...rest
65
83
  }: ActionLabelProps) => {
66
- /**
67
- * calculate the width of the action box, width will be used for a delayed transition on hover
68
- */
84
+ // Calculate the width of the action buttons to set a CSS variable
85
+ // This is used to ensure the label text does not overflow the container
69
86
  const calculateBasis = useCallback((el: HTMLElement | null) => {
70
87
  if (el) {
71
88
  const clone = el.cloneNode(true) as HTMLElement;
@@ -84,7 +101,7 @@ export const ActionLabel = ({
84
101
  <div
85
102
  className={classNames(
86
103
  className,
87
- classes.actionLabel,
104
+ "fabric-actionLabel",
88
105
  "flex overflow-hidden gap-1 items-center cursor-default select-none",
89
106
  )}
90
107
  data-disabled={disabled}
@@ -92,8 +109,9 @@ export const ActionLabel = ({
92
109
  >
93
110
  <ButtonGroup
94
111
  ref={calculateBasis}
112
+ data-inner-clickable
95
113
  className={classNames(
96
- classes.actions,
114
+ "fabric-actions",
97
115
  "overflow-hidden flex-content",
98
116
  align === "end" && "order-2",
99
117
  )}
@@ -30,21 +30,42 @@ import {
30
30
  type CssProp,
31
31
  type PaletteType,
32
32
  } from "../../types";
33
- import { getColor, getColorClass } from "../../utils";
34
- import classes from "./Animations.module.css";
33
+ import { getColor } from "../../utils";
35
34
 
36
35
  export interface AnimationProps extends CssProp, AriaProps {
37
36
  type?: "info" | "check" | "cross" | "question" | "exclaim";
38
37
  /**
39
38
  * icon color
40
39
  */
41
- color?: ColorType | PaletteType;
40
+ color?: ColorType | PaletteType | string;
42
41
  /**
43
42
  * icon mark color
44
43
  */
45
- strokeColor?: ColorType | PaletteType;
44
+ strokeColor?: ColorType | PaletteType | string;
46
45
  }
47
46
 
47
+ /**
48
+ * A component that displays an animated indicator with a customizable icon type and colors.
49
+ * It can be used to indicate various states such as success, error, or information.
50
+ * The component supports different icon types like check, cross, question, and exclamation.
51
+ * It also allows customization of the icon color and stroke color.
52
+ *
53
+ * @param {AnimationProps} props - The properties for the AnimationIndicator component.
54
+ * @returns {JSX.Element} The rendered AnimationIndicator component.
55
+ *
56
+ * @example
57
+ * ```jsx
58
+ * <AnimationIndicator
59
+ * type="check"
60
+ * color="primary-500"
61
+ * strokeColor="primary-700"
62
+ * className="my-custom-class"
63
+ * aria-label="Loading"
64
+ * />
65
+ * ```
66
+ *
67
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
68
+ */
48
69
  export const AnimationIndicator = ({
49
70
  className,
50
71
  color,
@@ -80,10 +101,9 @@ export const AnimationIndicator = ({
80
101
  <svg
81
102
  data-ref="animated-indicator"
82
103
  className={classNames(
83
- classes.checkAnimation,
104
+ "fabric-checkAnimation",
84
105
  className,
85
106
  "inline-block rounded-full",
86
- color && getColorClass(color),
87
107
  )}
88
108
  style={styles}
89
109
  xmlns="http://www.w3.org/2000/svg"
@@ -91,23 +111,42 @@ export const AnimationIndicator = ({
91
111
  aria-hidden="true"
92
112
  {...aria}
93
113
  >
94
- <circle className={classes.circlePart} cx="26" cy="26" r="25" />
114
+ <circle className={"fabric-circlePart"} cx="26" cy="26" r="25" />
95
115
  <path
96
- className={classNames(
97
- classes.iconPart,
98
- getColorClass(strokeColor ?? "invert"),
99
- )}
116
+ className={classNames("fabric-iconPart")}
117
+ style={{
118
+ color: strokeColor
119
+ ? getColor(strokeColor)
120
+ : "var(--text-color-invert)",
121
+ }}
100
122
  d={path}
101
123
  />
102
124
  </svg>
103
125
  );
104
126
  };
105
127
 
128
+ /**
129
+ * A component that displays an animated bars loader.
130
+ * It can be customized with color and size properties.
131
+ * This component is typically used to indicate loading states in the UI.
132
+ *
133
+ * @param {Object} props - The properties for the AnimationBars component.
134
+ * @param {ColorType | PaletteType | string} [props.color="tint-500"] - The color of the bars.
135
+ * @param {number | string} [props.size="2rem"] - The size of the bars.
136
+ * @returns {JSX.Element} The rendered AnimationBars component.
137
+ *
138
+ * @example
139
+ * ```jsx
140
+ * <AnimationBars color="primary-500" size="3rem" />
141
+ * ```
142
+ *
143
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
144
+ */
106
145
  export const AnimationBars = ({
107
- color = "tint",
146
+ color = "tint-500",
108
147
  size = "2rem",
109
148
  }: {
110
- color?: ColorType | string;
149
+ color?: ColorType | PaletteType | string;
111
150
  size?: number | string;
112
151
  }) => {
113
152
  return (
@@ -118,23 +157,40 @@ export const AnimationBars = ({
118
157
  >
119
158
  <div
120
159
  className={classNames(
121
- "outline outline-tint-500/20 p-4 bg-base/50 backdrop-blur-sm rounded",
160
+ "outline outline-tint-500/20 p-4 bg-tint-50/50 backdrop-blur-sm rounded",
122
161
  )}
123
162
  >
124
163
  <div
125
- className={classNames(classes.bars, getColorClass(color + "-500/50"))}
126
- style={{ width: size }}
164
+ className={classNames("fabric-bars")}
165
+ style={{ width: size, color: getColor(color) }}
127
166
  />
128
167
  </div>
129
168
  </div>
130
169
  );
131
170
  };
132
171
 
172
+ /**
173
+ * A component that displays a spinner animation.
174
+ * It can be customized with color and size properties.
175
+ * This component is typically used to indicate loading states in the UI.
176
+ *
177
+ * @param {Object} props - The properties for the AnimationSpinner component.
178
+ * @param {ColorType | PaletteType | string} [props.color="tint-700"] - The color of the spinner.
179
+ * @param {number | string} [props.size="2rem"] - The size of the spinner.
180
+ * @returns {JSX.Element} The rendered AnimationSpinner component.
181
+ *
182
+ * @example
183
+ * ```jsx
184
+ * <AnimationSpinner color="primary-500" size="3rem" />
185
+ * ```
186
+ *
187
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
188
+ */
133
189
  export const AnimationSpinner = ({
134
190
  color = "tint-700",
135
191
  size = "2rem",
136
192
  }: {
137
- color?: ColorType | string;
193
+ color?: ColorType | PaletteType | string;
138
194
  size?: number | string;
139
195
  }) => {
140
196
  return (
@@ -142,41 +198,44 @@ export const AnimationSpinner = ({
142
198
  className={classNames(
143
199
  "absolute inset-0 z-10 flex justify-center items-center cursor-wait",
144
200
  )}
145
- data-testid="spinner"
201
+ data-ref="spinner"
146
202
  >
147
203
  <div
148
204
  className={classNames(
149
- "outline outline-tint-500/20 p-4 bg-base/50 backdrop-blur-sm rounded",
205
+ "outline outline-tint-500/20 p-4 bg-tint-50/50 backdrop-blur-sm rounded",
150
206
  )}
151
207
  >
152
208
  <div
153
- className={classNames(classes.spinner, getColorClass(color))}
154
- style={{ width: size }}
209
+ className={classNames("fabric-spinner")}
210
+ style={{ width: size, color: getColor(color) }}
155
211
  />
156
212
  </div>
157
213
  </div>
158
214
  );
159
215
  };
160
216
 
161
- export const Loading = () => {
162
- return (
163
- <div
164
- className={classNames(
165
- classes.loader,
166
- "area-[loader] relative overflow-x-clip",
167
- )}
168
- data-testid="loading"
169
- >
170
- <div className="absolute z-10 py-px inset-x-0 top-0 after:h-0.5 after:block after:bg-primary-500" />
171
- </div>
172
- );
173
- };
174
-
217
+ /**
218
+ * A component that displays a skeleton loader with a placeholder for content.
219
+ * It can be customized with color and size properties.
220
+ * This component is typically used to indicate loading states in the cards, panels and virtual lists,
221
+ * providing a visual placeholder for content that is being loaded.
222
+ *
223
+ * @param {CssProp} props - The properties for the Skeleton component.
224
+ * @returns {JSX.Element} The rendered Skeleton component.
225
+ *
226
+ * @example
227
+ * ```jsx
228
+ * <Skeleton className="my-skeleton" />
229
+ * * // Renders a skeleton loader with a placeholder for content.
230
+ * ```
231
+ *
232
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
233
+ */
175
234
  export const Skeleton = ({ className, ...rest }: CssProp) => {
176
235
  return (
177
236
  <div
178
237
  className={classNames(className, "p-2 animate-pulse flex gap-2 max-w-lg")}
179
- data-testid="skeleton"
238
+ data-ref="skeleton"
180
239
  {...rest}
181
240
  >
182
241
  <div className="bg-tint-100 rounded aspect-square h-12" />
@@ -194,3 +253,23 @@ export const Skeleton = ({ className, ...rest }: CssProp) => {
194
253
  </div>
195
254
  );
196
255
  };
256
+
257
+ /**
258
+ * A component that displays a loading animation with a top border.
259
+ * It is typically used to indicate that content is being loaded in pages and page sections.
260
+ *
261
+ * @returns {JSX.Element} The rendered Loading component.
262
+ */
263
+ export const Loading = () => {
264
+ return (
265
+ <div
266
+ className={classNames(
267
+ "fabric-loader",
268
+ "area-[loader] relative overflow-x-clip",
269
+ )}
270
+ data-ref="loading"
271
+ >
272
+ <div className="absolute z-10 py-px inset-x-0 top-0 after:h-0.5 after:block after:bg-primary-500" />
273
+ </div>
274
+ );
275
+ };
@@ -26,6 +26,7 @@ import BoringAvatar from "boring-avatars";
26
26
  import classNames from "classnames";
27
27
  import { useMemo, useState } from "react";
28
28
  import {
29
+ type PaletteType,
29
30
  type AriaProps,
30
31
  type ColorType,
31
32
  type CssProp,
@@ -33,8 +34,7 @@ import {
33
34
  type SizeType,
34
35
  type TestProps,
35
36
  } from "../../types";
36
- import { getBgClass, getColor, getColorClass } from "../../utils";
37
- import classes from "./Avatar.module.css";
37
+ import { getColor } from "../../utils";
38
38
 
39
39
  export interface AvatarProps extends CssProp, AriaProps, TestProps, RefProp {
40
40
  /**
@@ -56,11 +56,11 @@ export interface AvatarProps extends CssProp, AriaProps, TestProps, RefProp {
56
56
  /**
57
57
  * background color (CSS color / tailwind color)
58
58
  */
59
- bg?: ColorType | string;
59
+ bg?: ColorType | PaletteType | string;
60
60
  /**
61
61
  * icon color (CSS color / tailwind color)
62
62
  */
63
- color?: ColorType | string;
63
+ color?: ColorType | PaletteType | string;
64
64
  /**
65
65
  * icon size
66
66
  */
@@ -73,6 +73,10 @@ export interface AvatarProps extends CssProp, AriaProps, TestProps, RefProp {
73
73
  * rounded icon
74
74
  */
75
75
  rounded?: boolean;
76
+ /**
77
+ * prevent click default, useful when component is within a `a` link
78
+ */
79
+ preventDefault?: boolean;
76
80
  /**
77
81
  * click handler
78
82
  */
@@ -88,7 +92,32 @@ const SizeMap: KeyValue<string> = {
88
92
  };
89
93
 
90
94
  /**
91
- * An avatar is a graphical representation of a user's identity.
95
+ * A component that displays an avatar image or a fallback icon with customizable styles and properties.
96
+ * It supports various avatar types, including text-based avatars, and allows for customization of background color, icon color, size, and rounded corners.
97
+ * This component is useful for displaying user avatars in applications, providing a visual representation of users or entities.
98
+ * It can also handle cases where the avatar image fails to load by displaying a fallback icon or text.
99
+ * It uses the Boring Avatars library for generating fallback avatars based on the user's name.
100
+ *
101
+ * @param {AvatarProps} props - The properties for the Avatar component.
102
+ * @returns {JSX.Element} The rendered Avatar component.
103
+ *
104
+ * @example
105
+ * ```jsx
106
+ * <Avatar
107
+ * name="John Doe"
108
+ * avatar="https://example.com/avatar.jpg"
109
+ * fallbackIcon="fas fa-user"
110
+ * bg="bg-blue-500"
111
+ * color="text-white"
112
+ * size="md"
113
+ * rounded
114
+ * variant="beam"
115
+ * onClick={() => console.log("Avatar clicked")}
116
+ * />
117
+ * ```
118
+ *
119
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-avatar--docs} for more details.
120
+ * @see {@link https://boringavatars.com/} for more information on Boring Avatars.
92
121
  */
93
122
  export const Avatar = ({
94
123
  ref,
@@ -102,12 +131,14 @@ export const Avatar = ({
102
131
  variant = "beam",
103
132
  className,
104
133
  viewBox = "0 0 24 24",
134
+ preventDefault,
105
135
  onClick,
106
136
  ...aria
107
137
  }: AvatarProps) => {
108
138
  const [fallback, setFallback] = useState(true);
109
139
 
110
- /** ***************** style map *******************/
140
+ // Memoize styles to avoid unnecessary recalculations
141
+ // and to ensure styles are only recalculated when dependencies change
111
142
  const styles = useMemo(() => {
112
143
  const s: KeyValue = {};
113
144
  if (bg) {
@@ -125,7 +156,8 @@ export const Avatar = ({
125
156
  return s;
126
157
  }, [bg, color, size]);
127
158
 
128
- /** ***************** render icon *******************/
159
+ // avatar image
160
+ // if avatar is not provided, fallback to icon or text
129
161
  const avatarImage = useMemo(() => {
130
162
  setFallback(!avatar);
131
163
  return (
@@ -133,7 +165,7 @@ export const Avatar = ({
133
165
  <div className="contents">
134
166
  <div
135
167
  className={classNames(
136
- classes.imgPlaceholder,
168
+ "fabric-imgPlaceholder",
137
169
  "absolute inset-0 bg-gray animate-pulse",
138
170
  )}
139
171
  />
@@ -149,10 +181,11 @@ export const Avatar = ({
149
181
  );
150
182
  }, [avatar]);
151
183
 
184
+ // render fallback icon or text
152
185
  const fallbackAvatar = useMemo(() => {
153
186
  if (fallbackIcon) {
154
187
  return isSvgPath(fallbackIcon) ? (
155
- <svg viewBox={viewBox}>
188
+ <svg viewBox={viewBox} className="p-[0.125em]">
156
189
  <path fill="currentColor" d={fallbackIcon.toString()} />
157
190
  </svg>
158
191
  ) : (
@@ -160,8 +193,9 @@ export const Avatar = ({
160
193
  );
161
194
  }
162
195
  if (variant === "text") {
163
- const [, first, second, group] =
164
- name.match(/(?=(\w).* (\w).*)|(?=(\w\w).*)/) ?? [];
196
+ const [, first, second, group] = name.match(
197
+ /(?=(\w).* (\w).*)|(?=(\w\w).*)/,
198
+ ) as string[];
165
199
  return (
166
200
  <svg role="img">
167
201
  <text
@@ -177,6 +211,7 @@ export const Avatar = ({
177
211
  </svg>
178
212
  );
179
213
  }
214
+ // Fallback to BoringAvatar
180
215
  return <BoringAvatar square size={64} variant={variant} name={name} />;
181
216
  }, [name, variant, fallbackIcon]);
182
217
 
@@ -184,15 +219,16 @@ export const Avatar = ({
184
219
  <dfn
185
220
  role="presentation"
186
221
  className={classNames(
187
- classes.avatar,
222
+ "fabric-avatar",
188
223
  className,
189
224
  "select-none relative overflow-hidden inline-block box-content leading-none not-italic text-center",
190
- bg && getBgClass(bg),
191
- color && getColorClass(color),
192
225
  !rounded && "rounded",
193
226
  rounded && "rounded-full",
194
227
  )}
195
- onClick={onClick}
228
+ onClick={(e) => {
229
+ preventDefault && e.preventDefault();
230
+ onClick?.(e);
231
+ }}
196
232
  style={styles}
197
233
  data-clickable={!!onClick}
198
234
  ref={ref}
@@ -31,7 +31,6 @@ import {
31
31
  type SizeType,
32
32
  } from "../../types";
33
33
  import { type AvatarProps } from "./Avatar";
34
- import classes from "./Avatar.module.css";
35
34
 
36
35
  type AvatarChild =
37
36
  | ReactElement<Omit<AvatarProps, "size" | "rounded">>
@@ -63,7 +62,25 @@ const SizeMap: KeyValue<string> = {
63
62
  };
64
63
 
65
64
  /**
66
- * Group multiple avatars together
65
+ * A component that groups multiple avatars together, displaying a count of additional avatars if the total exceeds the visible ones.
66
+ * It allows customization of size, rounding, and additional aria attributes.
67
+ * This component is useful for displaying a collection of user avatars in a compact format, such as in a chat application or user list.
68
+ * It automatically calculates the number of additional avatars based on the `totalCount` prop and the number of children provided.
69
+ *
70
+ * @param {AvatarGroupProps} props - The properties for the AvatarGroup component.
71
+ * @returns {JSX.Element} The rendered AvatarGroup component.
72
+ *
73
+ * @example
74
+ * ```jsx
75
+ * <AvatarGroup totalCount={5} size="md" className="my-avatar-group">
76
+ * <Avatar name="John Doe" avatar="https://example.com/avatar1.jpg" />
77
+ * <Avatar name="Jane Smith" avatar="https://example.com/avatar2.jpg" />
78
+ * <Avatar name="Alice Johnson" avatar="https://example.com/avatar3.jpg" />
79
+ * <Avatar name="Bob Brown" avatar="https://example.com/avatar4.jpg" />
80
+ * </AvatarGroup>
81
+ * ```
82
+ *
83
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-avatar--docs} for more details.
67
84
  */
68
85
  export const AvatarGroup = ({
69
86
  ref,
@@ -104,7 +121,7 @@ export const AvatarGroup = ({
104
121
  {...aria}
105
122
  ref={ref as AnyObject}
106
123
  className={classNames(
107
- classes.avatarGroup,
124
+ "fabric-avatarGroup",
108
125
  className,
109
126
  "inline-flex flex-nowrap",
110
127
  !rounded && "rounded",
@@ -115,10 +132,11 @@ export const AvatarGroup = ({
115
132
  {avatars}
116
133
  {!!diff && (
117
134
  <dfn
135
+ data-ref="avatarCount"
118
136
  className={classNames(
119
- classes.avatar,
137
+ "fabric-avatar",
120
138
  "select-none relative overflow-hidden inline-block box-content leading-none not-italic text-center",
121
- classes.extra,
139
+ "fabric-avatarGroup--extra",
122
140
  )}
123
141
  >
124
142
  <svg>