@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
@@ -23,30 +23,32 @@
23
23
 
24
24
  import { isNil, isNumber, isObject, mergeRefs } from "@react-fabric/utilities";
25
25
  import classNames from "classnames";
26
- import { cloneElement, useMemo } from "react";
26
+ import { cloneElement, isValidElement, useMemo } from "react";
27
27
  import {
28
28
  type BadgeType,
29
29
  type ChildProp,
30
30
  type CssProp,
31
- type IconProps,
32
31
  type RefProp,
33
32
  } from "../../types";
34
- import { Icon } from "../icon/Icon";
35
- import classes from "./Badge.module.css";
33
+ import { getIconProps, Icon, type IconProps } from "../icon/Icon";
36
34
 
37
- export interface BadgeProps
38
- extends CssProp,
39
- RefProp,
40
- IconProps,
41
- Partial<ChildProp> {
35
+ export interface BadgeProps extends CssProp, RefProp, Partial<ChildProp> {
42
36
  /**
43
37
  * make wrapper a block element
44
38
  */
45
39
  block?: boolean;
40
+ /**
41
+ * inline badge
42
+ */
43
+ inline?: boolean;
46
44
  /**
47
45
  * badge value
48
46
  */
49
47
  value?: number | string;
48
+ /**
49
+ * icon path or props
50
+ */
51
+ icon?: IconProps;
50
52
  /**
51
53
  * max value for number display
52
54
  */
@@ -69,10 +71,17 @@ export interface BadgeProps
69
71
  | "end";
70
72
  }
71
73
 
74
+ /**
75
+ * Utility function to get badge properties from a badge value or object.
76
+ * It checks if the badge is an object and returns its properties,
77
+ *
78
+ * @param {string | number | BadgeType} badge - The badge value or object.
79
+ * @returns {AnyObject} An object containing badge properties.
80
+ */
72
81
  export const getBadgeProps = (
73
82
  badge?: string | number | BadgeType,
74
83
  ): AnyObject => {
75
- if (isObject(badge)) {
84
+ if (isObject(badge) && !isValidElement(badge)) {
76
85
  return Object.assign({ forButton: true, placement: "" }, badge);
77
86
  } else {
78
87
  return {
@@ -83,6 +92,24 @@ export const getBadgeProps = (
83
92
  }
84
93
  };
85
94
 
95
+ /**
96
+ * A component that displays a badge with a value, icon, and optional ping animation.
97
+ * It can be used to indicate notifications, messages, or other important information.
98
+ * It supports various placements, inline or block display, and custom styling.
99
+ * It can also wrap children elements, allowing for flexible usage in buttons or other components.
100
+ *
101
+ * @param {BadgeProps} props - The properties for the Badge component.
102
+ * @returns {JSX.Element} The rendered Badge component.
103
+ *
104
+ * @example
105
+ * ```jsx
106
+ * <Badge value={5} max={10} ping>
107
+ * <button>Notifications</button>
108
+ * </Badge>
109
+ * ```
110
+ *
111
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-badge--docs} for more details.
112
+ */
86
113
  export const Badge = ({
87
114
  ref,
88
115
  className,
@@ -90,17 +117,18 @@ export const Badge = ({
90
117
  max,
91
118
  ping,
92
119
  block,
120
+ inline,
93
121
  placement = "top-end",
94
122
  children,
95
123
  // @ts-expect-error ignore
96
124
  forButton = false,
97
125
  icon,
98
- iconBg,
99
- iconColor,
100
- rtlFlip,
101
126
  ...rest
102
127
  }: BadgeProps) => {
103
128
  const label = useMemo(() => {
129
+ if (isValidElement(value)) {
130
+ return value;
131
+ }
104
132
  if (!isNil(value)) {
105
133
  if (isNumber(value) && max && value > max) {
106
134
  return `${max}+`;
@@ -120,8 +148,8 @@ export const Badge = ({
120
148
  return (
121
149
  <div
122
150
  className={classNames(
123
- forButton ? "contents" : "relative",
124
- block ? "block" : "inline-block",
151
+ forButton || inline ? "contents" : block ? "block" : "inline-block",
152
+ forButton || inline ? "" : "relative",
125
153
  )}
126
154
  >
127
155
  {children &&
@@ -129,22 +157,22 @@ export const Badge = ({
129
157
  ...rest,
130
158
  ref: innerRef,
131
159
  })}
132
- {(!!ping || label) && (
160
+ {(!!ping || (label ?? icon)) && (
133
161
  <div
134
162
  data-ref="badge"
135
163
  data-ping={ping}
136
164
  data-placement={placement}
137
165
  className={classNames(
138
- classes.badge,
166
+ "fabric-badge",
139
167
  className,
140
- "inline-block p-px min-w-2 min-h-2 text-center select-none rounded-full leading-none z-5 pointer-events-none",
141
- forButton && !placement ? "relative" : "absolute",
168
+ "inline-block p-px min-w-2 min-h-2 text-center select-none rounded-full leading-none z-2 pointer-events-none",
169
+ (forButton && !placement) || inline
170
+ ? "relative flex-content"
171
+ : "absolute",
142
172
  )}
143
173
  >
144
174
  {label && <span className="p-1">{label}</span>}
145
- {icon && (
146
- <Icon icon={icon} bg={iconBg} color={iconColor} rtlFlip={rtlFlip} />
147
- )}
175
+ {icon && <Icon {...getIconProps(icon)} />}
148
176
  </div>
149
177
  )}
150
178
  </div>
@@ -24,14 +24,13 @@
24
24
  import classNames from "classnames";
25
25
  import { Children, useMemo } from "react";
26
26
  import { type AriaProps, type ChildrenProp, type CssProp } from "../../types";
27
- import { Link } from "../../typography/Link";
27
+ import { Anchor } from "../../typography/Anchor";
28
28
  import { Dropdown } from "../dropdown/Dropdown";
29
- import classes from "./Breadcrumbs.module.css";
30
29
 
31
30
  export interface BreadcrumbProps
32
31
  extends CssProp,
33
32
  AriaProps,
34
- ChildrenProp<typeof Link> {
33
+ ChildrenProp<typeof Anchor> {
35
34
  /**
36
35
  * breadcrumb styling
37
36
  */
@@ -46,6 +45,35 @@ export interface BreadcrumbProps
46
45
  color?: "primary" | "accent";
47
46
  }
48
47
 
48
+ /**
49
+ * A navigation component that displays the current page's location within a hierarchy and allows users to navigate back to previous pages.
50
+ * It supports different styles, separators, and colors, and can handle a variable number of breadcrumb links.
51
+ * This component is useful for enhancing user navigation experience in applications with multiple levels of content hierarchy.
52
+ * It automatically manages the display of overflow items when there are too many links to fit in the available space, providing a dropdown for additional links.
53
+ *
54
+ * @param {BreadcrumbProps} props - The properties for the Breadcrumbs component.
55
+ * @returns {JSX.Element} The rendered Breadcrumbs component.
56
+ *
57
+ * @example
58
+ * ```jsx
59
+ * <Breadcrumbs
60
+ * variant="classic"
61
+ * separator=">"
62
+ * color="primary"
63
+ * className="my-custom-class"
64
+ * aria-label="Breadcrumbs"
65
+ * >
66
+ * <Anchor href="/">Home</Anchor>
67
+ * <Anchor href="/products">Products</Anchor>
68
+ * <Anchor href="/products/shoes">Shoes</Anchor>
69
+ * <Anchor href="/products/shoes/sneakers">Sneakers</Anchor>
70
+ * <Anchor href="/products/shoes/sneakers/nike">Nike</Anchor>
71
+ * <Anchor href="/products/shoes/sneakers/nike/airmax">Air Max</Anchor>
72
+ * </Breadcrumbs>
73
+ * ```
74
+ *
75
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-breadcrumbs--docs} for more details.
76
+ */
49
77
  export const Breadcrumbs = ({
50
78
  variant = "classic",
51
79
  className,
@@ -55,7 +83,7 @@ export const Breadcrumbs = ({
55
83
  ...aria
56
84
  }: BreadcrumbProps) => {
57
85
  const [start, overflow, end] = useMemo(() => {
58
- const nodeList = Children.toArray(children as AnyObject);
86
+ const nodeList = Children.toArray(children as AnyObject).filter(Boolean);
59
87
  if (nodeList.length > 7) {
60
88
  return [nodeList.slice(0, 3), nodeList.slice(3, -3), nodeList.slice(-3)];
61
89
  }
@@ -64,10 +92,11 @@ export const Breadcrumbs = ({
64
92
 
65
93
  return (
66
94
  <nav
95
+ data-ref="breadcrumbs"
67
96
  data-color={color}
68
97
  data-variant={variant}
69
98
  className={classNames(
70
- classes.breadcrumbs,
99
+ "fabric-breadcrumbs",
71
100
  className,
72
101
  "flex flex-nowrap items-center",
73
102
  )}
@@ -76,7 +105,7 @@ export const Breadcrumbs = ({
76
105
  {start.map((link, idx) => (
77
106
  <li
78
107
  key={idx}
79
- className={classes.breadcrumbLink}
108
+ className={"fabric-breadcrumbLink"}
80
109
  data-separator={separator}
81
110
  >
82
111
  {link}
@@ -84,12 +113,16 @@ export const Breadcrumbs = ({
84
113
  ))}
85
114
  {overflow && (
86
115
  <Dropdown closeOnClick showArrow>
87
- <li className={classes.breadcrumbLink} data-separator={separator}>
88
- <Link>...</Link>
116
+ <li
117
+ className={"fabric-breadcrumbLink"}
118
+ data-separator={separator}
119
+ data-ref="breadcrumbOverflow"
120
+ >
121
+ <Anchor data->...</Anchor>
89
122
  </li>
90
123
  <div
91
124
  data-color={color}
92
- className={classNames(classes.breadcrumbOverflow, "flex flex-col")}
125
+ className={classNames("fabric-breadcrumbOverflow", "flex flex-col")}
93
126
  >
94
127
  {overflow}
95
128
  </div>
@@ -98,7 +131,7 @@ export const Breadcrumbs = ({
98
131
  {end?.map((link, idx) => (
99
132
  <li
100
133
  key={idx}
101
- className={classes.breadcrumbLink}
134
+ className={"fabric-breadcrumbLink"}
102
135
  data-separator={separator}
103
136
  >
104
137
  {link}
@@ -21,17 +21,17 @@
21
21
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  */
23
23
 
24
- import { isNil, isString, mergeRefs } from "@react-fabric/utilities";
24
+ import { isNil, isObject, isString, mergeRefs } from "@react-fabric/utilities";
25
25
  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";
@@ -42,26 +42,20 @@ import {
42
42
  type AriaProps,
43
43
  type BadgeType,
44
44
  type CallbackReturn,
45
- type ColorType,
45
+ type ColorState,
46
46
  type CssProp,
47
- type IconProps,
48
47
  type PolymorphicProps,
49
48
  type RefProp,
50
49
  type SizeType,
51
50
  type TestProps,
52
51
  type TooltipType,
53
52
  } from "../../types";
53
+ import { getColor } from "../../utils";
54
54
  import { AnimationIndicator } from "../animations/Animations";
55
55
  import { Badge, getBadgeProps } from "../badge/Badge";
56
- import { Icon } from "../icon/Icon";
57
- import classes from "./Button.module.css";
56
+ import { getIconProps, Icon, type IconProps } from "../icon/Icon";
58
57
 
59
- export interface BaseProps
60
- extends CssProp,
61
- AriaProps,
62
- IconProps,
63
- RefProp,
64
- TestProps {
58
+ export interface BaseProps extends CssProp, AriaProps, RefProp, TestProps {
65
59
  /**
66
60
  * primary icon alignment
67
61
  */
@@ -77,7 +71,11 @@ export interface BaseProps
77
71
  /**
78
72
  * button color
79
73
  */
80
- color?: ColorType;
74
+ color?: ColorState;
75
+ /**
76
+ * icon path or props
77
+ */
78
+ icon?: IconProps;
81
79
  /**
82
80
  * button type
83
81
  */
@@ -85,7 +83,7 @@ export interface BaseProps
85
83
  /**
86
84
  * button styling
87
85
  */
88
- variant?: "outline" | "solid" | "link";
86
+ variant?: "outline" | "soft" | "solid" | "link";
89
87
  /**
90
88
  * active state with click disabled
91
89
  */
@@ -136,6 +134,10 @@ export interface BaseProps
136
134
  */
137
135
  hotKey?: string;
138
136
 
137
+ /**
138
+ * prevent click default, useful when button is within a `a` link
139
+ */
140
+ preventDefault?: boolean;
139
141
  stopPropagation?: boolean;
140
142
 
141
143
  onMouseOut?: MouseEventHandler;
@@ -147,12 +149,37 @@ export interface BaseProps
147
149
  onWheel?: WheelEventHandler;
148
150
  }
149
151
 
150
- export type ButtonProps =
152
+ type ButtonTypeProps =
151
153
  | { children: string | React.ReactElement; "aria-label"?: string }
152
154
  | { children?: never; "aria-label": string };
153
155
 
156
+ export type ButtonProps<Tag extends React.ElementType = "button"> = BaseProps &
157
+ ButtonTypeProps &
158
+ PolymorphicProps<Tag>;
159
+
154
160
  /**
155
- * Clickable action button
161
+ * A versatile button component that supports various styles, icons, and actions.
162
+ * It can be used as a primary action button, with options for loading states, action messages, and more.
163
+ * It supports polymorphic rendering, allowing it to be used as different HTML elements (e.g., button, a, div).
164
+ * It also includes features like after action tooltips, badges, and keyboard shortcuts.
165
+ *
166
+ * @param {ButtonProps} props - The properties for the Button component.
167
+ * @returns {JSX.Element} The rendered Button component.
168
+ *
169
+ * @example
170
+ * ```jsx
171
+ * <Button
172
+ * color="primary"
173
+ * size="md"
174
+ * variant="solid"
175
+ * icon="check"
176
+ * onClick={() => console.log("Button clicked!")}
177
+ * >
178
+ * Click Me
179
+ * </Button>
180
+ * ```
181
+ *
182
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-button--docs} for more details.
156
183
  */
157
184
  export const Button = <Tag extends React.ElementType = "button">({
158
185
  as,
@@ -160,13 +187,10 @@ export const Button = <Tag extends React.ElementType = "button">({
160
187
  children,
161
188
  className,
162
189
  active,
163
- color = "primary",
190
+ color = "default",
164
191
  icon,
165
- iconBg,
166
- iconColor,
167
192
  iconAlign = "start",
168
193
  altIcon,
169
- rtlFlip,
170
194
  rounded,
171
195
  size,
172
196
  disabled,
@@ -177,6 +201,7 @@ export const Button = <Tag extends React.ElementType = "button">({
177
201
  spinOnHover,
178
202
  onClick,
179
203
  actionMessage,
204
+ preventDefault,
180
205
  stopPropagation,
181
206
  type = "button",
182
207
  hotKey,
@@ -186,14 +211,16 @@ 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);
223
+ preventDefault && e.preventDefault();
197
224
  stopPropagation && e.stopPropagation();
198
225
  const ret = onClick?.(e);
199
226
  void Promise.resolve(ret).then((b) => {
@@ -203,7 +230,14 @@ export const Button = <Tag extends React.ElementType = "button">({
203
230
  }
204
231
  });
205
232
  },
206
- [onClick, disabled, actionMessage, showActionDoneEvent, stopPropagation],
233
+ [
234
+ onClick,
235
+ disabled,
236
+ preventDefault,
237
+ actionMessage,
238
+ showActionDoneEvent,
239
+ stopPropagation,
240
+ ],
207
241
  );
208
242
 
209
243
  /** ***************** reset done state on timeout *******************/
@@ -230,7 +264,7 @@ export const Button = <Tag extends React.ElementType = "button">({
230
264
  return {
231
265
  content: actionMessage,
232
266
  placement: "top",
233
- color,
267
+ color: `${color}-100`,
234
268
  open: true,
235
269
  } as TooltipType;
236
270
  }
@@ -240,11 +274,15 @@ export const Button = <Tag extends React.ElementType = "button">({
240
274
  return getBadgeProps(badge);
241
275
  }, [badge]);
242
276
 
277
+ const hotKeyHandler = useRef(() => {
278
+ !disabled && refEl.current?.click();
279
+ });
280
+
243
281
  const E = as ?? "button";
244
282
  return (
245
283
  <div
246
284
  className={classNames(
247
- classes.buttonWrapper,
285
+ "fabric-buttonWrapper",
248
286
  className,
249
287
  "relative align-text-top select-none focus-within:z-1",
250
288
  fullWidth ? "block w-full" : "inline-block",
@@ -254,23 +292,18 @@ export const Button = <Tag extends React.ElementType = "button">({
254
292
  data-loading={busy || loading}
255
293
  data-disabled={disabled}
256
294
  >
257
- {hotKey && (
258
- <HotKey
259
- keyCombo={hotKey}
260
- handler={() => !disabled && refEl.current?.click()}
261
- />
262
- )}
295
+ {hotKey && <HotKey keyCombo={hotKey} handler={hotKeyHandler.current} />}
263
296
  <TooltipWrapper {...tooltipProps}>
264
297
  <E
265
298
  ref={mergeRefs(ref, refEl)}
266
299
  role="button"
267
300
  className={classNames(
268
- classes.button,
301
+ "fabric-button",
269
302
  "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
303
  `focus-visible:ring-2 focus-visible:ring-offset-2 buttonInner`,
271
304
  fullWidth && "max-w-full w-full",
272
305
  rounded && "rounded-full",
273
- spinOnHover && classes.spinOnHover,
306
+ spinOnHover && "fabric-spinOnHover",
274
307
  )}
275
308
  type={type}
276
309
  disabled={disabled}
@@ -284,29 +317,26 @@ export const Button = <Tag extends React.ElementType = "button">({
284
317
  >
285
318
  {icon && (
286
319
  <Icon
287
- className={classes.buttonIcon}
288
- icon={icon}
289
- bg={iconBg}
290
- color={iconColor}
291
- rtlFlip={rtlFlip}
320
+ className={"fabric-buttonIcon"}
292
321
  data-align={iconAlign}
322
+ {...getIconProps(icon)}
293
323
  />
294
324
  )}
295
325
  {isValidElement(children) && (
296
- <div className={classes.buttonChild}>{children}</div>
326
+ <div className={"fabric-buttonChild"}>{children}</div>
297
327
  )}
298
328
  {isString(children) && (
299
329
  <label
300
- className={classNames(classes.buttonLabel, "truncate")}
301
- data-colored-icon={!!iconBg}
330
+ className={classNames("fabric-buttonLabel", "truncate")}
331
+ data-colored-icon={isObject(icon) && "bg" in icon}
302
332
  >
303
333
  {children}
304
334
  </label>
305
335
  )}
306
336
  {!isNil(badge) && <Badge {...badgeProps} />}
307
- {hotKey && <HotKeyLabel keyCombo={hotKey} />}
337
+ {hotKey && children && <HotKeyLabel keyCombo={hotKey} />}
308
338
  {altIcon && (
309
- <Icon className={classes.altIcon} icon={altIcon} rtlFlip />
339
+ <Icon className={"fabric-altIcon"} icon={altIcon} rtlFlip />
310
340
  )}
311
341
  </E>
312
342
  </TooltipWrapper>
@@ -314,9 +344,11 @@ export const Button = <Tag extends React.ElementType = "button">({
314
344
  <div
315
345
  className={classNames(
316
346
  "absolute inset-0 overflow-hidden flex justify-center items-center",
317
- `bg-${color}-300`,
318
347
  rounded ? "rounded-full" : "rounded",
319
348
  )}
349
+ style={{
350
+ backgroundColor: getColor(`${color}-300`),
351
+ }}
320
352
  >
321
353
  <AnimationIndicator type="check" color={color} />
322
354
  </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,
@@ -80,7 +80,28 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
80
80
  export type ConfirmButtonProps = ExtendedProps & ButtonProps;
81
81
 
82
82
  /**
83
- * 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.
84
105
  */
85
106
  export const ConfirmButton = <Tag extends React.ElementType = "button">({
86
107
  ref,
@@ -187,15 +208,21 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
187
208
  "select-none not-italic rounded-capped shadow-lg outline outline-muted bg-base",
188
209
  )}
189
210
  ref={refs.setFloating}
190
- style={floatingStyles}
211
+ style={{
212
+ zIndex: "var(--z-popover)",
213
+ ...floatingStyles,
214
+ }}
191
215
  {...getFloatingProps()}
192
216
  >
193
217
  <div className="font-medium ">
194
- <p className="py-2 px-4">{message}</p>
218
+ <p className="py-2 px-4" data-ref="confirmMessage">
219
+ {message}
220
+ </p>
195
221
  <div className="flex justify-end py-2 px-4 gap-2">
196
222
  <Button
197
223
  size="sm"
198
224
  variant="link"
225
+ data-ref="confirmCancel"
199
226
  color={color}
200
227
  onClick={() => [clickHandler(false), setIsOpen(false)]}
201
228
  >
@@ -206,6 +233,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
206
233
  variant="solid"
207
234
  color={color}
208
235
  autoFocus
236
+ data-ref="confirmOk"
209
237
  onClick={() => [clickHandler(true), setIsOpen(false)]}
210
238
  >
211
239
  {okLabel ?? t("action.ok")}