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

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 (429) 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} +86 -84
  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} +12 -9
  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 +9 -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 +137 -45
  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 +51 -29
  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 +47 -7
  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 +32 -8
  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 +2 -3
  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 +174 -76
  69. package/dist/cjs/components/menu/ContextMenu.js +19 -0
  70. package/dist/cjs/components/menu/Menu.js +77 -23
  71. package/dist/cjs/components/menu/MenuItem.js +54 -27
  72. package/dist/cjs/components/meter/Meter.js +26 -3
  73. package/dist/cjs/components/navigator/Navigator.js +50 -18
  74. package/dist/cjs/components/panel/Panel.js +59 -28
  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 -16
  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 +50 -25
  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 +41 -40
  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 +74 -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 +14 -10
  108. package/dist/cjs/overlays/alert/Alert.js +24 -17
  109. package/dist/cjs/overlays/flyout/Flyout.js +48 -65
  110. package/dist/cjs/overlays/message/Message.js +8 -3
  111. package/dist/cjs/overlays/modal/Modal.js +19 -23
  112. package/dist/cjs/overlays/toast/Toast.js +22 -13
  113. package/dist/cjs/overlays/tooltip/Tooltip.js +25 -13
  114. package/dist/cjs/typography/Abbr.js +35 -7
  115. package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
  116. package/dist/cjs/typography/Copy.js +1 -2
  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 +135 -44
  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 +53 -31
  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 +47 -7
  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 +32 -8
  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 +2 -3
  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 +175 -77
  144. package/dist/esm/components/menu/ContextMenu.js +19 -0
  145. package/dist/esm/components/menu/Menu.js +79 -25
  146. package/dist/esm/components/menu/MenuItem.js +49 -22
  147. package/dist/esm/components/meter/Meter.js +26 -3
  148. package/dist/esm/components/navigator/Navigator.js +50 -18
  149. package/dist/esm/components/panel/Panel.js +61 -30
  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 -17
  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 +52 -27
  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 +43 -42
  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 +74 -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 +7 -4
  183. package/dist/esm/overlays/alert/Alert.js +25 -18
  184. package/dist/esm/overlays/flyout/Flyout.js +53 -70
  185. package/dist/esm/overlays/message/Message.js +9 -4
  186. package/dist/esm/overlays/modal/Modal.js +22 -26
  187. package/dist/esm/overlays/toast/Toast.js +23 -14
  188. package/dist/esm/overlays/tooltip/Tooltip.js +25 -13
  189. package/dist/esm/typography/Abbr.js +35 -7
  190. package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
  191. package/dist/esm/typography/Copy.js +1 -2
  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 +105 -7
  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 -1
  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/index.d.ts +28 -24
  263. package/dist/types/typography/Abbr.d.ts +34 -4
  264. package/dist/types/typography/Anchor.d.ts +42 -0
  265. package/dist/types/typography/Copy.d.ts +15 -0
  266. package/dist/types/typography/Mark.d.ts +22 -4
  267. package/dist/types/typography/Text.d.ts +27 -1
  268. package/dist/types/typography/Title.d.ts +16 -1
  269. package/dist/types/typography/index.d.ts +1 -1
  270. package/dist/types/utils/cloneElement.d.ts +1 -0
  271. package/dist/types/utils/getColor.d.ts +1 -4
  272. package/dist/types/utils/index.d.ts +1 -0
  273. package/package.json +17 -16
  274. package/src/components/actionLabel/ActionLabel.tsx +26 -8
  275. package/src/components/animations/Animations.tsx +139 -52
  276. package/src/components/avatar/Avatar.tsx +51 -15
  277. package/src/components/avatar/AvatarGroup.tsx +23 -5
  278. package/src/components/badge/Badge.tsx +50 -22
  279. package/src/components/breadcrumbs/Breadcrumbs.tsx +43 -10
  280. package/src/components/button/Button.tsx +75 -43
  281. package/src/components/button/ButtonGroup.tsx +33 -7
  282. package/src/components/button/ConfirmButton.tsx +31 -3
  283. package/src/components/button/ToggleButtonGroup.tsx +74 -47
  284. package/src/components/callout/Callout.tsx +58 -16
  285. package/src/components/card/Card.tsx +84 -25
  286. package/src/components/card/CardCover.tsx +36 -6
  287. package/src/components/card/FlipContent.tsx +90 -0
  288. package/src/components/chip/Chip.tsx +53 -25
  289. package/src/components/collapsable/Collapsable.tsx +35 -11
  290. package/src/components/divider/Divider.tsx +42 -16
  291. package/src/components/dropdown/Dropdown.tsx +47 -12
  292. package/src/components/dropdown/DropdownTool.tsx +28 -4
  293. package/src/components/empty/EmptyContent.tsx +49 -8
  294. package/src/components/icon/Icon.tsx +96 -18
  295. package/src/components/index.ts +5 -4
  296. package/src/components/media/Media.tsx +193 -105
  297. package/src/components/menu/ContextMenu.tsx +19 -0
  298. package/src/components/menu/Menu.tsx +88 -32
  299. package/src/components/menu/MenuItem.tsx +44 -19
  300. package/src/components/menu/types.ts +9 -8
  301. package/src/components/meter/Meter.tsx +27 -4
  302. package/src/components/navigator/Navigator.tsx +60 -12
  303. package/src/components/panel/Panel.tsx +66 -28
  304. package/src/components/panel/PanelGroup.tsx +25 -2
  305. package/src/components/panel/PanelStack.tsx +33 -2
  306. package/src/components/progress/ProgressBar.tsx +33 -14
  307. package/src/components/progress/ProgressCircle.tsx +29 -13
  308. package/src/components/tabpanel/Tab.tsx +47 -24
  309. package/src/components/tabpanel/TabPanel.tsx +79 -13
  310. package/src/context/Global.tsx +28 -1
  311. package/src/context/NotificationCenter.tsx +3 -3
  312. package/src/core/aside/Aside.tsx +59 -38
  313. package/src/core/boundary/ErrorBoundary.tsx +26 -8
  314. package/src/core/boundary/ErrorIcon.tsx +1 -2
  315. package/src/core/content/Content.tsx +7 -3
  316. package/src/core/headfoot/HeadFoot.tsx +44 -37
  317. package/src/core/page/Page.tsx +44 -22
  318. package/src/core/responsive/Responsive.tsx +66 -8
  319. package/src/core/section/Section.tsx +26 -4
  320. package/src/core/theme/ThemeProvider.tsx +35 -14
  321. package/src/core/viewport/Viewport.tsx +16 -3
  322. package/src/hooks/useControlledValue.tsx +12 -0
  323. package/src/hooks/useDebounce.ts +13 -1
  324. package/src/hooks/useEffectDebugger.ts +50 -2
  325. package/src/hooks/useIsDark.ts +8 -0
  326. package/src/hooks/useIsRtl.ts +12 -0
  327. package/src/hooks/useNavigator.tsx +28 -5
  328. package/src/hooks/useOverlayService.tsx +33 -8
  329. package/src/hooks/usePropToggle.ts +16 -5
  330. package/src/hooks/useResize.ts +19 -1
  331. package/src/hooks/useResizeObserver.ts +32 -9
  332. package/src/hooks/useStepper.tsx +68 -0
  333. package/src/hooks/useStorage.ts +38 -0
  334. package/src/hotkeys/HotKeyLabel.tsx +1 -1
  335. package/src/hotkeys/HotKeyWrapper.tsx +3 -1
  336. package/src/index.ts +5 -1
  337. package/src/overlays/alert/Alert.tsx +51 -36
  338. package/src/overlays/flyout/Flyout.tsx +74 -99
  339. package/src/overlays/message/Message.tsx +28 -9
  340. package/src/overlays/modal/Modal.tsx +39 -34
  341. package/src/overlays/toast/Toast.tsx +44 -33
  342. package/src/overlays/tooltip/Tooltip.tsx +44 -20
  343. package/src/types/global.d.ts +8 -0
  344. package/src/types/index.ts +293 -47
  345. package/src/typography/Abbr.tsx +45 -11
  346. package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
  347. package/src/typography/Copy.tsx +16 -2
  348. package/src/typography/Mark.tsx +25 -10
  349. package/src/typography/Text.tsx +31 -13
  350. package/src/typography/Title.tsx +18 -7
  351. package/src/typography/index.ts +1 -1
  352. package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
  353. package/src/utils/getColor.ts +1 -17
  354. package/src/utils/index.ts +1 -0
  355. package/css/flags.rect.css +0 -1607
  356. package/css/flags.wavy.css +0 -1606
  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/types/icons.js +0 -199
  392. package/dist/cjs/typography/Typography.module.css +0 -1
  393. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  394. package/dist/esm/components/animations/Animations.module.css +0 -1
  395. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  396. package/dist/esm/components/badge/Badge.module.css +0 -1
  397. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  398. package/dist/esm/components/button/Button.module.css +0 -1
  399. package/dist/esm/components/card/Card.module.css +0 -1
  400. package/dist/esm/components/chip/Chip.module.css +0 -1
  401. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  402. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  403. package/dist/esm/components/icon/Icon.module.css +0 -1
  404. package/dist/esm/components/media/Media.module.css +0 -1
  405. package/dist/esm/components/menu/Menu.module.css +0 -1
  406. package/dist/esm/components/meter/Meter.module.css +0 -1
  407. package/dist/esm/components/panel/Panel.module.css +0 -1
  408. package/dist/esm/components/progress/Progress.module.css +0 -1
  409. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  410. package/dist/esm/core/aside/Aside.module.css +0 -1
  411. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  412. package/dist/esm/core/content/Content.module.css +0 -1
  413. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  414. package/dist/esm/core/page/Page.module.css +0 -1
  415. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  416. package/dist/esm/core/section/Section.module.css +0 -1
  417. package/dist/esm/core/theme/Theme.module.css +0 -1
  418. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  419. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  420. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  421. package/dist/esm/overlays/message/Message.module.css +0 -1
  422. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  423. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  424. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  425. package/dist/esm/types/icons.js +0 -201
  426. package/dist/esm/typography/Typography.module.css +0 -1
  427. package/dist/types/types/icons.d.ts +0 -196
  428. package/dist/types/typography/Link.d.ts +0 -25
  429. package/src/types/icons.ts +0 -425
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.61",
4
4
  "description": "RUF: Core package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
@@ -35,26 +35,27 @@
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
+ "@iconify-json/mdi": "~1.2.3",
40
+ "@iconify-json/svg-spinners": "~1.2.4",
41
+ "@iconify/tailwind4": "~1.2.1",
42
+ "@react-fabric/utilities": "^1.0.0-beta.61",
43
+ "@tailwindcss/postcss": "~4.1.16",
44
+ "boring-avatars": "~1.11.2",
45
+ "classnames": "~2.5.1",
46
+ "color": "~5.0.2",
47
+ "resize-observer-polyfill": "~1.5.1",
48
+ "tailwindcss": "~4.1.16"
48
49
  },
49
50
  "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"
51
+ "i18next": "~25.6.0",
52
+ "react": "~19.2.0",
53
+ "react-dom": "~19.2.0",
54
+ "react-i18next": "~16.2.1"
54
55
  },
55
56
  "engines": {
56
57
  "node": ">=18.12.0",
57
58
  "npm": ">=8.19.0"
58
59
  },
59
- "gitHead": "21167df13cedeae8b365e87b9bab6d7401298cb6"
60
+ "gitHead": "a0b0c571bf9c189fa3355bbc3b896ecc4b9d6a04"
60
61
  }
@@ -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,92 +111,139 @@ 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
 
106
- export const AnimationBars = ({
107
- color = "tint",
128
+ /**
129
+ * A component that displays a loading animation with a customizable icon, color, size, and mask blur.
130
+ * It is typically used to indicate loading states in the UI.
131
+ *
132
+ * @param {Object} props - The properties for the AnimationLoader component.
133
+ * @param {ColorType | PaletteType | string} [props.color="tint-500"] - The color of the loader icon.
134
+ * @param {number | string} [props.size="2rem"] - The size of the loader icon.
135
+ * @param {string} props.icon - The icon to be displayed as the loader.
136
+ * @param {"sm" | "md" | "lg"} [props.maskBlur] - The blur effect for the background mask.
137
+ * @returns {JSX.Element} The rendered AnimationLoader component.
138
+ */
139
+ export const AnimationLoader = ({
140
+ color = "tint-500",
108
141
  size = "2rem",
142
+ icon,
143
+ maskBlur,
109
144
  }: {
110
- color?: ColorType | string;
145
+ icon: string;
146
+ maskBlur?: "sm" | "md" | "lg";
147
+ color?: ColorType | PaletteType | string;
111
148
  size?: number | string;
112
149
  }) => {
113
150
  return (
114
151
  <div
115
152
  className={classNames(
116
153
  "absolute inset-0 z-10 flex justify-center items-center cursor-wait",
154
+ maskBlur === "sm" && "backdrop-blur-sm",
155
+ maskBlur === "md" && "backdrop-blur-md",
156
+ maskBlur === "lg" && "backdrop-blur-lg",
117
157
  )}
118
158
  >
119
159
  <div
120
160
  className={classNames(
121
- "outline outline-tint-500/20 p-4 bg-base/50 backdrop-blur-sm rounded",
161
+ "outline outline-tint-500/20 p-4 bg-tint-50/50 backdrop-blur-sm leading-0 rounded",
122
162
  )}
123
163
  >
124
164
  <div
125
- className={classNames(classes.bars, getColorClass(color + "-500/50"))}
126
- style={{ width: size }}
165
+ className={classNames("aspect-square", icon)}
166
+ style={{ fontSize: size, color: getColor(color) }}
127
167
  />
128
168
  </div>
129
169
  </div>
130
170
  );
131
171
  };
132
172
 
133
- export const AnimationSpinner = ({
134
- color = "tint-700",
135
- size = "2rem",
136
- }: {
137
- color?: ColorType | string;
173
+ /**
174
+ * A component that displays an animated bars loader.
175
+ * It can be customized with color and size properties.
176
+ * This component is typically used to indicate loading states in the UI.
177
+ *
178
+ * @param {Object} props - The properties for the LoadingBars component.
179
+ * @param {ColorType | PaletteType | string} [props.color="tint-500"] - The color of the bars.
180
+ * @param {number | string} [props.size="2rem"] - The size of the bars.
181
+ * @returns {JSX.Element} The rendered LoadingBars component.
182
+ *
183
+ * @example
184
+ * ```jsx
185
+ * <LoadingBars color="primary-500" size="3rem" />
186
+ * ```
187
+ *
188
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
189
+ */
190
+ export const LoadingBars = (props: {
191
+ color?: ColorType | PaletteType | string;
138
192
  size?: number | string;
193
+ maskBlur?: "sm" | "md" | "lg";
139
194
  }) => {
140
195
  return (
141
- <div
142
- className={classNames(
143
- "absolute inset-0 z-10 flex justify-center items-center cursor-wait",
144
- )}
145
- data-testid="spinner"
146
- >
147
- <div
148
- className={classNames(
149
- "outline outline-tint-500/20 p-4 bg-base/50 backdrop-blur-sm rounded",
150
- )}
151
- >
152
- <div
153
- className={classNames(classes.spinner, getColorClass(color))}
154
- style={{ width: size }}
155
- />
156
- </div>
157
- </div>
196
+ <AnimationLoader icon="icon-[svg-spinners--bars-scale-fade]" {...props} />
158
197
  );
159
198
  };
160
199
 
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
- );
200
+ /**
201
+ * A component that displays a spinner animation.
202
+ * It can be customized with color and size properties.
203
+ * This component is typically used to indicate loading states in the UI.
204
+ *
205
+ * @param {Object} props - The properties for the LoadingSpinner component.
206
+ * @param {ColorType | PaletteType | string} [props.color="tint-700"] - The color of the spinner.
207
+ * @param {number | string} [props.size="2rem"] - The size of the spinner.
208
+ * @returns {JSX.Element} The rendered LoadingSpinner component.
209
+ *
210
+ * @example
211
+ * ```jsx
212
+ * <LoadingSpinner color="primary-500" size="3rem" />
213
+ * ```
214
+ *
215
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
216
+ */
217
+ export const LoadingSpinner = (props: {
218
+ color?: ColorType | PaletteType | string;
219
+ size?: number | string;
220
+ maskBlur?: "sm" | "md" | "lg";
221
+ }) => {
222
+ return <AnimationLoader icon="icon-[svg-spinners--eclipse]" {...props} />;
173
223
  };
174
224
 
225
+ /**
226
+ * A component that displays a skeleton loader with a placeholder for content.
227
+ * It can be customized with color and size properties.
228
+ * This component is typically used to indicate loading states in the cards, panels and virtual lists,
229
+ * providing a visual placeholder for content that is being loaded.
230
+ *
231
+ * @param {CssProp} props - The properties for the Skeleton component.
232
+ * @returns {JSX.Element} The rendered Skeleton component.
233
+ *
234
+ * @example
235
+ * ```jsx
236
+ * <Skeleton className="my-skeleton" />
237
+ * * // Renders a skeleton loader with a placeholder for content.
238
+ * ```
239
+ *
240
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-animations--docs} for more details.
241
+ */
175
242
  export const Skeleton = ({ className, ...rest }: CssProp) => {
176
243
  return (
177
244
  <div
178
245
  className={classNames(className, "p-2 animate-pulse flex gap-2 max-w-lg")}
179
- data-testid="skeleton"
246
+ data-ref="skeleton"
180
247
  {...rest}
181
248
  >
182
249
  <div className="bg-tint-100 rounded aspect-square h-12" />
@@ -194,3 +261,23 @@ export const Skeleton = ({ className, ...rest }: CssProp) => {
194
261
  </div>
195
262
  );
196
263
  };
264
+
265
+ /**
266
+ * A component that displays a loading animation with a top border.
267
+ * It is typically used to indicate that content is being loaded in pages and page sections.
268
+ *
269
+ * @returns {JSX.Element} The rendered Loading component.
270
+ */
271
+ export const LoadingLine = () => {
272
+ return (
273
+ <div
274
+ className={classNames(
275
+ "fabric-loader",
276
+ "area-[loader] relative overflow-x-clip",
277
+ )}
278
+ data-ref="loading"
279
+ >
280
+ <div className="absolute z-10 py-px inset-x-0 top-0 after:h-0.5 after:block after:bg-primary-500" />
281
+ </div>
282
+ );
283
+ };
@@ -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>