@react-fabric/core 1.0.0-beta.5 → 1.0.0-beta.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) hide show
  1. package/{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} +49 -44
  7. package/{src/components/button/Button.module.css → css/components/_button.css} +69 -79
  8. package/{src/components/card/Card.module.css → css/components/_card.css} +50 -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} +8 -5
  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} +19 -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/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +73 -84
  23. package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
  24. package/css/components/_tooltip.css +29 -0
  25. package/{src/core/content/Content.module.css → css/components/index.css} +25 -18
  26. package/{src/core/aside/Aside.module.css → css/core/_aside.css} +56 -42
  27. package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
  28. package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
  29. package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
  30. package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
  31. package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
  32. package/css/core/_section.css +28 -0
  33. package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
  34. package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
  35. package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
  36. package/css/core/index.css +33 -0
  37. package/css/reset/_gradients.css +8 -8
  38. package/css/reset/_reset.css +42 -224
  39. package/css/reset/_text.css +14 -29
  40. package/css/reset/_theme.css +331 -52
  41. package/css/reset/index.css +4 -4
  42. package/css/styles.css +7 -6
  43. package/css/theme/_colors.css +320 -0
  44. package/css/theme/_utilities.css +530 -0
  45. package/css/theme/index.css +45 -0
  46. package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
  47. package/dist/cjs/components/animations/Animations.js +118 -24
  48. package/dist/cjs/components/avatar/Avatar.js +43 -16
  49. package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
  50. package/dist/cjs/components/badge/Badge.js +35 -6
  51. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +39 -8
  52. package/dist/cjs/components/button/Button.js +42 -15
  53. package/dist/cjs/components/button/ButtonGroup.js +30 -3
  54. package/dist/cjs/components/button/ConfirmButton.js +32 -4
  55. package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
  56. package/dist/cjs/components/callout/Callout.js +44 -4
  57. package/dist/cjs/components/card/Card.js +48 -10
  58. package/dist/cjs/components/card/CardCover.js +36 -5
  59. package/dist/cjs/components/card/FlipContent.js +56 -0
  60. package/dist/cjs/components/chip/Chip.js +32 -7
  61. package/dist/cjs/components/collapsable/Collapsable.js +32 -6
  62. package/dist/cjs/components/divider/Divider.js +30 -7
  63. package/dist/cjs/components/dropdown/Dropdown.js +48 -9
  64. package/dist/cjs/components/dropdown/DropdownTool.js +4 -3
  65. package/dist/cjs/components/empty/EmptyContent.js +35 -5
  66. package/dist/cjs/components/icon/Icon.js +44 -16
  67. package/dist/cjs/components/media/Media.js +172 -75
  68. package/dist/cjs/components/menu/ContextMenu.js +49 -10
  69. package/dist/cjs/components/menu/Menu.js +74 -21
  70. package/dist/cjs/components/menu/MenuItem.js +51 -16
  71. package/dist/cjs/components/meter/Meter.js +26 -3
  72. package/dist/cjs/components/navigator/Navigator.js +48 -13
  73. package/dist/cjs/components/panel/Panel.js +47 -9
  74. package/dist/cjs/components/panel/PanelGroup.js +25 -2
  75. package/dist/cjs/components/panel/PanelStack.js +31 -0
  76. package/dist/cjs/components/progress/ProgressBar.js +31 -9
  77. package/dist/cjs/components/progress/ProgressCircle.js +29 -7
  78. package/dist/cjs/components/tabpanel/Tab.js +89 -38
  79. package/dist/cjs/components/tabpanel/TabPanel.js +53 -16
  80. package/dist/cjs/context/Global.js +28 -1
  81. package/dist/cjs/context/NotificationCenter.js +3 -3
  82. package/dist/cjs/core/aside/Aside.js +49 -11
  83. package/dist/cjs/core/boundary/ErrorBoundary.js +23 -8
  84. package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
  85. package/dist/cjs/core/content/Content.js +15 -8
  86. package/dist/cjs/core/headfoot/HeadFoot.js +44 -20
  87. package/dist/cjs/core/page/Page.js +40 -29
  88. package/dist/cjs/core/responsive/Responsive.js +59 -6
  89. package/dist/cjs/core/section/Section.js +1 -2
  90. package/dist/cjs/core/theme/ThemeProvider.js +32 -10
  91. package/dist/cjs/core/viewport/Viewport.js +18 -2
  92. package/dist/cjs/hooks/useControlledValue.js +12 -0
  93. package/dist/cjs/hooks/useDebounce.js +14 -1
  94. package/dist/cjs/hooks/useEffectDebugger.js +54 -2
  95. package/dist/cjs/hooks/useIsDark.js +8 -0
  96. package/dist/cjs/hooks/useIsRtl.js +12 -0
  97. package/dist/cjs/hooks/useNavigator.js +6 -4
  98. package/dist/cjs/hooks/useOverlayService.js +24 -0
  99. package/dist/cjs/hooks/usePropToggle.js +16 -5
  100. package/dist/cjs/hooks/useResize.js +18 -0
  101. package/dist/cjs/hooks/useResizeObserver.js +20 -1
  102. package/dist/cjs/hooks/useStorage.js +39 -0
  103. package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
  104. package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
  105. package/dist/cjs/index.js +8 -2
  106. package/dist/cjs/overlays/alert/Alert.js +20 -14
  107. package/dist/cjs/overlays/flyout/Flyout.js +49 -60
  108. package/dist/cjs/overlays/message/Message.js +6 -3
  109. package/dist/cjs/overlays/modal/Modal.js +16 -12
  110. package/dist/cjs/overlays/toast/Toast.js +17 -9
  111. package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
  112. package/dist/cjs/types/icons.js +10 -1
  113. package/dist/cjs/typography/Abbr.js +32 -6
  114. package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
  115. package/dist/cjs/typography/Mark.js +22 -4
  116. package/dist/cjs/typography/Text.js +30 -5
  117. package/dist/cjs/typography/Title.js +19 -4
  118. package/dist/cjs/utils/cloneElement.js +47 -0
  119. package/dist/cjs/utils/getColor.js +1 -18
  120. package/dist/esm/components/actionLabel/ActionLabel.js +26 -8
  121. package/dist/esm/components/animations/Animations.js +119 -25
  122. package/dist/esm/components/avatar/Avatar.js +44 -17
  123. package/dist/esm/components/avatar/AvatarGroup.js +22 -4
  124. package/dist/esm/components/badge/Badge.js +36 -7
  125. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +39 -8
  126. package/dist/esm/components/button/Button.js +42 -15
  127. package/dist/esm/components/button/ButtonGroup.js +31 -4
  128. package/dist/esm/components/button/ConfirmButton.js +32 -4
  129. package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
  130. package/dist/esm/components/callout/Callout.js +44 -4
  131. package/dist/esm/components/card/Card.js +49 -11
  132. package/dist/esm/components/card/CardCover.js +36 -5
  133. package/dist/esm/components/card/FlipContent.js +56 -0
  134. package/dist/esm/components/chip/Chip.js +33 -8
  135. package/dist/esm/components/collapsable/Collapsable.js +32 -6
  136. package/dist/esm/components/divider/Divider.js +31 -8
  137. package/dist/esm/components/dropdown/Dropdown.js +48 -9
  138. package/dist/esm/components/dropdown/DropdownTool.js +4 -3
  139. package/dist/esm/components/empty/EmptyContent.js +35 -5
  140. package/dist/esm/components/icon/Icon.js +44 -16
  141. package/dist/esm/components/media/Media.js +173 -76
  142. package/dist/esm/components/menu/ContextMenu.js +51 -12
  143. package/dist/esm/components/menu/Menu.js +76 -23
  144. package/dist/esm/components/menu/MenuItem.js +45 -10
  145. package/dist/esm/components/meter/Meter.js +26 -3
  146. package/dist/esm/components/navigator/Navigator.js +48 -13
  147. package/dist/esm/components/panel/Panel.js +47 -9
  148. package/dist/esm/components/panel/PanelGroup.js +25 -2
  149. package/dist/esm/components/panel/PanelStack.js +31 -0
  150. package/dist/esm/components/progress/ProgressBar.js +31 -9
  151. package/dist/esm/components/progress/ProgressCircle.js +29 -7
  152. package/dist/esm/components/tabpanel/Tab.js +90 -39
  153. package/dist/esm/components/tabpanel/TabPanel.js +53 -16
  154. package/dist/esm/context/Global.js +28 -1
  155. package/dist/esm/context/NotificationCenter.js +3 -3
  156. package/dist/esm/core/aside/Aside.js +49 -11
  157. package/dist/esm/core/boundary/ErrorBoundary.js +23 -8
  158. package/dist/esm/core/boundary/ErrorIcon.js +1 -2
  159. package/dist/esm/core/content/Content.js +15 -8
  160. package/dist/esm/core/headfoot/HeadFoot.js +44 -20
  161. package/dist/esm/core/page/Page.js +40 -29
  162. package/dist/esm/core/responsive/Responsive.js +59 -6
  163. package/dist/esm/core/section/Section.js +1 -2
  164. package/dist/esm/core/theme/ThemeProvider.js +32 -10
  165. package/dist/esm/core/viewport/Viewport.js +18 -2
  166. package/dist/esm/hooks/useControlledValue.js +12 -0
  167. package/dist/esm/hooks/useDebounce.js +14 -1
  168. package/dist/esm/hooks/useEffectDebugger.js +54 -2
  169. package/dist/esm/hooks/useIsDark.js +8 -0
  170. package/dist/esm/hooks/useIsRtl.js +12 -0
  171. package/dist/esm/hooks/useNavigator.js +7 -5
  172. package/dist/esm/hooks/useOverlayService.js +24 -0
  173. package/dist/esm/hooks/usePropToggle.js +16 -5
  174. package/dist/esm/hooks/useResize.js +18 -0
  175. package/dist/esm/hooks/useResizeObserver.js +20 -1
  176. package/dist/esm/hooks/useStorage.js +39 -0
  177. package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
  178. package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
  179. package/dist/esm/index.js +4 -1
  180. package/dist/esm/overlays/alert/Alert.js +21 -15
  181. package/dist/esm/overlays/flyout/Flyout.js +52 -63
  182. package/dist/esm/overlays/message/Message.js +7 -4
  183. package/dist/esm/overlays/modal/Modal.js +17 -13
  184. package/dist/esm/overlays/toast/Toast.js +18 -10
  185. package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
  186. package/dist/esm/types/icons.js +10 -1
  187. package/dist/esm/typography/Abbr.js +32 -6
  188. package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
  189. package/dist/esm/typography/Mark.js +22 -4
  190. package/dist/esm/typography/Text.js +31 -6
  191. package/dist/esm/typography/Title.js +20 -5
  192. package/dist/esm/utils/cloneElement.js +47 -0
  193. package/dist/esm/utils/getColor.js +2 -16
  194. package/dist/types/components/actionLabel/ActionLabel.d.ts +23 -4
  195. package/dist/types/components/animations/Animations.d.ts +84 -5
  196. package/dist/types/components/avatar/Avatar.d.ts +29 -5
  197. package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
  198. package/dist/types/components/badge/Badge.d.ts +30 -1
  199. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
  200. package/dist/types/components/button/Button.d.ts +29 -6
  201. package/dist/types/components/button/ButtonGroup.d.ts +28 -3
  202. package/dist/types/components/button/ConfirmButton.d.ts +28 -3
  203. package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
  204. package/dist/types/components/callout/Callout.d.ts +29 -3
  205. package/dist/types/components/card/Card.d.ts +42 -4
  206. package/dist/types/components/card/CardCover.d.ts +25 -0
  207. package/dist/types/components/card/FlipContent.d.ts +28 -0
  208. package/dist/types/components/chip/Chip.d.ts +24 -4
  209. package/dist/types/components/collapsable/Collapsable.d.ts +33 -3
  210. package/dist/types/components/divider/Divider.d.ts +30 -7
  211. package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
  212. package/dist/types/components/dropdown/DropdownTool.d.ts +27 -1
  213. package/dist/types/components/empty/EmptyContent.d.ts +32 -3
  214. package/dist/types/components/icon/Icon.d.ts +32 -6
  215. package/dist/types/components/index.d.ts +2 -1
  216. package/dist/types/components/media/Media.d.ts +56 -2
  217. package/dist/types/components/menu/ContextMenu.d.ts +21 -2
  218. package/dist/types/components/menu/Menu.d.ts +29 -0
  219. package/dist/types/components/menu/MenuItem.d.ts +22 -2
  220. package/dist/types/components/menu/types.d.ts +3 -2
  221. package/dist/types/components/meter/Meter.d.ts +24 -0
  222. package/dist/types/components/navigator/Navigator.d.ts +29 -4
  223. package/dist/types/components/panel/Panel.d.ts +37 -1
  224. package/dist/types/components/panel/PanelGroup.d.ts +24 -0
  225. package/dist/types/components/panel/PanelStack.d.ts +31 -0
  226. package/dist/types/components/progress/ProgressBar.d.ts +23 -3
  227. package/dist/types/components/progress/ProgressCircle.d.ts +22 -3
  228. package/dist/types/components/tabpanel/Tab.d.ts +36 -5
  229. package/dist/types/components/tabpanel/TabPanel.d.ts +43 -1
  230. package/dist/types/context/Global.d.ts +24 -1
  231. package/dist/types/core/aside/Aside.d.ts +38 -1
  232. package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
  233. package/dist/types/core/content/Content.d.ts +9 -3
  234. package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
  235. package/dist/types/core/page/Page.d.ts +29 -4
  236. package/dist/types/core/responsive/Responsive.d.ts +58 -3
  237. package/dist/types/core/section/Section.d.ts +16 -1
  238. package/dist/types/core/theme/ThemeProvider.d.ts +25 -5
  239. package/dist/types/core/viewport/Viewport.d.ts +15 -1
  240. package/dist/types/hooks/useControlledValue.d.ts +13 -2
  241. package/dist/types/hooks/useDebounce.d.ts +12 -0
  242. package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
  243. package/dist/types/hooks/useIsDark.d.ts +8 -0
  244. package/dist/types/hooks/useIsRtl.d.ts +12 -0
  245. package/dist/types/hooks/useNavigator.d.ts +18 -1
  246. package/dist/types/hooks/useOverlayService.d.ts +28 -9
  247. package/dist/types/hooks/usePropToggle.d.ts +16 -5
  248. package/dist/types/hooks/useResize.d.ts +19 -1
  249. package/dist/types/hooks/useResizeObserver.d.ts +20 -1
  250. package/dist/types/hooks/useStorage.d.ts +38 -0
  251. package/dist/types/index.d.ts +3 -0
  252. package/dist/types/overlays/alert/Alert.d.ts +2 -3
  253. package/dist/types/overlays/flyout/Flyout.d.ts +3 -2
  254. package/dist/types/overlays/message/Message.d.ts +2 -3
  255. package/dist/types/overlays/modal/Modal.d.ts +12 -3
  256. package/dist/types/overlays/toast/Toast.d.ts +2 -3
  257. package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
  258. package/dist/types/types/icons.d.ts +10 -1
  259. package/dist/types/types/index.d.ts +26 -6
  260. package/dist/types/typography/Abbr.d.ts +34 -4
  261. package/dist/types/typography/Anchor.d.ts +42 -0
  262. package/dist/types/typography/Copy.d.ts +15 -0
  263. package/dist/types/typography/Mark.d.ts +22 -4
  264. package/dist/types/typography/Text.d.ts +27 -1
  265. package/dist/types/typography/Title.d.ts +16 -1
  266. package/dist/types/typography/index.d.ts +1 -1
  267. package/dist/types/utils/cloneElement.d.ts +2 -0
  268. package/dist/types/utils/getColor.d.ts +1 -4
  269. package/dist/types/utils/index.d.ts +1 -0
  270. package/package.json +11 -13
  271. package/src/components/actionLabel/ActionLabel.tsx +38 -11
  272. package/src/components/animations/Animations.tsx +118 -33
  273. package/src/components/avatar/Avatar.tsx +106 -91
  274. package/src/components/avatar/AvatarGroup.tsx +23 -5
  275. package/src/components/badge/Badge.tsx +41 -9
  276. package/src/components/breadcrumbs/Breadcrumbs.tsx +42 -9
  277. package/src/components/button/Button.tsx +50 -23
  278. package/src/components/button/ButtonGroup.tsx +33 -7
  279. package/src/components/button/ConfirmButton.tsx +41 -7
  280. package/src/components/button/ToggleButtonGroup.tsx +74 -47
  281. package/src/components/callout/Callout.tsx +55 -12
  282. package/src/components/card/Card.tsx +64 -15
  283. package/src/components/card/CardCover.tsx +36 -6
  284. package/src/components/card/FlipContent.tsx +90 -0
  285. package/src/components/chip/Chip.tsx +39 -13
  286. package/src/components/collapsable/Collapsable.tsx +38 -7
  287. package/src/components/divider/Divider.tsx +42 -16
  288. package/src/components/dropdown/Dropdown.tsx +46 -11
  289. package/src/components/dropdown/DropdownTool.tsx +30 -3
  290. package/src/components/empty/EmptyContent.tsx +47 -6
  291. package/src/components/icon/Icon.tsx +85 -68
  292. package/src/components/index.ts +2 -1
  293. package/src/components/media/Media.tsx +195 -106
  294. package/src/components/menu/ContextMenu.tsx +55 -11
  295. package/src/components/menu/Menu.tsx +85 -30
  296. package/src/components/menu/MenuItem.tsx +40 -9
  297. package/src/components/menu/types.ts +3 -2
  298. package/src/components/meter/Meter.tsx +26 -3
  299. package/src/components/navigator/Navigator.tsx +58 -7
  300. package/src/components/panel/Panel.tsx +47 -9
  301. package/src/components/panel/PanelGroup.tsx +25 -2
  302. package/src/components/panel/PanelStack.tsx +31 -0
  303. package/src/components/progress/ProgressBar.tsx +33 -14
  304. package/src/components/progress/ProgressCircle.tsx +29 -13
  305. package/src/components/tabpanel/Tab.tsx +112 -64
  306. package/src/components/tabpanel/TabPanel.tsx +67 -12
  307. package/src/context/Global.tsx +28 -1
  308. package/src/context/NotificationCenter.tsx +3 -3
  309. package/src/core/aside/Aside.tsx +50 -12
  310. package/src/core/boundary/ErrorBoundary.tsx +25 -8
  311. package/src/core/boundary/ErrorIcon.tsx +1 -2
  312. package/src/core/content/Content.tsx +23 -13
  313. package/src/core/headfoot/HeadFoot.tsx +42 -35
  314. package/src/core/page/Page.tsx +44 -6
  315. package/src/core/responsive/Responsive.tsx +66 -8
  316. package/src/core/section/Section.tsx +17 -3
  317. package/src/core/theme/ThemeProvider.tsx +35 -14
  318. package/src/core/viewport/Viewport.tsx +16 -3
  319. package/src/hooks/useControlledValue.tsx +12 -0
  320. package/src/hooks/useDebounce.ts +13 -1
  321. package/src/hooks/useEffectDebugger.ts +50 -2
  322. package/src/hooks/useIsDark.ts +8 -0
  323. package/src/hooks/useIsRtl.ts +12 -0
  324. package/src/hooks/useNavigator.tsx +28 -5
  325. package/src/hooks/useOverlayService.tsx +36 -6
  326. package/src/hooks/usePropToggle.ts +16 -5
  327. package/src/hooks/useResize.ts +19 -1
  328. package/src/hooks/useResizeObserver.ts +32 -9
  329. package/src/hooks/useStorage.ts +38 -0
  330. package/src/hotkeys/HotKeyLabel.tsx +1 -1
  331. package/src/hotkeys/HotKeyWrapper.tsx +3 -1
  332. package/src/index.ts +4 -0
  333. package/src/overlays/alert/Alert.tsx +28 -32
  334. package/src/overlays/flyout/Flyout.tsx +71 -84
  335. package/src/overlays/message/Message.tsx +10 -7
  336. package/src/overlays/modal/Modal.tsx +37 -15
  337. package/src/overlays/toast/Toast.tsx +18 -27
  338. package/src/overlays/tooltip/Tooltip.tsx +43 -18
  339. package/src/types/icons.ts +18 -3
  340. package/src/types/index.ts +268 -27
  341. package/src/typography/Abbr.tsx +44 -11
  342. package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
  343. package/src/typography/Copy.tsx +15 -0
  344. package/src/typography/Mark.tsx +24 -10
  345. package/src/typography/Text.tsx +31 -13
  346. package/src/typography/Title.tsx +18 -7
  347. package/src/typography/index.ts +1 -1
  348. package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
  349. package/src/utils/getColor.ts +1 -17
  350. package/src/utils/index.ts +1 -0
  351. package/css/index.js +0 -250
  352. package/css/tailwind/colors.ts +0 -158
  353. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  354. package/dist/cjs/components/animations/Animations.module.css +0 -1
  355. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  356. package/dist/cjs/components/badge/Badge.module.css +0 -1
  357. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  358. package/dist/cjs/components/button/Button.module.css +0 -1
  359. package/dist/cjs/components/card/Card.module.css +0 -1
  360. package/dist/cjs/components/chip/Chip.module.css +0 -1
  361. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  362. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  363. package/dist/cjs/components/icon/Icon.module.css +0 -1
  364. package/dist/cjs/components/media/Media.module.css +0 -1
  365. package/dist/cjs/components/menu/Menu.module.css +0 -1
  366. package/dist/cjs/components/meter/Meter.module.css +0 -1
  367. package/dist/cjs/components/panel/Panel.module.css +0 -1
  368. package/dist/cjs/components/progress/Progress.module.css +0 -1
  369. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  370. package/dist/cjs/core/aside/Aside.module.css +0 -1
  371. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  372. package/dist/cjs/core/content/Content.module.css +0 -1
  373. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  374. package/dist/cjs/core/page/Page.module.css +0 -1
  375. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  376. package/dist/cjs/core/section/Section.module.css +0 -1
  377. package/dist/cjs/core/theme/Theme.module.css +0 -1
  378. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  379. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  380. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  381. package/dist/cjs/overlays/message/Message.module.css +0 -1
  382. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  383. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  384. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  385. package/dist/cjs/typography/Typography.module.css +0 -1
  386. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  387. package/dist/esm/components/animations/Animations.module.css +0 -1
  388. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  389. package/dist/esm/components/badge/Badge.module.css +0 -1
  390. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  391. package/dist/esm/components/button/Button.module.css +0 -1
  392. package/dist/esm/components/card/Card.module.css +0 -1
  393. package/dist/esm/components/chip/Chip.module.css +0 -1
  394. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  395. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  396. package/dist/esm/components/icon/Icon.module.css +0 -1
  397. package/dist/esm/components/media/Media.module.css +0 -1
  398. package/dist/esm/components/menu/Menu.module.css +0 -1
  399. package/dist/esm/components/meter/Meter.module.css +0 -1
  400. package/dist/esm/components/panel/Panel.module.css +0 -1
  401. package/dist/esm/components/progress/Progress.module.css +0 -1
  402. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  403. package/dist/esm/core/aside/Aside.module.css +0 -1
  404. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  405. package/dist/esm/core/content/Content.module.css +0 -1
  406. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  407. package/dist/esm/core/page/Page.module.css +0 -1
  408. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  409. package/dist/esm/core/section/Section.module.css +0 -1
  410. package/dist/esm/core/theme/Theme.module.css +0 -1
  411. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  412. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  413. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  414. package/dist/esm/overlays/message/Message.module.css +0 -1
  415. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  416. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  417. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  418. package/dist/esm/typography/Typography.module.css +0 -1
  419. package/dist/types/typography/Link.d.ts +0 -25
@@ -26,12 +26,12 @@ import classNames from "classnames";
26
26
  import {
27
27
  Fragment,
28
28
  isValidElement,
29
- type MouseEventHandler,
30
29
  useCallback,
31
30
  useEffect,
32
31
  useMemo,
33
32
  useRef,
34
33
  useState,
34
+ type MouseEventHandler,
35
35
  type WheelEventHandler,
36
36
  } from "react";
37
37
  import { useEffectDebugger } from "../../hooks/useEffectDebugger";
@@ -39,10 +39,10 @@ import { HotKey } from "../../hotkeys/HotKey";
39
39
  import { HotKeyLabel } from "../../hotkeys/HotKeyLabel";
40
40
  import { Tooltip } from "../../overlays/tooltip/Tooltip";
41
41
  import {
42
+ type ColorState,
42
43
  type AriaProps,
43
44
  type BadgeType,
44
45
  type CallbackReturn,
45
- type ColorType,
46
46
  type CssProp,
47
47
  type IconProps,
48
48
  type PolymorphicProps,
@@ -51,10 +51,10 @@ import {
51
51
  type TestProps,
52
52
  type TooltipType,
53
53
  } from "../../types";
54
+ import { getColor } from "../../utils";
54
55
  import { AnimationIndicator } from "../animations/Animations";
55
56
  import { Badge, getBadgeProps } from "../badge/Badge";
56
57
  import { Icon } from "../icon/Icon";
57
- import classes from "./Button.module.css";
58
58
 
59
59
  export interface BaseProps
60
60
  extends CssProp,
@@ -77,7 +77,7 @@ export interface BaseProps
77
77
  /**
78
78
  * button color
79
79
  */
80
- color?: ColorType;
80
+ color?: ColorState;
81
81
  /**
82
82
  * button type
83
83
  */
@@ -85,7 +85,7 @@ export interface BaseProps
85
85
  /**
86
86
  * button styling
87
87
  */
88
- variant?: "outline" | "solid" | "link";
88
+ variant?: "outline" | "soft" | "solid" | "link";
89
89
  /**
90
90
  * active state with click disabled
91
91
  */
@@ -147,12 +147,37 @@ export interface BaseProps
147
147
  onWheel?: WheelEventHandler;
148
148
  }
149
149
 
150
- export type ButtonProps =
150
+ type ButtonTypeProps =
151
151
  | { children: string | React.ReactElement; "aria-label"?: string }
152
152
  | { children?: never; "aria-label": string };
153
153
 
154
+ export type ButtonProps<Tag extends React.ElementType = "button"> = BaseProps &
155
+ ButtonTypeProps &
156
+ PolymorphicProps<Tag>;
157
+
154
158
  /**
155
- * Clickable action button
159
+ * A versatile button component that supports various styles, icons, and actions.
160
+ * It can be used as a primary action button, with options for loading states, action messages, and more.
161
+ * It supports polymorphic rendering, allowing it to be used as different HTML elements (e.g., button, a, div).
162
+ * It also includes features like after action tooltips, badges, and keyboard shortcuts.
163
+ *
164
+ * @param {ButtonProps} props - The properties for the Button component.
165
+ * @returns {JSX.Element} The rendered Button component.
166
+ *
167
+ * @example
168
+ * ```jsx
169
+ * <Button
170
+ * color="primary"
171
+ * size="md"
172
+ * variant="solid"
173
+ * icon="check"
174
+ * onClick={() => console.log("Button clicked!")}
175
+ * >
176
+ * Click Me
177
+ * </Button>
178
+ * ```
179
+ *
180
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-button--docs} for more details.
156
181
  */
157
182
  export const Button = <Tag extends React.ElementType = "button">({
158
183
  as,
@@ -186,11 +211,12 @@ export const Button = <Tag extends React.ElementType = "button">({
186
211
  // @ts-expect-error ignore
187
212
  "data-ref": dataRef,
188
213
  ...aria
189
- }: BaseProps & ButtonProps & PolymorphicProps<Tag>) => {
214
+ }: ButtonProps<Tag>) => {
190
215
  const refEl = useRef<AnyObject>(null);
191
216
  const [busy, setBusy] = useState(false);
192
217
  const [actionDone, setActionDone] = useState(false);
193
218
 
219
+ // Handle click events
194
220
  const clickHandler = useCallback(
195
221
  (e: React.MouseEvent) => {
196
222
  setBusy(true);
@@ -230,7 +256,7 @@ export const Button = <Tag extends React.ElementType = "button">({
230
256
  return {
231
257
  content: actionMessage,
232
258
  placement: "top",
233
- color,
259
+ color: `${color}-100`,
234
260
  open: true,
235
261
  } as TooltipType;
236
262
  }
@@ -240,11 +266,15 @@ export const Button = <Tag extends React.ElementType = "button">({
240
266
  return getBadgeProps(badge);
241
267
  }, [badge]);
242
268
 
269
+ const hotKeyHandler = useRef(() => {
270
+ !disabled && refEl.current?.click();
271
+ });
272
+
243
273
  const E = as ?? "button";
244
274
  return (
245
275
  <div
246
276
  className={classNames(
247
- classes.buttonWrapper,
277
+ "fabric-buttonWrapper",
248
278
  className,
249
279
  "relative align-text-top select-none focus-within:z-1",
250
280
  fullWidth ? "block w-full" : "inline-block",
@@ -254,23 +284,18 @@ export const Button = <Tag extends React.ElementType = "button">({
254
284
  data-loading={busy || loading}
255
285
  data-disabled={disabled}
256
286
  >
257
- {hotKey && (
258
- <HotKey
259
- keyCombo={hotKey}
260
- handler={() => !disabled && refEl.current?.click()}
261
- />
262
- )}
287
+ {hotKey && <HotKey keyCombo={hotKey} handler={hotKeyHandler.current} />}
263
288
  <TooltipWrapper {...tooltipProps}>
264
289
  <E
265
290
  ref={mergeRefs(ref, refEl)}
266
291
  role="button"
267
292
  className={classNames(
268
- classes.button,
293
+ "fabric-button",
269
294
  "pointer-events-auto cursor-pointer select-none flex flex-nowrap w-full h-full items-center border-0 -outline-offset-1 justify-center max-w-72 p-0 font-sans font-medium appearance-none",
270
295
  `focus-visible:ring-2 focus-visible:ring-offset-2 buttonInner`,
271
296
  fullWidth && "max-w-full w-full",
272
297
  rounded && "rounded-full",
273
- spinOnHover && classes.spinOnHover,
298
+ spinOnHover && "fabric-spinOnHover",
274
299
  )}
275
300
  type={type}
276
301
  disabled={disabled}
@@ -284,7 +309,7 @@ export const Button = <Tag extends React.ElementType = "button">({
284
309
  >
285
310
  {icon && (
286
311
  <Icon
287
- className={classes.buttonIcon}
312
+ className={"fabric-buttonIcon"}
288
313
  icon={icon}
289
314
  bg={iconBg}
290
315
  color={iconColor}
@@ -293,11 +318,11 @@ export const Button = <Tag extends React.ElementType = "button">({
293
318
  />
294
319
  )}
295
320
  {isValidElement(children) && (
296
- <div className={classes.buttonChild}>{children}</div>
321
+ <div className={"fabric-buttonChild"}>{children}</div>
297
322
  )}
298
323
  {isString(children) && (
299
324
  <label
300
- className={classNames(classes.buttonLabel, "truncate")}
325
+ className={classNames("fabric-buttonLabel", "truncate")}
301
326
  data-colored-icon={!!iconBg}
302
327
  >
303
328
  {children}
@@ -306,7 +331,7 @@ export const Button = <Tag extends React.ElementType = "button">({
306
331
  {!isNil(badge) && <Badge {...badgeProps} />}
307
332
  {hotKey && <HotKeyLabel keyCombo={hotKey} />}
308
333
  {altIcon && (
309
- <Icon className={classes.altIcon} icon={altIcon} rtlFlip />
334
+ <Icon className={"fabric-altIcon"} icon={altIcon} rtlFlip />
310
335
  )}
311
336
  </E>
312
337
  </TooltipWrapper>
@@ -314,9 +339,11 @@ export const Button = <Tag extends React.ElementType = "button">({
314
339
  <div
315
340
  className={classNames(
316
341
  "absolute inset-0 overflow-hidden flex justify-center items-center",
317
- `bg-${color}-300`,
318
342
  rounded ? "rounded-full" : "rounded",
319
343
  )}
344
+ style={{
345
+ backgroundColor: getColor(`${color}-300`),
346
+ }}
320
347
  >
321
348
  <AnimationIndicator type="check" color={color} />
322
349
  </div>
@@ -22,18 +22,18 @@
22
22
  */
23
23
 
24
24
  import classNames from "classnames";
25
- import { Children, cloneElement } from "react";
25
+ import { cloneElement } from "react";
26
26
  import {
27
27
  type AriaProps,
28
28
  type ChildrenProp,
29
- type ColorType,
29
+ type ColorState,
30
30
  type CssProp,
31
31
  type RefProp,
32
32
  type SizeType,
33
33
  type TestProps,
34
34
  } from "../../types";
35
+ import { cloneChildren } from "../../utils";
35
36
  import { type Button } from "./Button";
36
- import classes from "./Button.module.css";
37
37
 
38
38
  export interface ButtonGroupProps
39
39
  extends CssProp,
@@ -56,7 +56,7 @@ export interface ButtonGroupProps
56
56
  /**
57
57
  * button color
58
58
  */
59
- color?: ColorType;
59
+ color?: ColorState;
60
60
  /**
61
61
  * full rounded edges
62
62
  */
@@ -71,6 +71,32 @@ export interface ButtonGroupProps
71
71
  fullWidth?: boolean;
72
72
  }
73
73
 
74
+ /**
75
+ * A component that groups buttons together, allowing for consistent styling and behavior across multiple buttons.
76
+ * It supports vertical orientation, various button styles, and can handle properties like size, color, and disabled state.
77
+ * This component is useful for creating button groups that maintain a uniform appearance and functionality,
78
+ * such as toolbars, action groups, or navigation buttons.
79
+ *
80
+ * @param {ButtonGroupProps} props - The properties for the ButtonGroup component.
81
+ * @returns {JSX.Element} The rendered ButtonGroup component.
82
+ *
83
+ * @example
84
+ * ```jsx
85
+ * <ButtonGroup
86
+ * variant="solid"
87
+ * color="primary"
88
+ * className="my-custom-class"
89
+ * aria-label="Button Group"
90
+ * vertical
91
+ * >
92
+ * <Button>Button 1</Button>
93
+ * <Button>Button 2</Button>
94
+ * <Button>Button 3</Button>
95
+ * </ButtonGroup>
96
+ * ```
97
+ *
98
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-buttongroup--docs} for more details.
99
+ */
74
100
  export const ButtonGroup = ({
75
101
  vertical,
76
102
  className,
@@ -87,16 +113,16 @@ export const ButtonGroup = ({
87
113
  <div
88
114
  data-ref="buttonGroup"
89
115
  className={classNames(
90
- classes.buttonGroup,
116
+ "fabric-buttonGroup",
91
117
  className,
92
118
  fullWidth ? "flex" : "inline-flex",
93
119
  "flex-nowrap align-middle rounded",
94
- vertical && classes.vertical,
120
+ vertical && "vertical",
95
121
  vertical && "flex-col items-stretch",
96
122
  )}
97
123
  {...aria}
98
124
  >
99
- {Children.map(children, (child: AnyObject) =>
125
+ {cloneChildren(children, (child: AnyObject) =>
100
126
  cloneElement(child, {
101
127
  color,
102
128
  size,
@@ -22,18 +22,19 @@
22
22
  */
23
23
 
24
24
  import {
25
- FloatingArrow,
26
- FloatingFocusManager,
27
- FloatingPortal,
28
25
  arrow,
29
26
  autoUpdate,
30
27
  flip,
28
+ FloatingArrow,
29
+ FloatingFocusManager,
30
+ FloatingPortal,
31
31
  offset,
32
32
  shift,
33
33
  useClick,
34
34
  useDismiss,
35
35
  useFloating,
36
36
  useInteractions,
37
+ type Placement,
37
38
  } from "@floating-ui/react";
38
39
  import { mergeRefs } from "@react-fabric/utilities";
39
40
  import classNames from "classnames";
@@ -66,6 +67,10 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
66
67
  * ok label
67
68
  */
68
69
  cancelLabel?: string;
70
+ /**
71
+ * dropdown placement
72
+ */
73
+ placement?: Placement;
69
74
  /**
70
75
  * click handler, return Promise to autoset loading state
71
76
  */
@@ -75,7 +80,28 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
75
80
  export type ConfirmButtonProps = ExtendedProps & ButtonProps;
76
81
 
77
82
  /**
78
- * Button with confirmation dropdown
83
+ * A button that shows a confirmation dialog when clicked, allowing the user to confirm or cancel an action.
84
+ * It supports custom messages, labels, and loading states.
85
+ * This component is useful for actions that require user confirmation, such as deleting items or submitting forms.
86
+ * It uses the Floating UI library to manage the positioning of the confirmation dialog, ensuring it appears correctly relative to the button.
87
+ * It also supports custom placement of the dialog, and can display an action message when the action is completed.
88
+ *
89
+ * @param {ConfirmButtonProps} props - The properties for the ConfirmButton component.
90
+ * @returns {JSX.Element} The rendered ConfirmButton component.
91
+ *
92
+ * @example
93
+ * ```jsx
94
+ * <ConfirmButton
95
+ * message="Are you sure you want to delete this item?"
96
+ * onClick={(confirmed) => {
97
+ * if (confirmed) {
98
+ * // Perform action
99
+ * }
100
+ * }}
101
+ * />
102
+ * ```
103
+ *
104
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-confirmbutton--docs} for more details.
79
105
  */
80
106
  export const ConfirmButton = <Tag extends React.ElementType = "button">({
81
107
  ref,
@@ -85,6 +111,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
85
111
  cancelLabel,
86
112
  onClick,
87
113
  loading,
114
+ placement = "bottom",
88
115
  actionMessage,
89
116
  showActionDone,
90
117
  showActionDoneEvent = "click",
@@ -127,7 +154,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
127
154
  }
128
155
  },
129
156
  strategy: "fixed",
130
- placement: "bottom",
157
+ placement,
131
158
  whileElementsMounted: autoUpdate,
132
159
  middleware: [
133
160
  shift({ padding: 8 }),
@@ -181,15 +208,21 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
181
208
  "select-none not-italic rounded-capped shadow-lg outline outline-muted bg-base",
182
209
  )}
183
210
  ref={refs.setFloating}
184
- style={floatingStyles}
211
+ style={{
212
+ zIndex: "var(--z-popover)",
213
+ ...floatingStyles,
214
+ }}
185
215
  {...getFloatingProps()}
186
216
  >
187
217
  <div className="font-medium ">
188
- <p className="py-2 px-4">{message}</p>
218
+ <p className="py-2 px-4" data-ref="confirmMessage">
219
+ {message}
220
+ </p>
189
221
  <div className="flex justify-end py-2 px-4 gap-2">
190
222
  <Button
191
223
  size="sm"
192
224
  variant="link"
225
+ data-ref="confirmCancel"
193
226
  color={color}
194
227
  onClick={() => [clickHandler(false), setIsOpen(false)]}
195
228
  >
@@ -200,6 +233,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
200
233
  variant="solid"
201
234
  color={color}
202
235
  autoFocus
236
+ data-ref="confirmOk"
203
237
  onClick={() => [clickHandler(true), setIsOpen(false)]}
204
238
  >
205
239
  {okLabel ?? t("action.ok")}
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { EMPTY_ARRAY, isArray } from "@react-fabric/utilities";
25
25
  import classNames from "classnames";
26
- import { Children, cloneElement, useCallback, useMemo } from "react";
26
+ import { cloneElement, useCallback } from "react";
27
27
  import { useControlledValue } from "../../hooks/useControlledValue";
28
28
  import {
29
29
  type AriaProps,
@@ -32,13 +32,10 @@ import {
32
32
  type CssProp,
33
33
  type SizeType,
34
34
  } from "../../types";
35
+ import { cloneChildren } from "../../utils";
35
36
  import { type ButtonProps } from "./Button";
36
- import classes from "./Button.module.css";
37
37
 
38
- interface BaseProps
39
- extends CssProp,
40
- AriaProps,
41
- ChildrenProp<React.ReactElement<ButtonProps & { value: string }>> {
38
+ interface BaseProps extends CssProp, AriaProps {
42
39
  /**
43
40
  * vertical orientation
44
41
  */
@@ -69,31 +66,61 @@ interface BaseProps
69
66
  fullWidth?: boolean;
70
67
  }
71
68
 
72
- export type ToggleButtonGroupProps = BaseProps &
73
- (
74
- | {
75
- /**
76
- *
77
- */
78
- value: string;
79
- /**
80
- * change handler
81
- */
82
- onChange?: (value: string) => void;
83
- }
84
- | {
85
- /**
86
- *
87
- */
88
- value: string[];
89
- /**
90
- * change handler
91
- */
92
- onChange?: (value: string[]) => void;
93
- }
94
- );
69
+ export type ToggleButtonGroupValueProps<T> =
70
+ | {
71
+ /**
72
+ *
73
+ */
74
+ value: T;
75
+ /**
76
+ * change handler
77
+ */
78
+ onChange?: (value: T | null) => void;
79
+ }
80
+ | {
81
+ /**
82
+ *
83
+ */
84
+ value: T[];
85
+ /**
86
+ * change handler
87
+ */
88
+ onChange?: (value: T[] | null) => void;
89
+ };
90
+
91
+ export type ToggleButtonGroupProps<T> = BaseProps &
92
+ ChildrenProp<React.ReactElement<ButtonProps & { value: T }>> &
93
+ ToggleButtonGroupValueProps<T>;
95
94
 
96
- export const ToggleButtonGroup = ({
95
+ /**
96
+ * A component that groups toggle buttons together, allowing for consistent styling and behavior across multiple toggle buttons.
97
+ * It supports vertical orientation, various button styles, and can handle properties like size, color, and disabled state.
98
+ * This component is useful for creating toggle button groups that maintain a uniform appearance and functionality,
99
+ * such as toggle switches, selection groups, or multi-select options.
100
+ *
101
+ * @param {ToggleButtonGroupProps} props - The properties for the ToggleButtonGroup component.
102
+ * @returns {JSX.Element} The rendered ToggleButtonGroup component.
103
+ *
104
+ * @example
105
+ * ```jsx
106
+ * <ToggleButtonGroup
107
+ * value={selectedValues}
108
+ * onChange={(newValues) => setSelectedValues(newValues)}
109
+ * variant="outline"
110
+ * color="primary"
111
+ * size="md"
112
+ * rounded
113
+ * fullWidth
114
+ * >
115
+ * <Button value="option1">Option 1</Button>
116
+ * <Button value="option2">Option 2</Button>
117
+ * <Button value="option3">Option 3</Button>
118
+ * </ToggleButtonGroup>
119
+ * ```
120
+ *
121
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-togglebuttongroup--docs} for more details.
122
+ */
123
+ export const ToggleButtonGroup = <T extends AnyObject = string>({
97
124
  vertical,
98
125
  className,
99
126
  children,
@@ -106,23 +133,24 @@ export const ToggleButtonGroup = ({
106
133
  value,
107
134
  onChange,
108
135
  ...aria
109
- }: ToggleButtonGroupProps) => {
110
- const isMultiple = useMemo(() => isArray(value), [value]);
111
- const { currentValue, updateValue } = useControlledValue<typeof value>(
136
+ }: ToggleButtonGroupProps<T>) => {
137
+ const { currentValue, updateValue } = useControlledValue(
112
138
  value,
113
- isArray(value) ? EMPTY_ARRAY : "",
139
+ isArray(value) ? EMPTY_ARRAY : null,
114
140
  );
115
141
 
116
142
  const clickHandler = useCallback(
117
- (cb: AnyObject) => (e: React.MouseEvent<HTMLElement>) => {
118
- let newValue: AnyObject = `${e.currentTarget.dataset.value}`;
143
+ (cb: AnyObject, childValue: T) => (e: React.MouseEvent<HTMLElement>) => {
144
+ let newValue;
119
145
  if (isArray(currentValue)) {
120
- if (currentValue.includes(newValue))
121
- newValue = currentValue.filter((v) => v !== newValue);
122
- else newValue = [...currentValue, newValue];
146
+ if (currentValue.includes(childValue))
147
+ newValue = currentValue.filter((v) => v !== childValue);
148
+ else newValue = [...currentValue, childValue];
149
+ } else {
150
+ newValue = childValue;
123
151
  }
124
152
  updateValue(newValue);
125
- onChange?.(newValue);
153
+ onChange?.(newValue as AnyObject);
126
154
  cb?.(e);
127
155
  },
128
156
  [currentValue, onChange],
@@ -131,16 +159,16 @@ export const ToggleButtonGroup = ({
131
159
  return (
132
160
  <div
133
161
  className={classNames(
134
- classes.buttonGroup,
162
+ "fabric-buttonGroup",
135
163
  className,
136
164
  fullWidth ? "flex" : "inline-flex",
137
165
  "flex-nowrap align-middle",
138
- vertical && classes.vertical,
166
+ vertical && "vertical",
139
167
  vertical && "flex-col",
140
168
  )}
141
169
  {...aria}
142
170
  >
143
- {Children.map(children, (child: AnyObject) =>
171
+ {cloneChildren(children, (child: AnyObject) =>
144
172
  cloneElement(child, {
145
173
  color,
146
174
  size,
@@ -149,10 +177,9 @@ export const ToggleButtonGroup = ({
149
177
  rounded,
150
178
  fullWidth,
151
179
  ...child.props,
152
- onClick: clickHandler(child.props.onClick),
153
- "data-value": child.props.value,
154
- "data-checked": isMultiple
155
- ? currentValue.includes(child.props.value)
180
+ onClick: clickHandler(child.props.onClick, child.props.value),
181
+ "data-checked": isArray(currentValue)
182
+ ? currentValue?.includes(child.props.value)
156
183
  : currentValue === child.props.value,
157
184
  }),
158
185
  )}
@@ -25,13 +25,11 @@ import classNames from "classnames";
25
25
  import {
26
26
  type AriaProps,
27
27
  type ChildrenProp,
28
- type ColorType,
28
+ type ColorState,
29
29
  type CssProp,
30
- type PaletteType,
31
30
  type TestProps,
32
31
  } from "../../types";
33
32
  import { CoreIcons } from "../../types/icons";
34
- import { getBgClass, getBorderClass, getColorClass } from "../../utils";
35
33
  import { Icon } from "../icon/Icon";
36
34
 
37
35
  export interface CalloutProps
@@ -42,11 +40,11 @@ export interface CalloutProps
42
40
  /**
43
41
  * callout color
44
42
  */
45
- color?: ColorType | PaletteType;
43
+ color?: ColorState | "none";
46
44
  /**
47
45
  * legend title
48
46
  */
49
- legend?: string;
47
+ legend?: string | React.ReactElement;
50
48
  /**
51
49
  * callout icon
52
50
  */
@@ -65,6 +63,44 @@ export interface CalloutProps
65
63
  onClose?: () => void;
66
64
  }
67
65
 
66
+ // colors for different callout types
67
+ const colors = {
68
+ none: "bg-base text-tint-900 border-tint-100",
69
+ tint: "bg-tint-50/50 text-tint-800 border-tint-300",
70
+ primary: "bg-primary-50/50 text-primary-800 border-primary-300",
71
+ accent: "bg-accent-50/50 text-accent-800 border-accent-300",
72
+ info: "bg-info-50/50 text-info-800 border-info-300",
73
+ danger: "bg-danger-50/50 text-danger-800 border-danger-300",
74
+ success: "bg-success-50/50 text-success-800 border-success-300",
75
+ warning: "bg-warning-50/50 text-warning-800 border-warning-300",
76
+ };
77
+
78
+ /**
79
+ * A component that displays a callout box with an optional title, icon, and legend.
80
+ * It can be used to highlight important information, warnings, or notices.
81
+ * The callout can be styled with different colors and border styles, and it supports a close action.
82
+ * This component is useful for drawing attention to specific content within a page or application,
83
+ * such as alerts, notifications, or important messages.
84
+ *
85
+ * @param {CalloutProps} props - The properties for the Callout component.
86
+ * @returns {JSX.Element} The rendered Callout component.
87
+ *
88
+ * @example
89
+ * ```jsx
90
+ * <Callout
91
+ * color="primary"
92
+ * legend="Important Notice"
93
+ * title="Attention Required"
94
+ * icon="info"
95
+ * onClose={() => console.log("Callout closed")}
96
+ * >
97
+ * This is an important message that requires your attention.
98
+ * </Callout>
99
+ * // Renders a callout box with a primary color, an icon, a title, and a close button.
100
+ * ```
101
+ *
102
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-callout--docs} for more details.
103
+ */
68
104
  export const Callout = ({
69
105
  children,
70
106
  // @ts-expect-error ignore
@@ -80,27 +116,34 @@ export const Callout = ({
80
116
  return (
81
117
  <fieldset
82
118
  className={classNames(
83
- className,
84
119
  "block rounded-capped border max-w-full relative overflow-hidden mb-4",
85
- getBgClass(color + "-50"),
86
- getColorClass(color + "-700"),
87
- getBorderClass(color + "-300"),
120
+ colors[color],
121
+ className,
88
122
  border === "dashed" && "border-dashed",
89
123
  border === "dotted" && "border-dotted",
90
124
  )}
91
125
  {...aria}
92
126
  >
93
- {legend && <legend className="px-2 mx-4 font-medium">{legend}</legend>}
127
+ {legend && (
128
+ <legend className="px-2 mx-4 font-medium" data-ref="calloutLegend">
129
+ {legend}
130
+ </legend>
131
+ )}
94
132
  <div className={classNames("break-words whitespace-break-spaces p-2")}>
95
133
  <div className="flex flex-nowrap items-center text-xl pe-4 gap-2 mb-4 empty:mb-0">
96
- {icon && <Icon icon={icon} />}
97
- {title && <p className="flex-1">{title}</p>}
134
+ {icon && <Icon icon={icon} data-ref="calloutIcon" />}
135
+ {title && (
136
+ <p className="flex-1" data-ref="calloutTitle">
137
+ {title}
138
+ </p>
139
+ )}
98
140
  </div>
99
141
  <div className="pe-4">{children}</div>
100
142
  </div>
101
143
  {onClose && (
102
144
  <Icon
103
145
  size="md"
146
+ data-ref="calloutClose"
104
147
  className={classNames("absolute end-2", legend ? "top-0" : "top-2")}
105
148
  icon={CoreIcons.close}
106
149
  onClick={onClose}