@react-fabric/core 1.0.0-beta.9 → 1.0.2

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 (592) 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/css/components/_animations.css +52 -0
  4. package/css/components/_avatar.css +89 -0
  5. package/css/components/_button.css +218 -0
  6. package/css/components/_buttonGroup.css +62 -0
  7. package/css/components/_callout.css +32 -0
  8. package/css/components/_card.css +167 -0
  9. package/css/components/_chip.css +125 -0
  10. package/css/components/_collapsable.css +32 -0
  11. package/{src/overlays/message/Message.module.css → css/components/_divider.css} +11 -10
  12. package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +3 -2
  13. package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +15 -9
  14. package/css/components/_media.css +102 -0
  15. package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
  16. package/{src/components/meter/Meter.module.css → css/components/_meter.css} +15 -20
  17. package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +9 -9
  18. package/{src/components/panel/Panel.module.css → css/components/_panel.css} +19 -19
  19. package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
  20. package/css/components/_sonner.css +431 -0
  21. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +125 -85
  22. package/css/components/_titlebar.css +48 -0
  23. package/css/components/index.css +47 -0
  24. package/css/core/_aside.css +176 -0
  25. package/css/core/_content.css +31 -0
  26. package/css/core/_errorboundary.css +55 -0
  27. package/css/core/_responsive.css +45 -0
  28. package/css/core/_typography.css +69 -0
  29. package/css/core/_viewport.css +33 -0
  30. package/{src/hooks/useClientService.tsx → css/core/index.css} +7 -7
  31. package/css/reset/_gradients.css +36 -33
  32. package/css/reset/_reset.css +206 -300
  33. package/css/reset/_text.css +31 -61
  34. package/css/reset/_theme.css +467 -81
  35. package/css/reset/index.css +23 -21
  36. package/css/styles.css +30 -23
  37. package/css/theme/_colors.css +445 -0
  38. package/css/theme/_utilities.css +528 -0
  39. package/css/theme/_variants.css +128 -0
  40. package/css/theme/index.css +55 -0
  41. package/dist/cjs/components/actionLabel/ActionLabel.js +25 -12
  42. package/dist/cjs/{overlays → components}/alert/Alert.js +76 -53
  43. package/dist/cjs/components/animations/Indicator.js +66 -0
  44. package/dist/cjs/components/animations/Loader.js +77 -0
  45. package/dist/cjs/components/animations/LoadingBars.js +37 -0
  46. package/dist/cjs/components/animations/LoadingLine.js +59 -0
  47. package/dist/cjs/components/animations/LoadingSpinner.js +37 -0
  48. package/dist/cjs/components/animations/Skeleton.js +88 -0
  49. package/dist/cjs/components/avatar/Avatar.js +41 -20
  50. package/dist/cjs/components/avatar/AvatarGroup.js +37 -16
  51. package/dist/cjs/components/badge/Badge.js +90 -68
  52. package/dist/cjs/components/button/Button.js +198 -136
  53. package/dist/cjs/components/button/ButtonGroup.js +86 -21
  54. package/dist/cjs/components/button/ConfirmButton.js +55 -41
  55. package/dist/cjs/components/button/ToggleButtonGroup.js +84 -32
  56. package/dist/cjs/components/callout/Callout.js +56 -25
  57. package/dist/cjs/components/card/Card.js +90 -42
  58. package/dist/cjs/components/card/CardCover.js +38 -27
  59. package/dist/cjs/components/card/FlipContent.js +47 -0
  60. package/dist/cjs/components/chip/Chip.js +80 -37
  61. package/dist/cjs/components/collapsable/Collapsable.js +62 -31
  62. package/dist/cjs/components/divider/Divider.js +58 -24
  63. package/dist/cjs/components/dropdown/Dropdown.js +92 -45
  64. package/dist/cjs/components/dropdown/DropdownTool.js +6 -7
  65. package/dist/cjs/components/effect/GlassEffect.js +259 -0
  66. package/dist/cjs/components/effect/MatteEffect.js +127 -0
  67. package/dist/cjs/components/effect/StyleEffect.js +43 -0
  68. package/dist/cjs/components/empty/EmptyContent.js +37 -49
  69. package/dist/cjs/components/flyout/Flyout.js +170 -0
  70. package/dist/cjs/components/hotkey/HotKey.js +42 -0
  71. package/dist/cjs/components/icon/Icon.js +81 -80
  72. package/dist/cjs/components/media/Media.js +154 -77
  73. package/dist/cjs/components/menu/ContextMenu.js +45 -20
  74. package/dist/cjs/components/menu/Menu.js +98 -38
  75. package/dist/cjs/components/menu/MenuItem.js +102 -74
  76. package/dist/cjs/components/meter/Meter.js +35 -12
  77. package/dist/cjs/components/modal/Modal.js +152 -0
  78. package/dist/cjs/components/navigator/Navigator.js +81 -36
  79. package/dist/cjs/components/panel/Panel.js +115 -60
  80. package/dist/cjs/components/panel/PanelGroup.js +42 -16
  81. package/dist/cjs/components/panel/PanelStack.js +47 -16
  82. package/dist/cjs/components/pillbox/Pillbox.js +118 -0
  83. package/dist/cjs/components/progress/ProgressBar.js +30 -14
  84. package/dist/cjs/components/progress/ProgressCircle.js +27 -11
  85. package/dist/cjs/components/tabpanel/Tab.js +53 -37
  86. package/dist/cjs/components/tabpanel/TabPanel.js +74 -28
  87. package/dist/cjs/components/titlebar/Titlebar.js +52 -0
  88. package/dist/cjs/components/tooltip/Tooltip.js +180 -0
  89. package/dist/cjs/context/Global.js +159 -80
  90. package/dist/cjs/context/ModalManager.js +60 -0
  91. package/dist/cjs/context/context.js +43 -0
  92. package/dist/cjs/core/areaToggle/AreaToggle.js +41 -0
  93. package/dist/cjs/core/aside/Aside.js +178 -83
  94. package/dist/cjs/core/boundary/ErrorBoundary.js +37 -34
  95. package/dist/cjs/core/boundary/ErrorIcon.js +32 -19
  96. package/dist/cjs/core/content/Content.js +26 -37
  97. package/dist/cjs/core/headfoot/HeadFoot.js +133 -35
  98. package/dist/cjs/core/layout/Layout.js +28 -0
  99. package/dist/cjs/core/responsive/Responsive.js +62 -26
  100. package/dist/cjs/core/theme/ThemeProvider.js +35 -41
  101. package/dist/cjs/core/viewport/Viewport.js +26 -22
  102. package/dist/cjs/hooks/useClientService.js +39 -18
  103. package/dist/cjs/hooks/useContextMenu.js +103 -0
  104. package/dist/cjs/hooks/useControlledValue.js +13 -7
  105. package/dist/cjs/hooks/useDebounce.js +37 -21
  106. package/dist/cjs/hooks/useEffectDebugger.js +79 -60
  107. package/dist/cjs/hooks/useIsDark.js +34 -26
  108. package/dist/cjs/hooks/useIsRtl.js +13 -3
  109. package/dist/cjs/hooks/useNavigator.js +12 -9
  110. package/dist/cjs/hooks/useNotificationService.js +199 -0
  111. package/dist/cjs/hooks/useOverlayService.js +82 -41
  112. package/dist/cjs/hooks/usePropState.js +41 -0
  113. package/dist/cjs/hooks/usePropToggle.js +32 -26
  114. package/dist/cjs/hooks/useResize.js +47 -38
  115. package/dist/cjs/hooks/useResizeObserver.js +26 -7
  116. package/dist/cjs/hooks/useStorage.js +29 -16
  117. package/dist/cjs/i18n/index.js +25 -23
  118. package/dist/cjs/index.js +142 -94
  119. package/dist/cjs/typography/Abbr.js +43 -20
  120. package/dist/cjs/typography/Anchor.js +39 -0
  121. package/dist/cjs/typography/Copy.js +28 -28
  122. package/dist/cjs/typography/Kbd.js +43 -0
  123. package/dist/cjs/typography/Mark.js +34 -17
  124. package/dist/cjs/typography/Text.js +36 -54
  125. package/dist/cjs/typography/Title.js +17 -40
  126. package/dist/cjs/utils/calculateDimensions.js +38 -23
  127. package/dist/cjs/utils/cloneElement.js +64 -0
  128. package/dist/cjs/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  129. package/dist/cjs/utils/getColor.js +42 -36
  130. package/dist/cjs/utils/getIconProps.js +63 -0
  131. package/dist/cjs/utils/getTooltipProps.js +66 -0
  132. package/dist/cjs/utils/nodeCheck.js +4 -4
  133. package/dist/esm/components/actionLabel/ActionLabel.js +25 -12
  134. package/dist/esm/{overlays → components}/alert/Alert.js +73 -50
  135. package/dist/esm/components/animations/Indicator.js +66 -0
  136. package/dist/esm/components/animations/Loader.js +77 -0
  137. package/dist/esm/components/animations/LoadingBars.js +37 -0
  138. package/dist/esm/components/animations/LoadingLine.js +59 -0
  139. package/dist/esm/components/animations/LoadingSpinner.js +37 -0
  140. package/dist/esm/components/animations/Skeleton.js +88 -0
  141. package/dist/esm/components/avatar/Avatar.js +42 -21
  142. package/dist/esm/components/avatar/AvatarGroup.js +37 -16
  143. package/dist/esm/components/badge/Badge.js +93 -70
  144. package/dist/esm/components/button/Button.js +199 -137
  145. package/dist/esm/components/button/ButtonGroup.js +87 -22
  146. package/dist/esm/components/button/ConfirmButton.js +58 -44
  147. package/dist/esm/components/button/ToggleButtonGroup.js +86 -34
  148. package/dist/esm/components/callout/Callout.js +56 -25
  149. package/dist/esm/components/card/Card.js +92 -44
  150. package/dist/esm/components/card/CardCover.js +38 -27
  151. package/dist/esm/components/card/FlipContent.js +47 -0
  152. package/dist/esm/components/chip/Chip.js +81 -38
  153. package/dist/esm/components/collapsable/Collapsable.js +63 -32
  154. package/dist/esm/components/divider/Divider.js +59 -25
  155. package/dist/esm/components/dropdown/Dropdown.js +95 -48
  156. package/dist/esm/components/dropdown/DropdownTool.js +6 -7
  157. package/dist/esm/components/effect/GlassEffect.js +259 -0
  158. package/dist/esm/components/effect/MatteEffect.js +127 -0
  159. package/dist/esm/components/effect/StyleEffect.js +43 -0
  160. package/dist/esm/components/empty/EmptyContent.js +38 -50
  161. package/dist/esm/components/flyout/Flyout.js +170 -0
  162. package/dist/esm/components/hotkey/HotKey.js +42 -0
  163. package/dist/esm/components/icon/Icon.js +83 -82
  164. package/dist/esm/components/media/Media.js +156 -79
  165. package/dist/esm/components/menu/ContextMenu.js +46 -21
  166. package/dist/esm/components/menu/Menu.js +101 -41
  167. package/dist/esm/components/menu/MenuItem.js +98 -70
  168. package/dist/esm/components/meter/Meter.js +36 -13
  169. package/dist/esm/components/modal/Modal.js +152 -0
  170. package/dist/esm/components/navigator/Navigator.js +81 -36
  171. package/dist/esm/components/panel/Panel.js +117 -62
  172. package/dist/esm/components/panel/PanelGroup.js +43 -17
  173. package/dist/esm/components/panel/PanelStack.js +48 -17
  174. package/dist/esm/components/pillbox/Pillbox.js +118 -0
  175. package/dist/esm/components/progress/ProgressBar.js +31 -15
  176. package/dist/esm/components/progress/ProgressCircle.js +28 -12
  177. package/dist/esm/components/tabpanel/Tab.js +54 -38
  178. package/dist/esm/components/tabpanel/TabPanel.js +75 -29
  179. package/dist/esm/components/titlebar/Titlebar.js +52 -0
  180. package/dist/esm/components/tooltip/Tooltip.js +180 -0
  181. package/dist/esm/context/Global.js +161 -78
  182. package/dist/esm/context/ModalManager.js +60 -0
  183. package/dist/esm/context/context.js +40 -0
  184. package/dist/esm/core/areaToggle/AreaToggle.js +41 -0
  185. package/dist/esm/core/aside/Aside.js +179 -84
  186. package/dist/esm/core/boundary/ErrorBoundary.js +38 -35
  187. package/dist/esm/core/boundary/ErrorIcon.js +32 -19
  188. package/dist/esm/core/content/Content.js +26 -37
  189. package/dist/esm/core/headfoot/HeadFoot.js +134 -36
  190. package/dist/esm/core/layout/Layout.js +28 -0
  191. package/dist/esm/core/responsive/Responsive.js +62 -26
  192. package/dist/esm/core/theme/ThemeProvider.js +36 -42
  193. package/dist/esm/core/viewport/Viewport.js +26 -22
  194. package/dist/esm/hooks/useClientService.js +39 -18
  195. package/dist/esm/hooks/useContextMenu.js +103 -0
  196. package/dist/esm/hooks/useControlledValue.js +14 -8
  197. package/dist/esm/hooks/useDebounce.js +37 -21
  198. package/dist/esm/hooks/useEffectDebugger.js +81 -62
  199. package/dist/esm/hooks/useIsDark.js +34 -26
  200. package/dist/esm/hooks/useIsRtl.js +13 -3
  201. package/dist/esm/hooks/useNavigator.js +13 -10
  202. package/dist/esm/hooks/useNotificationService.js +199 -0
  203. package/dist/esm/hooks/useOverlayService.js +83 -42
  204. package/dist/esm/hooks/usePropState.js +40 -0
  205. package/dist/esm/hooks/usePropToggle.js +33 -27
  206. package/dist/esm/hooks/useResize.js +48 -39
  207. package/dist/esm/hooks/useResizeObserver.js +27 -8
  208. package/dist/esm/hooks/useStorage.js +30 -17
  209. package/dist/esm/i18n/index.js +23 -21
  210. package/dist/esm/index.js +87 -44
  211. package/dist/esm/typography/Abbr.js +45 -22
  212. package/dist/esm/typography/Anchor.js +39 -0
  213. package/dist/esm/typography/Copy.js +28 -28
  214. package/dist/esm/typography/Kbd.js +43 -0
  215. package/dist/esm/typography/Mark.js +35 -18
  216. package/dist/esm/typography/Text.js +39 -57
  217. package/dist/esm/typography/Title.js +17 -40
  218. package/dist/esm/utils/calculateDimensions.js +38 -23
  219. package/dist/esm/utils/cloneElement.js +64 -0
  220. package/dist/esm/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  221. package/dist/esm/utils/getColor.js +43 -34
  222. package/dist/esm/utils/getIconProps.js +63 -0
  223. package/dist/esm/utils/getTooltipProps.js +66 -0
  224. package/dist/esm/utils/nodeCheck.js +4 -4
  225. package/dist/types/components/actionLabel/ActionLabel.d.ts +20 -7
  226. package/dist/types/components/alert/Alert.d.ts +74 -0
  227. package/dist/types/components/animations/Indicator.d.ts +57 -0
  228. package/dist/types/components/animations/Loader.d.ts +65 -0
  229. package/dist/types/components/animations/LoadingBars.d.ts +61 -0
  230. package/dist/types/components/animations/LoadingLine.d.ts +43 -0
  231. package/dist/types/components/animations/LoadingSpinner.d.ts +61 -0
  232. package/dist/types/components/animations/Skeleton.d.ts +61 -0
  233. package/dist/types/components/avatar/Avatar.d.ts +70 -19
  234. package/dist/types/components/avatar/AvatarGroup.d.ts +51 -14
  235. package/dist/types/components/badge/Badge.d.ts +64 -14
  236. package/dist/types/components/button/Button.d.ts +72 -55
  237. package/dist/types/components/button/ButtonGroup.d.ts +86 -24
  238. package/dist/types/components/button/ConfirmButton.d.ts +21 -7
  239. package/dist/types/components/button/ToggleButtonGroup.d.ts +88 -44
  240. package/dist/types/components/callout/Callout.d.ts +58 -7
  241. package/dist/types/components/card/Card.d.ts +66 -25
  242. package/dist/types/components/card/CardCover.d.ts +52 -7
  243. package/dist/types/components/card/FlipContent.d.ts +50 -0
  244. package/dist/types/components/chip/Chip.d.ts +72 -20
  245. package/dist/types/components/collapsable/Collapsable.d.ts +55 -15
  246. package/dist/types/components/divider/Divider.d.ts +25 -8
  247. package/dist/types/components/dropdown/Dropdown.d.ts +42 -9
  248. package/dist/types/components/dropdown/DropdownTool.d.ts +22 -4
  249. package/dist/types/components/effect/GlassEffect.d.ts +5 -0
  250. package/dist/types/components/effect/MatteEffect.d.ts +40 -0
  251. package/dist/types/components/effect/StyleEffect.d.ts +27 -0
  252. package/dist/types/components/empty/EmptyContent.d.ts +53 -9
  253. package/dist/types/components/flyout/Flyout.d.ts +60 -0
  254. package/dist/types/components/hotkey/HotKey.d.ts +41 -0
  255. package/dist/types/components/icon/Icon.d.ts +74 -24
  256. package/dist/types/components/media/Media.d.ts +72 -4
  257. package/dist/types/components/menu/ContextMenu.d.ts +22 -5
  258. package/dist/types/components/menu/Menu.d.ts +26 -2
  259. package/dist/types/components/menu/MenuItem.d.ts +19 -4
  260. package/dist/types/components/menu/types.d.ts +23 -14
  261. package/dist/types/components/meter/Meter.d.ts +23 -3
  262. package/dist/types/components/modal/Modal.d.ts +52 -0
  263. package/dist/types/components/navigator/Navigator.d.ts +30 -4
  264. package/dist/types/components/panel/Panel.d.ts +43 -23
  265. package/dist/types/components/panel/PanelGroup.d.ts +22 -3
  266. package/dist/types/components/panel/PanelStack.d.ts +28 -2
  267. package/dist/types/components/pillbox/Pillbox.d.ts +95 -0
  268. package/dist/types/components/progress/ProgressBar.d.ts +19 -4
  269. package/dist/types/components/progress/ProgressCircle.d.ts +18 -4
  270. package/dist/types/components/tabpanel/Tab.d.ts +42 -10
  271. package/dist/types/components/tabpanel/TabPanel.d.ts +47 -7
  272. package/dist/types/components/titlebar/Titlebar.d.ts +54 -0
  273. package/dist/types/components/tooltip/Tooltip.d.ts +76 -0
  274. package/dist/types/context/Global.d.ts +39 -69
  275. package/dist/types/context/ModalManager.d.ts +30 -0
  276. package/dist/types/context/context.d.ts +107 -0
  277. package/dist/types/core/areaToggle/AreaToggle.d.ts +33 -0
  278. package/dist/types/core/aside/Aside.d.ts +75 -20
  279. package/dist/types/core/boundary/ErrorBoundary.d.ts +43 -4
  280. package/dist/types/core/boundary/ErrorIcon.d.ts +38 -1
  281. package/dist/types/core/content/Content.d.ts +38 -6
  282. package/dist/types/core/headfoot/HeadFoot.d.ts +48 -14
  283. package/dist/types/core/layout/Layout.d.ts +38 -0
  284. package/dist/types/core/responsive/Responsive.d.ts +45 -15
  285. package/dist/types/core/theme/ThemeProvider.d.ts +35 -11
  286. package/dist/types/core/viewport/Viewport.d.ts +27 -3
  287. package/dist/types/hooks/useClientService.d.ts +43 -1
  288. package/dist/types/hooks/useContextMenu.d.ts +10 -0
  289. package/dist/types/hooks/useControlledValue.d.ts +28 -4
  290. package/dist/types/hooks/useDebounce.d.ts +38 -2
  291. package/dist/types/hooks/useEffectDebugger.d.ts +73 -4
  292. package/dist/types/hooks/useIsDark.d.ts +6 -0
  293. package/dist/types/hooks/useIsRtl.d.ts +35 -1
  294. package/dist/types/hooks/useNavigator.d.ts +37 -2
  295. package/dist/types/hooks/useNotificationService.d.ts +60 -0
  296. package/dist/types/hooks/useOverlayService.d.ts +28 -8
  297. package/dist/types/hooks/usePropState.d.ts +26 -0
  298. package/dist/types/hooks/usePropToggle.d.ts +41 -7
  299. package/dist/types/hooks/useResize.d.ts +46 -4
  300. package/dist/types/hooks/useResizeObserver.d.ts +45 -3
  301. package/dist/types/hooks/useStorage.d.ts +32 -2
  302. package/dist/types/i18n/index.d.ts +27 -3
  303. package/dist/types/index.d.ts +106 -18
  304. package/dist/types/types/colors.d.ts +29 -0
  305. package/dist/types/types/index.d.ts +216 -76
  306. package/dist/types/typography/Abbr.d.ts +51 -6
  307. package/dist/types/typography/Anchor.d.ts +41 -0
  308. package/dist/types/typography/Copy.d.ts +36 -2
  309. package/dist/types/typography/Kbd.d.ts +40 -0
  310. package/dist/types/typography/Mark.d.ts +44 -7
  311. package/dist/types/typography/Text.d.ts +40 -24
  312. package/dist/types/typography/Title.d.ts +37 -26
  313. package/dist/types/typography/types.d.ts +32 -0
  314. package/dist/types/utils/calculateDimensions.d.ts +50 -6
  315. package/dist/types/utils/cloneElement.d.ts +41 -0
  316. package/dist/types/utils/getBadgeProps.d.ts +16 -0
  317. package/dist/types/utils/getColor.d.ts +43 -4
  318. package/dist/types/utils/getIconProps.d.ts +45 -0
  319. package/dist/types/utils/getTooltipProps.d.ts +47 -0
  320. package/dist/types/utils/index.d.ts +28 -0
  321. package/dist/types/utils/nodeCheck.d.ts +1 -2
  322. package/package.json +30 -21
  323. package/src/components/actionLabel/ActionLabel.tsx +28 -39
  324. package/src/components/alert/Alert.tsx +261 -0
  325. package/src/components/animations/Indicator.tsx +75 -0
  326. package/src/components/animations/Loader.tsx +89 -0
  327. package/src/components/animations/LoadingBars.tsx +70 -0
  328. package/src/components/animations/LoadingLine.tsx +51 -0
  329. package/src/components/animations/LoadingSpinner.tsx +70 -0
  330. package/src/components/animations/Skeleton.tsx +100 -0
  331. package/src/components/avatar/Avatar.tsx +89 -70
  332. package/src/components/avatar/AvatarGroup.tsx +65 -74
  333. package/src/components/badge/Badge.tsx +141 -108
  334. package/src/components/button/Button.tsx +223 -238
  335. package/src/components/button/ButtonGroup.tsx +117 -77
  336. package/src/components/button/ConfirmButton.tsx +60 -90
  337. package/src/components/button/ToggleButtonGroup.tsx +134 -120
  338. package/src/components/callout/Callout.tsx +81 -59
  339. package/src/components/card/Card.tsx +131 -113
  340. package/src/components/card/CardCover.tsx +61 -61
  341. package/src/components/card/FlipContent.tsx +78 -0
  342. package/src/components/chip/Chip.tsx +139 -99
  343. package/src/components/collapsable/Collapsable.tsx +79 -77
  344. package/src/components/divider/Divider.tsx +74 -53
  345. package/src/components/dropdown/Dropdown.tsx +109 -106
  346. package/src/components/dropdown/DropdownTool.tsx +29 -12
  347. package/src/components/effect/GlassEffect.tsx +221 -0
  348. package/src/components/effect/MatteEffect.tsx +99 -0
  349. package/src/components/effect/StyleEffect.tsx +36 -0
  350. package/src/components/empty/EmptyContent.tsx +60 -99
  351. package/src/components/flyout/Flyout.tsx +257 -0
  352. package/src/components/hotkey/HotKey.tsx +57 -0
  353. package/src/components/icon/Icon.tsx +131 -130
  354. package/src/components/media/Media.tsx +184 -154
  355. package/src/components/menu/ContextMenu.tsx +56 -39
  356. package/src/components/menu/Menu.tsx +121 -84
  357. package/src/components/menu/MenuItem.tsx +87 -69
  358. package/src/components/menu/types.ts +23 -28
  359. package/src/components/meter/Meter.tsx +34 -17
  360. package/src/components/modal/Modal.tsx +226 -0
  361. package/src/components/navigator/Navigator.tsx +93 -38
  362. package/src/components/panel/Panel.tsx +123 -131
  363. package/src/components/panel/PanelGroup.tsx +49 -43
  364. package/src/components/panel/PanelStack.tsx +63 -62
  365. package/src/components/pillbox/Pillbox.tsx +208 -0
  366. package/src/components/progress/ProgressBar.tsx +33 -33
  367. package/src/components/progress/ProgressCircle.tsx +29 -37
  368. package/src/components/tabpanel/Tab.tsx +84 -73
  369. package/src/components/tabpanel/TabPanel.tsx +102 -51
  370. package/src/components/titlebar/Titlebar.tsx +115 -0
  371. package/src/components/tooltip/Tooltip.tsx +255 -0
  372. package/src/context/Global.tsx +148 -148
  373. package/src/context/ModalManager.tsx +68 -0
  374. package/src/context/context.ts +111 -0
  375. package/src/core/areaToggle/AreaToggle.tsx +45 -0
  376. package/src/core/aside/Aside.tsx +200 -155
  377. package/src/core/boundary/ErrorBoundary.tsx +50 -68
  378. package/src/core/boundary/ErrorIcon.tsx +34 -32
  379. package/src/core/content/Content.tsx +41 -50
  380. package/src/core/headfoot/HeadFoot.tsx +162 -81
  381. package/src/core/layout/Layout.tsx +54 -0
  382. package/src/core/responsive/Responsive.tsx +91 -98
  383. package/src/core/theme/ThemeProvider.tsx +45 -56
  384. package/src/core/viewport/Viewport.tsx +25 -27
  385. package/src/hooks/useClientService.ts +47 -0
  386. package/src/hooks/useContextMenu.tsx +131 -0
  387. package/src/hooks/useControlledValue.ts +47 -0
  388. package/src/hooks/useDebounce.ts +41 -24
  389. package/src/hooks/useEffectDebugger.ts +105 -94
  390. package/src/hooks/useIsDark.ts +10 -24
  391. package/src/hooks/useIsRtl.ts +32 -20
  392. package/src/hooks/useNavigator.tsx +41 -26
  393. package/src/hooks/useNotificationService.tsx +239 -0
  394. package/src/hooks/useOverlayService.tsx +67 -20
  395. package/src/hooks/usePropState.ts +52 -0
  396. package/src/hooks/usePropToggle.ts +54 -47
  397. package/src/hooks/useResize.ts +69 -45
  398. package/src/hooks/useResizeObserver.ts +59 -34
  399. package/src/hooks/useStorage.ts +40 -48
  400. package/src/i18n/index.ts +24 -25
  401. package/src/index.ts +115 -44
  402. package/src/types/colors.ts +49 -0
  403. package/src/types/global.d.ts +40 -17
  404. package/src/types/index.ts +243 -155
  405. package/src/typography/Abbr.tsx +62 -59
  406. package/src/typography/Anchor.tsx +63 -0
  407. package/src/typography/Copy.tsx +39 -29
  408. package/src/typography/Kbd.tsx +50 -0
  409. package/src/typography/Mark.tsx +56 -51
  410. package/src/typography/Text.tsx +57 -128
  411. package/src/typography/Title.tsx +36 -108
  412. package/src/typography/types.ts +27 -17
  413. package/src/utils/calculateDimensions.ts +50 -40
  414. package/src/utils/cloneElement.ts +61 -0
  415. package/src/{core/content/Content.module.css → utils/getBadgeProps.ts} +20 -15
  416. package/src/utils/getColor.ts +42 -36
  417. package/src/utils/getIconProps.ts +58 -0
  418. package/src/utils/getTooltipProps.ts +59 -0
  419. package/src/utils/index.ts +23 -17
  420. package/src/utils/nodeCheck.ts +4 -8
  421. package/css/flags.rect.css +0 -1607
  422. package/css/flags.wavy.css +0 -1606
  423. package/css/index.js +0 -250
  424. package/css/tailwind/colors.ts +0 -158
  425. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  426. package/dist/cjs/components/animations/Animations.js +0 -142
  427. package/dist/cjs/components/animations/Animations.module.css +0 -1
  428. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  429. package/dist/cjs/components/badge/Badge.module.css +0 -1
  430. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +0 -71
  431. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  432. package/dist/cjs/components/button/Button.module.css +0 -1
  433. package/dist/cjs/components/card/Card.module.css +0 -1
  434. package/dist/cjs/components/chip/Chip.module.css +0 -1
  435. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  436. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  437. package/dist/cjs/components/icon/Icon.module.css +0 -1
  438. package/dist/cjs/components/media/Media.module.css +0 -1
  439. package/dist/cjs/components/menu/Menu.module.css +0 -1
  440. package/dist/cjs/components/meter/Meter.module.css +0 -1
  441. package/dist/cjs/components/panel/Panel.module.css +0 -1
  442. package/dist/cjs/components/progress/Progress.module.css +0 -1
  443. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  444. package/dist/cjs/context/NotificationCenter.js +0 -254
  445. package/dist/cjs/core/aside/Aside.module.css +0 -1
  446. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  447. package/dist/cjs/core/content/Content.module.css +0 -1
  448. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  449. package/dist/cjs/core/page/Page.js +0 -66
  450. package/dist/cjs/core/page/Page.module.css +0 -1
  451. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  452. package/dist/cjs/core/section/Section.module.css +0 -1
  453. package/dist/cjs/core/theme/Theme.module.css +0 -1
  454. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  455. package/dist/cjs/hotkeys/HotKey.js +0 -47
  456. package/dist/cjs/hotkeys/HotKeyLabel.js +0 -52
  457. package/dist/cjs/hotkeys/HotKeyWrapper.js +0 -98
  458. package/dist/cjs/hotkeys/commons.js +0 -56
  459. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  460. package/dist/cjs/overlays/flyout/Flyout.js +0 -152
  461. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  462. package/dist/cjs/overlays/message/Message.js +0 -84
  463. package/dist/cjs/overlays/message/Message.module.css +0 -1
  464. package/dist/cjs/overlays/modal/Modal.js +0 -132
  465. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  466. package/dist/cjs/overlays/toast/Toast.js +0 -166
  467. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  468. package/dist/cjs/overlays/tooltip/Tooltip.js +0 -133
  469. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  470. package/dist/cjs/types/icons.js +0 -200
  471. package/dist/cjs/typography/Link.js +0 -55
  472. package/dist/cjs/typography/Typography.module.css +0 -1
  473. package/dist/cjs/typography/types.js +0 -42
  474. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  475. package/dist/esm/components/animations/Animations.js +0 -138
  476. package/dist/esm/components/animations/Animations.module.css +0 -1
  477. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  478. package/dist/esm/components/badge/Badge.module.css +0 -1
  479. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +0 -71
  480. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  481. package/dist/esm/components/button/Button.module.css +0 -1
  482. package/dist/esm/components/card/Card.module.css +0 -1
  483. package/dist/esm/components/chip/Chip.module.css +0 -1
  484. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  485. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  486. package/dist/esm/components/icon/Icon.module.css +0 -1
  487. package/dist/esm/components/media/Media.module.css +0 -1
  488. package/dist/esm/components/menu/Menu.module.css +0 -1
  489. package/dist/esm/components/meter/Meter.module.css +0 -1
  490. package/dist/esm/components/panel/Panel.module.css +0 -1
  491. package/dist/esm/components/progress/Progress.module.css +0 -1
  492. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  493. package/dist/esm/context/NotificationCenter.js +0 -254
  494. package/dist/esm/core/aside/Aside.module.css +0 -1
  495. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  496. package/dist/esm/core/content/Content.module.css +0 -1
  497. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  498. package/dist/esm/core/page/Page.js +0 -66
  499. package/dist/esm/core/page/Page.module.css +0 -1
  500. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  501. package/dist/esm/core/section/Section.module.css +0 -1
  502. package/dist/esm/core/theme/Theme.module.css +0 -1
  503. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  504. package/dist/esm/hotkeys/HotKey.js +0 -47
  505. package/dist/esm/hotkeys/HotKeyLabel.js +0 -52
  506. package/dist/esm/hotkeys/HotKeyWrapper.js +0 -96
  507. package/dist/esm/hotkeys/commons.js +0 -56
  508. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  509. package/dist/esm/overlays/flyout/Flyout.js +0 -152
  510. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  511. package/dist/esm/overlays/message/Message.js +0 -84
  512. package/dist/esm/overlays/message/Message.module.css +0 -1
  513. package/dist/esm/overlays/modal/Modal.js +0 -132
  514. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  515. package/dist/esm/overlays/toast/Toast.js +0 -166
  516. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  517. package/dist/esm/overlays/tooltip/Tooltip.js +0 -132
  518. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  519. package/dist/esm/types/icons.js +0 -202
  520. package/dist/esm/typography/Link.js +0 -55
  521. package/dist/esm/typography/Typography.module.css +0 -1
  522. package/dist/esm/typography/types.js +0 -41
  523. package/dist/types/components/animations/Animations.d.ts +0 -23
  524. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +0 -17
  525. package/dist/types/components/index.d.ts +0 -33
  526. package/dist/types/context/NotificationCenter.d.ts +0 -11
  527. package/dist/types/core/index.d.ts +0 -9
  528. package/dist/types/core/page/Page.d.ts +0 -23
  529. package/dist/types/core/section/Section.d.ts +0 -7
  530. package/dist/types/hotkeys/HotKey.d.ts +0 -2
  531. package/dist/types/hotkeys/HotKeyLabel.d.ts +0 -2
  532. package/dist/types/hotkeys/HotKeyWrapper.d.ts +0 -11
  533. package/dist/types/hotkeys/commons.d.ts +0 -28
  534. package/dist/types/overlays/alert/Alert.d.ts +0 -41
  535. package/dist/types/overlays/flyout/Flyout.d.ts +0 -57
  536. package/dist/types/overlays/index.d.ts +0 -6
  537. package/dist/types/overlays/message/Message.d.ts +0 -21
  538. package/dist/types/overlays/modal/Modal.d.ts +0 -53
  539. package/dist/types/overlays/toast/Toast.d.ts +0 -33
  540. package/dist/types/overlays/tooltip/Tooltip.d.ts +0 -18
  541. package/dist/types/types/icons.d.ts +0 -197
  542. package/dist/types/typography/Link.d.ts +0 -25
  543. package/dist/types/typography/index.d.ts +0 -6
  544. package/src/components/animations/Animations.module.css +0 -253
  545. package/src/components/animations/Animations.tsx +0 -196
  546. package/src/components/avatar/Avatar.module.css +0 -90
  547. package/src/components/badge/Badge.module.css +0 -165
  548. package/src/components/breadcrumbs/Breadcrumbs.module.css +0 -189
  549. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -109
  550. package/src/components/button/Button.module.css +0 -375
  551. package/src/components/card/Card.module.css +0 -152
  552. package/src/components/chip/Chip.module.css +0 -118
  553. package/src/components/collapsable/Collapsable.module.css +0 -30
  554. package/src/components/icon/Icon.module.css +0 -71
  555. package/src/components/index.ts +0 -62
  556. package/src/components/media/Media.module.css +0 -112
  557. package/src/context/NotificationCenter.tsx +0 -223
  558. package/src/core/aside/Aside.module.css +0 -231
  559. package/src/core/boundary/ErrorBoundary.module.css +0 -65
  560. package/src/core/headfoot/HeadFoot.module.css +0 -38
  561. package/src/core/index.ts +0 -32
  562. package/src/core/page/Page.module.css +0 -46
  563. package/src/core/page/Page.tsx +0 -101
  564. package/src/core/responsive/Responsive.module.css +0 -85
  565. package/src/core/section/Section.module.css +0 -28
  566. package/src/core/section/Section.tsx +0 -54
  567. package/src/core/theme/Theme.module.css +0 -30
  568. package/src/core/viewport/Viewport.module.css +0 -32
  569. package/src/hooks/useControlledValue.tsx +0 -43
  570. package/src/hotkeys/HotKey.tsx +0 -39
  571. package/src/hotkeys/HotKeyLabel.tsx +0 -61
  572. package/src/hotkeys/HotKeyWrapper.tsx +0 -137
  573. package/src/hotkeys/commons.ts +0 -74
  574. package/src/overlays/alert/Alert.tsx +0 -252
  575. package/src/overlays/flyout/Flyout.tsx +0 -283
  576. package/src/overlays/index.ts +0 -29
  577. package/src/overlays/message/Message.tsx +0 -107
  578. package/src/overlays/modal/Modal.tsx +0 -244
  579. package/src/overlays/toast/Toast.module.css +0 -37
  580. package/src/overlays/toast/Toast.tsx +0 -216
  581. package/src/overlays/tooltip/Tooltip.module.css +0 -53
  582. package/src/overlays/tooltip/Tooltip.tsx +0 -200
  583. package/src/types/icons.ts +0 -426
  584. package/src/typography/Link.tsx +0 -113
  585. package/src/typography/Typography.module.css +0 -68
  586. package/src/typography/index.ts +0 -29
  587. /package/dist/cjs/i18n/{ar.json.js → ar/core.json.js} +0 -0
  588. /package/dist/cjs/i18n/{en.json.js → en/core.json.js} +0 -0
  589. /package/dist/esm/i18n/{ar.json.js → ar/core.json.js} +0 -0
  590. /package/dist/esm/i18n/{en.json.js → en/core.json.js} +0 -0
  591. /package/src/i18n/{ar.json → ar/core.json} +0 -0
  592. /package/src/i18n/{en.json → en/core.json} +0 -0
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@react-fabric/core",
3
- "version": "1.0.0-beta.9",
3
+ "version": "1.0.2",
4
4
  "description": "RUF: Core package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
7
- "repository": "https://github.com/adarshpastakia/react-ui-framework/tree/main/packages/core",
7
+ "repository": "https://github.com/adarshpastakia/react-fabric/tree/main/packages/core",
8
8
  "source": "src/index.ts",
9
9
  "main": "dist/cjs/index.js",
10
10
  "module": "dist/esm/index.js",
@@ -24,8 +24,6 @@
24
24
  "registry": "https://registry.npmjs.org/"
25
25
  },
26
26
  "scripts": {
27
- "makelink": "yarn link",
28
- "removelink": "yarn unlink",
29
27
  "prebuild": "rm -rf ./dist",
30
28
  "build:dts": "tsc -p ./tsconfig.build.json",
31
29
  "build:rollup": "rollup -c ../../rollup.config.mjs",
@@ -35,26 +33,37 @@
35
33
  "watch": "npm-run-all -p watch:rollup watch:dts"
36
34
  },
37
35
  "dependencies": {
38
- "@floating-ui/react": "^0.26.24",
39
- "@react-fabric/utilities": "^1.0.0-beta.9",
40
- "@tailwindcss/container-queries": "^0.1.1",
41
- "@tailwindcss/forms": "^0.5.7",
42
- "@tailwindcss/typography": "^0.5.13",
43
- "boring-avatars": "^1.10.2",
44
- "classnames": "^2.5.1",
45
- "color": "^4.2.3",
46
- "resize-observer-polyfill": "^1.5.1",
47
- "tailwindcss": "^3.4.4"
36
+ "@floating-ui/react": "~0.27.20",
37
+ "@fontsource-variable/alexandria": "~5.3.0",
38
+ "@fontsource-variable/inconsolata": "~5.3.0",
39
+ "@fontsource-variable/merriweather": "~5.3.0",
40
+ "@fontsource-variable/noto-kufi-arabic": "~5.3.0",
41
+ "@fontsource-variable/noto-sans": "~5.3.0",
42
+ "@fontsource/noto-color-emoji": "~5.3.0",
43
+ "@iconify-icon/react": "~3.0.5",
44
+ "@iconify-json/line-md": "~1.2.16",
45
+ "@iconify-json/mdi": "~1.2.3",
46
+ "@iconify-json/mdi-light": "~1.2.2",
47
+ "@iconify-json/svg-spinners": "~1.2.4",
48
+ "@iconify/tailwind4": "~1.2.3",
49
+ "@react-fabric/utilities": "^1.0.2",
50
+ "@tailwindcss/postcss": "~4.3.3",
51
+ "@tanstack/react-hotkeys": "~0.10.0",
52
+ "boring-avatars": "~2.0.4",
53
+ "iconify-icon": "~3.0.2",
54
+ "resize-observer-polyfill": "~1.5.1",
55
+ "sonner": "~2.0.7",
56
+ "tailwindcss": "~4.3.3"
48
57
  },
49
58
  "peerDependencies": {
50
- "i18next": "^23.15.1",
51
- "react": ">=18.0.0 <20.0.0",
52
- "react-dom": ">=18.0.0 <20.0.0",
53
- "react-i18next": "^15.0.2"
59
+ "i18next": "~26.3.6",
60
+ "react": "~19.3.0",
61
+ "react-dom": "~19.3.0",
62
+ "react-i18next": "~17.0.11"
54
63
  },
55
64
  "engines": {
56
- "node": ">=18.12.0",
57
- "npm": ">=8.19.0"
65
+ "node": ">=24.0.0",
66
+ "npm": ">=11.0.0"
58
67
  },
59
- "gitHead": "3dde23444bcebf68c30198af5c2fef55572da38f"
68
+ "gitHead": "b9fc477b5b3a13b782977bf17762027f376ac30e"
60
69
  }
@@ -21,22 +21,12 @@
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 classNames from "classnames";
25
- import { useCallback, type ReactElement } from "react";
26
- import {
27
- type AriaProps,
28
- type ChildProp,
29
- type CssProp,
30
- type TestProps,
31
- } from "../../types";
24
+ import { cn } from "@react-fabric/utilities";
25
+ import { useCallback } from "react";
26
+ import type { ChildProp, CssProp, TestProps } from "../../types";
32
27
  import { ButtonGroup } from "../button/ButtonGroup";
33
- import classes from "./ActionLabel.module.css";
34
28
 
35
- export interface ActionLabelProps
36
- extends AriaProps,
37
- CssProp,
38
- ChildProp,
39
- TestProps {
29
+ export interface ActionLabelProps extends CssProp, ChildProp, TestProps {
40
30
  /**
41
31
  * action buttons aligment
42
32
  */
@@ -48,24 +38,30 @@ export interface ActionLabelProps
48
38
  /**
49
39
  * buttons
50
40
  */
51
- actions: ReactElement[];
41
+ actions: React.ReactElement[];
52
42
  }
53
43
 
54
44
  /**
55
- * A simple label component with additional actions (like a button or icon) that becomes visible only when the user hovers over the label,
56
- * useful in interfaces where space is limited or where it's important to keep the UI clean and focused
45
+ * A label with action buttons that can be aligned to the start or end.
46
+ * This component is useful for displaying a label with associated actions, such as buttons, that can be aligned based on the design requirements.
47
+ * It automatically calculates the width of the action buttons to ensure that the label text does not overflow the container.
48
+ * It uses CSS variables to manage the width of the label text dynamically based on the action buttons' width.
49
+ * This component is designed to be flexible and can be used in various contexts where a label with actions is needed.
50
+ * It supports custom alignment, disabled states, and can be easily styled with additional CSS classes.
51
+ *
52
+ * @example
53
+ * ```jsx
54
+ * <ActionLabel
55
+ * actions={[<Button>Action 1</Button>, <Button>Action 2</Button>]}
56
+ * align="end"
57
+ * >
58
+ * Label Text
59
+ * </ActionLabel>
60
+ * ```
57
61
  */
58
- export const ActionLabel = ({
59
- children,
60
- className,
61
- align,
62
- actions,
63
- disabled,
64
- ...rest
65
- }: ActionLabelProps) => {
66
- /**
67
- * calculate the width of the action box, width will be used for a delayed transition on hover
68
- */
62
+ export function ActionLabel({ children, className, align, actions, disabled, ...rest }: ActionLabelProps) {
63
+ // Calculate the width of the action buttons to set a CSS variable
64
+ // This is used to ensure the label text does not overflow the container
69
65
  const calculateBasis = useCallback((el: HTMLElement | null) => {
70
66
  if (el) {
71
67
  const clone = el.cloneNode(true) as HTMLElement;
@@ -82,25 +78,18 @@ export const ActionLabel = ({
82
78
 
83
79
  return (
84
80
  <div
85
- className={classNames(
86
- className,
87
- classes.actionLabel,
88
- "flex overflow-hidden gap-1 items-center cursor-default select-none",
89
- )}
81
+ className={cn(className, "fabric-actionLabel", "flex overflow-hidden gap-1 items-center cursor-default select-none")}
90
82
  data-disabled={disabled}
91
83
  {...rest}
92
84
  >
93
85
  <ButtonGroup
94
86
  ref={calculateBasis}
95
- className={classNames(
96
- classes.actions,
97
- "overflow-hidden flex-content",
98
- align === "end" && "order-2",
99
- )}
87
+ data-inner-clickable
88
+ className={cn("fabric-actions", "overflow-hidden flex-content", align === "end" && "order-2")}
100
89
  >
101
90
  {actions}
102
91
  </ButtonGroup>
103
92
  <div className="flex-initial truncate">{children}</div>
104
93
  </div>
105
94
  );
106
- };
95
+ }
@@ -0,0 +1,261 @@
1
+ /*
2
+ * React Fabric
3
+ * @version: 1.0.0
4
+ *
5
+ *
6
+ * The MIT License (MIT)
7
+ * Copyright (c) 2024 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 {
25
+ FloatingFocusManager,
26
+ FloatingOverlay,
27
+ FloatingPortal,
28
+ useDismiss,
29
+ useFloating,
30
+ useInteractions,
31
+ useRole,
32
+ } from "@floating-ui/react";
33
+ import { cn } from "@react-fabric/utilities";
34
+ import { useLayoutEffect, useMemo, useState } from "react";
35
+ import { useTranslation } from "react-i18next";
36
+ import { AnimationIndicator } from "../../components/animations/Indicator";
37
+ import { Button } from "../../components/button/Button";
38
+ import { Icon } from "../../components/icon/Icon";
39
+ import type { ColorBase } from "../../types";
40
+ import { Title } from "../../typography/Title";
41
+ import { getColor } from "../../utils";
42
+
43
+ interface AlertBaseProps {
44
+ /**
45
+ * toast type
46
+ */
47
+ type?: "alert" | "confirm" | "prompt";
48
+ /**
49
+ * svg path / webfont className / 1-4 letter text
50
+ */
51
+ icon?: string;
52
+ /**
53
+ * flip icon in rtl
54
+ */
55
+ rtlFlip?: boolean;
56
+ /**
57
+ * toast title
58
+ */
59
+ title?: string;
60
+ /**
61
+ * toast text
62
+ */
63
+ message: string | React.ReactElement;
64
+ /**
65
+ * theme color
66
+ */
67
+ color?: ColorBase;
68
+ /**
69
+ * extra action button
70
+ */
71
+ actions?: React.ReactNode;
72
+ /**
73
+ * ok label
74
+ */
75
+ okLabel?: string;
76
+ /**
77
+ * cancel label
78
+ */
79
+ cancelLabel?: string;
80
+ /**
81
+ * placeholder for prompt
82
+ */
83
+ placeholder?: string;
84
+ /**
85
+ * default value for prompt
86
+ */
87
+ defaultValue?: string;
88
+ multiline?: boolean;
89
+ }
90
+
91
+ export type AlertProps = AlertBaseProps &
92
+ (
93
+ | {
94
+ type?: "alert";
95
+ okLabel?: string;
96
+ cancelLabel?: never;
97
+ placeholder?: never;
98
+ defaultValue?: never;
99
+ multiline?: never;
100
+ }
101
+ | {
102
+ type: "confirm";
103
+ okLabel?: string;
104
+ cancelLabel?: string;
105
+ placeholder?: never;
106
+ defaultValue?: never;
107
+ multiline?: never;
108
+ }
109
+ | {
110
+ type: "prompt";
111
+ okLabel?: string;
112
+ cancelLabel?: string;
113
+ placeholder?: string;
114
+ defaultValue?: string;
115
+ multiline?: boolean;
116
+ }
117
+ );
118
+
119
+ export function Alert({
120
+ title,
121
+ message,
122
+ color = "primary",
123
+ icon,
124
+ rtlFlip,
125
+ actions,
126
+ onClose,
127
+ type = "alert",
128
+ multiline,
129
+ okLabel,
130
+ cancelLabel,
131
+ placeholder,
132
+ defaultValue,
133
+ }: AlertProps & { onClose?: (ret?: string | boolean) => void }) {
134
+ const { t } = useTranslation("core");
135
+ const [value, setValue] = useState(() => defaultValue);
136
+ const { refs, context } = useFloating({
137
+ open: true,
138
+ onOpenChange: () => {
139
+ handleClose(false);
140
+ },
141
+ });
142
+ const dismiss = useDismiss(context, {
143
+ outsidePressEvent: "mousedown",
144
+ escapeKey: true,
145
+ });
146
+ const role = useRole(context);
147
+
148
+ // Merge all the interactions into prop getters
149
+ const { getFloatingProps } = useInteractions([dismiss, role]);
150
+
151
+ const iconType = useMemo(() => {
152
+ if (icon) return <Icon icon={icon} size="md" rtlFlip={rtlFlip} color={`${color}-600`} />;
153
+ switch (color) {
154
+ case "danger":
155
+ return <AnimationIndicator type="cross" className="text-danger-600" />;
156
+ case "success":
157
+ return <AnimationIndicator type="check" className="text-success-600" />;
158
+ case "warning":
159
+ return <AnimationIndicator type="exclaim" className="text-warning-600" />;
160
+ default:
161
+ return <AnimationIndicator type={type === "confirm" ? "question" : "info"} className={`text-${color}-600`} />;
162
+ }
163
+ }, [color, type, icon, rtlFlip]);
164
+
165
+ const handleClose = (ret?: string | boolean) => {
166
+ if (refs.floating.current) refs.floating.current.dataset.show = "false";
167
+ setTimeout(() => {
168
+ onClose?.(ret);
169
+ }, 250);
170
+ };
171
+ useLayoutEffect(() => {
172
+ const tmr = setTimeout(() => refs.floating.current && (refs.floating.current.dataset.show = "true"), 100);
173
+ return () => {
174
+ clearTimeout(tmr);
175
+
176
+ try {
177
+ // call on close to kill the promise if unloaded without using close actions
178
+ onClose?.(false);
179
+ } catch {
180
+ //
181
+ }
182
+ };
183
+ }, [refs.floating, onClose]);
184
+
185
+ const E = multiline ? "textarea" : "input";
186
+
187
+ return (
188
+ <FloatingPortal>
189
+ <FloatingOverlay
190
+ lockScroll
191
+ style={{ zIndex: "var(--z-overlay-mask)" }}
192
+ className="bg-tint-100/50 backdrop-blur-sm grid place-items-center"
193
+ >
194
+ <FloatingFocusManager context={context} modal>
195
+ <dialog
196
+ role="alertdialog"
197
+ className={cn(
198
+ "fabric-alert",
199
+ "grid bg-default border-2 pointer-events-auto overflow-hidden rounded-capped select-none",
200
+ "min-w-72 max-w-sm py-2 px-6 relative outline-0 shadow-lg",
201
+ )}
202
+ style={{
203
+ borderColor: getColor(`${color}-300`),
204
+ }}
205
+ ref={(el) => refs.setFloating(el)}
206
+ {...getFloatingProps()}
207
+ >
208
+ <div className={cn("area-[icon] self-start text-2xl")}>{iconType}</div>
209
+ <div className="area-[message]">
210
+ {title && <Title className="font-medium">{title}</Title>}
211
+ <div>{message}</div>
212
+ </div>
213
+ {type === "prompt" && (
214
+ <E
215
+ value={value}
216
+ placeholder={placeholder}
217
+ className={cn(`area-[input] appearance-none outline-0 border rounded w-full px-2 py-1`)}
218
+ style={
219
+ {
220
+ borderColor: getColor(`${color}-200`),
221
+ "--tw-ring-color": getColor(`${color}-500`),
222
+ } as React.CSSProperties
223
+ }
224
+ ref={(e: HTMLInputElement | HTMLTextAreaElement | null) => {
225
+ if (e !== null) setTimeout(() => e.focus(), 100);
226
+ }}
227
+ onBlur={(e) => e.target.focus()}
228
+ onChange={(e) => setValue(e.target.value)}
229
+ onKeyDown={(e) => !e.shiftKey && e.key === "Enter" && handleClose(value)}
230
+ />
231
+ )}
232
+ <div className="flex gap-1 justify-center flex-nowrap pt-2 area-[actions]">
233
+ {type === "confirm" && (
234
+ <Button size="sm" variant="link" color={color} onClick={() => handleClose(false)}>
235
+ {cancelLabel ?? t("action.cancel", "Cancel")}
236
+ </Button>
237
+ )}
238
+ <div className="contents" onClickCapture={(e) => handleClose((e.target as HTMLElement).dataset.value)}>
239
+ {actions}
240
+ </div>
241
+ <Button size="sm" variant="solid" color={color} onClick={() => handleClose(type === "prompt" ? value : true)}>
242
+ {okLabel ?? t("action.ok", "OK")}
243
+ </Button>
244
+ </div>
245
+ <div className="absolute top-2 inset-e-0">
246
+ <Button
247
+ size="sm"
248
+ variant="link"
249
+ className="m-0"
250
+ color={color}
251
+ onClick={() => handleClose(false)}
252
+ icon="icon-[mdi--close]"
253
+ aria-label="close"
254
+ />
255
+ </div>
256
+ </dialog>
257
+ </FloatingFocusManager>
258
+ </FloatingOverlay>
259
+ </FloatingPortal>
260
+ );
261
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * React Fabric
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ */
25
+
26
+ import { Icon as Iconify } from "@iconify-icon/react";
27
+ import { shortHash } from "@react-fabric/utilities";
28
+ import type { CssProp } from "../../types";
29
+ import { Icon } from "../icon/Icon";
30
+
31
+ export interface AnimationIndicatorProps extends CssProp {
32
+ /**
33
+ * The indicator icon type. Each type maps to a distinct status icon.
34
+ * Defaults to `"info"`.
35
+ */
36
+ type?: "info" | "check" | "cross" | "question" | "exclaim";
37
+ }
38
+
39
+ const ANIMATION_ICONS = {
40
+ info: <Iconify icon="line-md:alert-circle" className="rotate-180" />,
41
+ // <AlertCircleIcon height="1.25em" width="1.25em" className="rotate-180" />,
42
+ check: <Iconify icon="line-md:confirm-circle" />,
43
+ cross: <Iconify icon="line-md:close-circle" />,
44
+ question: <Iconify icon="line-md:question-circle" />,
45
+ exclaim: <Iconify icon="line-md:alert-circle" />,
46
+ };
47
+
48
+ /**
49
+ * Animated status indicator that renders a themed icon with animation.
50
+ *
51
+ * Renders one of five predefined icon types (check, cross, question, exclaim, info)
52
+ * using the `Icon` component. Useful for displaying success, error, help, alert,
53
+ * or info states in forms, notifications, and feedback UI.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * import { AnimationIndicator } from "@react-fabric/core";
58
+ *
59
+ * // Success indicator
60
+ * <AnimationIndicator type="check" color="success-500" />
61
+ *
62
+ * // Error indicator
63
+ * <AnimationIndicator type="cross" color="error-500" />
64
+ *
65
+ * // Warning indicator
66
+ * <AnimationIndicator type="exclaim" color="warning-500" />
67
+ *
68
+ * // Help indicator
69
+ * <AnimationIndicator type="question" />
70
+ * ```
71
+ */
72
+ export function AnimationIndicator({ type, ...props }: AnimationIndicatorProps) {
73
+ // Map the type to its corresponding icon and delegate rendering to the Icon component
74
+ return <Icon key={shortHash()} {...props} icon={ANIMATION_ICONS[type || "info"]} />;
75
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * React Fabric
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ */
25
+
26
+ import { cn } from "@react-fabric/utilities";
27
+ import type { CustomColors } from "../../types/colors";
28
+ import { getColor } from "../../utils";
29
+
30
+ export interface AnimationLoaderProps {
31
+ /**
32
+ * CSS class name for the icon to display (e.g., an iconify icon class like `"icon-[mdi--loading]"`).
33
+ */
34
+ icon: string;
35
+
36
+ /**
37
+ * Blur intensity for the background mask. Defaults to no blur.
38
+ */
39
+ maskBlur?: "sm" | "md" | "lg";
40
+
41
+ /**
42
+ * Icon color. Accepts palette tokens or any CSS color. Defaults to `"tint-300"`.
43
+ */
44
+ color?: CustomColors;
45
+
46
+ /**
47
+ * Icon size. Accepts CSS size values (px, em, rem). Defaults to `"2rem"`.
48
+ */
49
+ size?: number | string;
50
+ }
51
+
52
+ /**
53
+ * Loading overlay that renders an animated icon over a blurred backdrop.
54
+ *
55
+ * Renders a centered icon inside a frosted-glass mask, typically used to
56
+ * indicate loading or disabled states. The mask covers its parent element
57
+ * and prevents user interaction while visible.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * import { AnimationLoader } from "@react-fabric/core";
62
+ *
63
+ * // Loading overlay with medium blur
64
+ * <div style={{ position: "relative" }}>
65
+ * <p>Page content</p>
66
+ * <AnimationLoader icon="icon-[mdi--loading]" maskBlur="md" />
67
+ * </div>
68
+ *
69
+ * // Custom color and size
70
+ * <AnimationLoader icon="icon-[mdi--loading]" color="primary-500" size="3rem" />
71
+ * ```
72
+ */
73
+ export function AnimationLoader({ color = "tint-500", size = "2rem", icon, maskBlur }: AnimationLoaderProps) {
74
+ return (
75
+ <div
76
+ className={cn(
77
+ "fabric-loader-mask",
78
+ "absolute inset-0 z-10 flex justify-center items-center cursor-wait",
79
+ maskBlur === "sm" && "backdrop-blur-sm",
80
+ maskBlur === "md" && "backdrop-blur-md",
81
+ maskBlur === "lg" && "backdrop-blur-lg",
82
+ )}
83
+ >
84
+ <div data-ref="loader" className="outline outline-tint-300/50 p-4 bg-white/50 dark:bg-black/50 backdrop-blur-xs leading-0 rounded">
85
+ <div className={cn(icon, "aspect-square")} style={{ fontSize: size, color: getColor(color) }} />
86
+ </div>
87
+ </div>
88
+ );
89
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * React Fabric
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ */
25
+
26
+ import type { CustomColors } from "../../types";
27
+ import { AnimationLoader } from "./Loader";
28
+
29
+ export interface LoadingBarsProps {
30
+ /**
31
+ * Spinner color. Accepts palette tokens or any CSS color.
32
+ */
33
+ color?: CustomColors;
34
+
35
+ /**
36
+ * Spinner size. Accepts CSS size values (px, em, rem).
37
+ */
38
+ size?: number | string;
39
+
40
+ /**
41
+ * Blur intensity for the background mask. Defaults to no blur.
42
+ */
43
+ maskBlur?: "sm" | "md" | "lg";
44
+ }
45
+
46
+ /**
47
+ * Animated loading indicator that renders a "bars scale fade" spinner.
48
+ *
49
+ * A thin wrapper around `AnimationLoader` that provides a pre-configured
50
+ * bars-style loading animation. Useful for inline loading indicators in
51
+ * forms, tables, or content areas.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * import { LoadingBars } from "@react-fabric/core";
56
+ *
57
+ * // Basic bars spinner
58
+ * <LoadingBars />
59
+ *
60
+ * // Custom color and size
61
+ * <LoadingBars color="primary-500" size="2rem" />
62
+ *
63
+ * // With backdrop blur
64
+ * <LoadingBars maskBlur="sm" />
65
+ * ```
66
+ */
67
+ export function LoadingBars(props: LoadingBarsProps) {
68
+ // Delegate to AnimationLoader with a pre-configured bars-scale-fade icon
69
+ return <AnimationLoader icon="icon-[svg-spinners--bars-scale-fade]" {...props} />;
70
+ }