@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,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,10 @@ 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
- import { CoreIcons } from "../../types/icons";
34
- import { getBgClass, getBorderClass, getColorClass } from "../../utils";
35
32
  import { Icon } from "../icon/Icon";
36
33
 
37
34
  export interface CalloutProps
@@ -42,11 +39,11 @@ export interface CalloutProps
42
39
  /**
43
40
  * callout color
44
41
  */
45
- color?: ColorType | PaletteType;
42
+ color?: ColorState | "none";
46
43
  /**
47
44
  * legend title
48
45
  */
49
- legend?: string;
46
+ legend?: string | React.ReactElement;
50
47
  /**
51
48
  * callout icon
52
49
  */
@@ -65,10 +62,48 @@ export interface CalloutProps
65
62
  onClose?: () => void;
66
63
  }
67
64
 
65
+ // colors for different callout types
66
+ const colors = {
67
+ none: "bg-base text-tint-900 border-tint-100",
68
+ default: "bg-tint-50/50 text-tint-800 border-tint-300",
69
+ muted: "bg-tint-50/50 text-muted border-muted",
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
- // @ts-expect-error ignore
71
- color = "tint",
106
+ color = "default",
72
107
  legend,
73
108
  title,
74
109
  icon,
@@ -80,29 +115,36 @@ export const Callout = ({
80
115
  return (
81
116
  <fieldset
82
117
  className={classNames(
83
- className,
84
118
  "block rounded-capped border max-w-full relative overflow-hidden mb-4",
85
- getBgClass(color + "-50"),
86
- getColorClass(color + "-700"),
87
- getBorderClass(color + "-300"),
119
+ colors[color],
120
+ className,
88
121
  border === "dashed" && "border-dashed",
89
122
  border === "dotted" && "border-dotted",
90
123
  )}
91
124
  {...aria}
92
125
  >
93
- {legend && <legend className="px-2 mx-4 font-medium">{legend}</legend>}
126
+ {legend && (
127
+ <legend className="px-2 mx-4 font-medium" data-ref="calloutLegend">
128
+ {legend}
129
+ </legend>
130
+ )}
94
131
  <div className={classNames("break-words whitespace-break-spaces p-2")}>
95
132
  <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>}
133
+ {icon && <Icon icon={icon} data-ref="calloutIcon" />}
134
+ {title && (
135
+ <p className="flex-1" data-ref="calloutTitle">
136
+ {title}
137
+ </p>
138
+ )}
98
139
  </div>
99
140
  <div className="pe-4">{children}</div>
100
141
  </div>
101
142
  {onClose && (
102
143
  <Icon
103
144
  size="md"
145
+ data-ref="calloutClose"
104
146
  className={classNames("absolute end-2", legend ? "top-0" : "top-2")}
105
- icon={CoreIcons.close}
147
+ icon="icon-[mdi--close]"
106
148
  onClick={onClose}
107
149
  />
108
150
  )}
@@ -24,6 +24,7 @@
24
24
  import classNames from "classnames";
25
25
  import {
26
26
  Children,
27
+ useCallback,
27
28
  useMemo,
28
29
  type DragEvent,
29
30
  type MouseEventHandler,
@@ -36,6 +37,7 @@ import {
36
37
  type HeadFootProps,
37
38
  } from "../../core/headfoot/HeadFoot";
38
39
  import {
40
+ type PolymorphicProps,
39
41
  type AriaProps,
40
42
  type ChildrenProp,
41
43
  type CssProp,
@@ -43,9 +45,8 @@ import {
43
45
  type TestProps,
44
46
  } from "../../types";
45
47
  import { nodeCheck } from "../../utils";
46
- import classes from "./Card.module.css";
47
48
 
48
- export interface CardProps
49
+ interface BaseProps
49
50
  extends CssProp,
50
51
  AriaProps,
51
52
  TestProps,
@@ -59,6 +60,14 @@ export interface CardProps
59
60
  * click handler
60
61
  */
61
62
  onClick?: MouseEventHandler;
63
+ /**
64
+ * drag start handler
65
+ */
66
+ onDragStart?: (
67
+ event: DragEvent,
68
+ dragKey: string,
69
+ dragData?: KeyValue,
70
+ ) => void;
62
71
  /**
63
72
  * body css classname(s)
64
73
  */
@@ -85,20 +94,59 @@ export interface CardProps
85
94
  dragData?: KeyValue;
86
95
  }
87
96
 
88
- export const Card = ({
97
+ export type CardProps<Tag extends React.ElementType = "div"> = BaseProps &
98
+ PolymorphicProps<Tag>;
99
+
100
+ /**
101
+ * A component that displays a card with a header, body, and footer. It can be used to display content in a structured format.
102
+ * It supports various features such as click handling, drag-and-drop functionality, and customizable styles.
103
+ * The Card component is designed to be flexible and can be used in various contexts, such as displaying user profiles, product information, or any other content that benefits from a card layout.
104
+ * The component accepts children that can include a Header, body content, and a Footer.
105
+ * It also supports additional properties for styling, accessibility, and interaction.
106
+ * It can be styled with custom CSS classes and supports features like selection indication and drag-and-drop functionality.
107
+ *
108
+ * @param {CardProps} props - The properties for the Card component.
109
+ * @returns {JSX.Element} The rendered Card component.
110
+ *
111
+ * @example
112
+ * ```jsx
113
+ * <Card
114
+ * className="my-custom-class"
115
+ * bodyClassName="my-body-class"
116
+ * selected={true}
117
+ * selectedRibbon={true}
118
+ * onClick={() => console.log("Card clicked")}
119
+ * onDragStart={(event, key, data) => console.log("Drag started", key, data)}
120
+ * flex={true}
121
+ * draggable={true}
122
+ * dragKey="my-drag-key"
123
+ * dragData={{ id: 1, name: "Card Data" }}
124
+ * aria-label="My Card"
125
+ * >
126
+ * <Header>Card Header</Header>
127
+ * <div>Card Body Content</div>
128
+ * <Footer>Card Footer</Footer>
129
+ * </Card>
130
+ * ```
131
+ *
132
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-card--docs} for more details.
133
+ */
134
+ export const Card = <Tag extends React.ElementType = "div">({
89
135
  children,
90
136
  className,
91
137
  bodyClassName,
92
138
  selected,
93
139
  selectedRibbon,
94
140
  onClick,
141
+ onDragStart,
95
142
  flex,
96
143
  draggable,
97
144
  dragKey,
98
145
  dragData,
99
146
  ref,
147
+ as,
100
148
  ...aria
101
- }: CardProps) => {
149
+ }: CardProps<Tag>) => {
102
150
  const [header, body, footer] = useMemo(() => {
103
151
  return Children.toArray(children as AnyObject).reduce<AnyObject[]>(
104
152
  (ret, node) => {
@@ -113,43 +161,54 @@ export const Card = ({
113
161
  );
114
162
  }, [children]);
115
163
 
164
+ const handleDragStart = useCallback(
165
+ (event: DragEvent) => {
166
+ dragKey && event.dataTransfer?.setData(dragKey, JSON.stringify(dragData));
167
+ dragKey && onDragStart?.(event, dragKey, dragData);
168
+ },
169
+ [onDragStart, dragKey, dragData],
170
+ );
171
+
172
+ const E = as ?? "div";
116
173
  return (
117
174
  <div
118
175
  className={classNames(
119
- classes.cardWrapper,
176
+ "fabric-cardWrapper",
120
177
  "rounded-capped relative grid",
121
178
  flex && "flex-1",
122
- selected && selectedRibbon && classes.selected,
123
- selected && "outline outline-2 outline-accent-500 outline-offset-2",
179
+ selected && selectedRibbon && "selected",
180
+ selected && "outline-1 outline-accent-500 outline-offset-2",
124
181
  )}
125
182
  >
126
183
  <ErrorBoundary>
127
184
  <div
128
185
  className={classNames(
129
- classes.card,
186
+ "fabric-card",
130
187
  className,
131
- "rounded-capped flex flex-col flex-nowrap overflow-hidden",
132
- onClick && classes.clickable,
188
+ "rounded-capped relative flex flex-col flex-nowrap overflow-hidden",
189
+ "href" in aria && "clickable",
190
+ "to" in aria && "clickable",
191
+ onClick && "clickable",
133
192
  )}
134
193
  draggable={draggable}
135
- onDragStart={
136
- !draggable
137
- ? undefined
138
- : (e: DragEvent) =>
139
- dragKey &&
140
- e.dataTransfer?.setData(dragKey, JSON.stringify(dragData))
141
- }
194
+ onDragStart={!draggable ? undefined : handleDragStart}
142
195
  ref={ref}
143
- {...aria}
144
196
  >
145
197
  {header}
146
- <div
147
- role="none"
148
- className={classNames(classes.cardBody, bodyClassName, "flex-1")}
149
- onClick={onClick}
150
- >
151
- {body}
152
- </div>
198
+ <E role="none" onClick={onClick} {...aria} className="contents">
199
+ {body && (
200
+ <object
201
+ type="none"
202
+ className={classNames(
203
+ "fabric-cardBody",
204
+ bodyClassName,
205
+ "flex-1",
206
+ )}
207
+ >
208
+ {body}
209
+ </object>
210
+ )}
211
+ </E>
153
212
  {footer}
154
213
  </div>
155
214
  </ErrorBoundary>
@@ -26,7 +26,6 @@ import { Children, useMemo } from "react";
26
26
  import { type AriaProps, type ChildrenProp, type CssProp } from "../../types";
27
27
  import { nodeCheck } from "../../utils";
28
28
  import { Image, Video } from "../media/Media";
29
- import classes from "./Card.module.css";
30
29
 
31
30
  export interface CardCoverProps extends CssProp, AriaProps, ChildrenProp {
32
31
  /**
@@ -43,12 +42,44 @@ export interface CardCoverProps extends CssProp, AriaProps, ChildrenProp {
43
42
  justify?: "start" | "center" | "end";
44
43
  }
45
44
 
45
+ const scheme = {
46
+ inheritScheme: "inheritScheme",
47
+ light: "light",
48
+ dark: "dark",
49
+ };
50
+
51
+ /**
52
+ * A cover component for cards that can contain media and content.
53
+ * It allows for flexible layout options and supports different color schemes.
54
+ * It can be used to create visually appealing card layouts with media content.
55
+ *
56
+ * @param {CardCoverProps} props - The properties for the CardCover component.
57
+ * @returns {JSX.Element} The rendered CardCover component.
58
+ *
59
+ * @example
60
+ * ```jsx
61
+ * <CardCover
62
+ * height={200}
63
+ * colorScheme="light"
64
+ * justify="center"
65
+ * className="my-custom-class"
66
+ * aria-label="Card Cover"
67
+ * >
68
+ * <Image src="image.jpg" alt="Card Image" />
69
+ * <div>Card Content</div>
70
+ * </CardCover>
71
+ * // Renders a card cover with a height of 200px, light color scheme, centered content, and a custom class name.
72
+ * ```
73
+ *
74
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-card--docs} for more details.
75
+ */
46
76
  export const CardCover = ({
47
77
  className,
48
78
  children,
49
79
  height = 120,
50
80
  justify = "end",
51
- colorScheme,
81
+ // @ts-expect-error ignore
82
+ colorScheme = "inheritScheme",
52
83
  ...aria
53
84
  }: CardCoverProps) => {
54
85
  const [media, body] = useMemo(() => {
@@ -64,8 +95,8 @@ export const CardCover = ({
64
95
  <div
65
96
  style={{ height }}
66
97
  className={classNames(
67
- classes.cardCover,
68
- classes[colorScheme ?? "inheritScheme"],
98
+ "fabric-cardCover",
99
+ scheme[colorScheme],
69
100
  "relative z-0",
70
101
  )}
71
102
  {...aria}
@@ -73,9 +104,8 @@ export const CardCover = ({
73
104
  {media}
74
105
  <div
75
106
  className={classNames(
76
- classes.cardCoverContent,
107
+ "fabric-cardCoverContent",
77
108
  "relative pointer-events-none z-1 flex flex-col flex-nowrap p-4 h-full",
78
- className,
79
109
  `justify-${justify}`,
80
110
  className,
81
111
  )}
@@ -0,0 +1,90 @@
1
+ /*
2
+ * React Fabric
3
+ * @version: 1.0.0
4
+ *
5
+ *
6
+ * The MIT License (MIT)
7
+ * Copyright (c) 2025 Adarsh Pastakia
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
10
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
11
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
12
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
13
+ * subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in all copies or substantial
16
+ * portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+ import classNames from "classnames";
25
+ import {
26
+ Children,
27
+ cloneElement,
28
+ isValidElement,
29
+ useImperativeHandle,
30
+ useState,
31
+ } from "react";
32
+ import { type ChildrenProp, type CssProp, type RefProp } from "../../types";
33
+
34
+ export interface FlipContentRef {
35
+ flipCard: () => void;
36
+ }
37
+
38
+ export interface Props extends ChildrenProp, RefProp<FlipContentRef> {
39
+ //
40
+ }
41
+
42
+ /**
43
+ * A component that allows flipping between front and back content.
44
+ * It uses a ref to control the flipping action, which toggles the visibility of the front and back content.
45
+ * The component accepts children elements, which should be valid React elements representing the front and back content.
46
+ * The front content is expected to be the first child, and the back content is expected to be the second child.
47
+ * The component applies specific classes to the children based on their position (front or back) and manages the flipping state internally.
48
+ * The `flipCard` method can be called to toggle the visibility of the back content.
49
+ *
50
+ * @param {Props} props - The properties for the FlipContent component.
51
+ * @returns {JSX.Element} The rendered FlipContent component.
52
+ *
53
+ * @example
54
+ * ```jsx
55
+ * <FlipContent ref={flipRef}>
56
+ * <div className="front">Front Content</div>
57
+ * <div className="back">Back Content</div>
58
+ * </FlipContent>
59
+ * ```
60
+ *
61
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-flipcontent--docs}
62
+ */
63
+ export const FlipContent = ({ ref, children }: Props) => {
64
+ const [showBack, setShowBack] = useState(false);
65
+
66
+ useImperativeHandle(
67
+ ref,
68
+ () => ({
69
+ flipCard: () => setShowBack(!showBack),
70
+ }),
71
+ [showBack],
72
+ );
73
+
74
+ return (
75
+ <div className="relative flex-1" data-card-flip={showBack}>
76
+ {Children.map(
77
+ children,
78
+ (child, idx) =>
79
+ isValidElement<CssProp>(child) &&
80
+ cloneElement(child, {
81
+ className: classNames(
82
+ child.props?.className ?? "",
83
+ idx === 0 ? "bg-base relative" : "bg-base absolute inset-0",
84
+ ),
85
+ "data-card-flip-face": idx === 0 ? "front" : "back",
86
+ } as AnyObject),
87
+ )}
88
+ </div>
89
+ );
90
+ };