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

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 +72 -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 +72 -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 +29 -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 +76 -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
@@ -1,116 +1,120 @@
1
- /*
1
+ /**
2
2
  * React Fabric
3
- * @version: 1.0.0
4
- *
5
- *
6
- * The MIT License (MIT)
7
- * Copyright (c) 2024 Adarsh Pastakia
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
8
6
  *
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:
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:
14
13
  *
15
- * The above copyright notice and this permission notice shall be included in all copies or substantial
16
- * portions of the Software.
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
17
16
  *
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.
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.
22
24
  */
23
25
  /* istanbul ignore file */
24
26
 
25
- import { type Placement } from "@floating-ui/react";
26
- import { type JSXElementConstructor, type Ref } from "react";
27
+ /**
28
+ * Core type definitions for React Fabric.
29
+ *
30
+ * This module exports shared TypeScript types and interfaces used across the library,
31
+ * including CSS prop types, test prop types, polymorphic component props,
32
+ * and utility types for working with React elements and nested object keys.
33
+ */
27
34
 
28
- export type SizeType = "xs" | "sm" | "md" | "lg" | "xl";
35
+ export type { ColorBase, ColorPalette, ColorTints, ColorUnion, CustomColors } from "./colors";
29
36
 
30
- export type SizeTypeWithZero = "xs" | "sm" | "md" | "lg" | "xl" | 0;
37
+ export type CSSSizeType = string | number;
31
38
 
32
- export type ColorType =
33
- | "primary"
34
- | "accent"
35
- | "info"
36
- | "danger"
37
- | "success"
38
- | "warning";
39
+ export type SizeType = "xs" | "sm" | "md" | "lg" | "xl";
39
40
 
40
- export type PaletteType =
41
- | "scarlet"
42
- | "pumpkin"
43
- | "marigold"
44
- | "avacado"
45
- | "jade"
46
- | "denim"
47
- | "iris"
48
- | "lilac"
49
- | "coral"
50
- | "wood"
51
- | "silver"
52
- | "steel"
53
- | "olive"
54
- | "sand";
41
+ export type SizeWithCustom = SizeType | (string & {}) | number;
55
42
 
56
- export type ColorWithGrays = ColorType | "invert" | "dimmed" | "muted";
43
+ export interface PositionObject {
44
+ top: number;
45
+ left: number;
46
+ }
57
47
 
58
- export const ThemeColors = [
59
- "primary",
60
- "accent",
61
- "info",
62
- "danger",
63
- "success",
64
- "warning",
65
- "invert",
66
- "dimmed",
67
- "muted",
68
- "gray",
69
- "dark",
70
- "light",
71
- ];
48
+ export interface SizeObject {
49
+ width: number;
50
+ height: number;
51
+ }
72
52
 
73
- export interface TooltipType {
74
- /**
75
- * tooltip content
76
- */
77
- content?: string | JSX.Element;
78
- /**
79
- * tooltip color
80
- */
81
- color?: ColorType;
53
+ export interface ScrollObject extends PositionObject, SizeObject {
54
+ scrollWidth?: number;
55
+ scrollHeight: number;
56
+ }
57
+
58
+ /**
59
+ * CSS prop types
60
+ * This interface defines the properties that can be used for styling React components using CSS class names.
61
+ * It includes an optional "className" property for applying CSS class names directly to the component,
62
+ * and an optional "classNames" property which is an object map for component items, allowing for more granular styling.
63
+ * The "dir" property specifies the text direction, which can be either "ltr" (left-to-right) or "rtl" (right-to-left), providing support for internationalization and different writing systems.
64
+ * By using this interface, developers can easily apply consistent styling to their components while also supporting various text directions.
65
+ */
66
+ export interface CssProp {
82
67
  /**
83
- * tooltip placement
68
+ * css classname(s)
84
69
  */
85
- placement?: Placement;
70
+ className?: string;
71
+ dir?: "ltr" | "rtl";
86
72
  }
87
73
 
88
- export interface BadgeType {
74
+ export interface CssPropWithMap<T extends Record<string, string> = never> extends CssProp {
89
75
  /**
90
- * badge value
76
+ * css classname(s) object map for component items
91
77
  */
92
- value?: number | string;
78
+ classNames?: Partial<T>;
79
+ }
80
+
81
+ export interface HeightProps {
93
82
  /**
94
- * max value for number display
83
+ * initial height
95
84
  */
96
- max?: number;
85
+ height?: number | string;
97
86
  /**
98
- * ping animation
87
+ * max height
99
88
  */
100
- ping?: boolean;
89
+ maxHeight?: number | string;
101
90
  /**
102
- * badge CSS className
91
+ * min height
103
92
  */
104
- className?: string;
93
+ minHeight?: number | string;
105
94
  }
106
95
 
107
- export interface CssProp {
96
+ export interface WidthProps {
108
97
  /**
109
- * css classname(s)
98
+ * initial width
110
99
  */
111
- className?: string;
100
+ width?: number | string;
101
+ /**
102
+ * max width
103
+ */
104
+ maxWidth?: number | string;
105
+ /**
106
+ * min width
107
+ */
108
+ minWidth?: number | string;
112
109
  }
113
110
 
111
+ /**
112
+ * Test prop types
113
+ * This interface defines the properties that can be used for testing purposes in React components.
114
+ * It includes optional data attributes for test id and test value, which can be used to identify and interact with elements during testing.
115
+ * The "data-testid" attribute is commonly used to provide a unique identifier for an element, while the "data-test-value" attribute can hold any additional information relevant to the test.
116
+ * By using these properties, developers can write more robust and maintainable tests that target specific elements in the DOM.
117
+ */
114
118
  export interface TestProps {
115
119
  /**
116
120
  * data attribute for test id
@@ -119,73 +123,98 @@ export interface TestProps {
119
123
  /**
120
124
  * data attribute for test value
121
125
  */
122
- "data-test-value"?: AnyObject;
126
+ "data-test-value"?: string;
123
127
  }
124
128
 
125
- export type Elements<T> =
126
- | React.ReactElement<T>
127
- | React.ReactPortal
128
- | React.ReactNode
129
- | string
130
- | number
131
- | boolean
132
- | null
133
- | undefined;
134
-
135
- export type AriaProps = React.AriaAttributes;
136
-
137
- /**
138
- * For wrapping components
139
- */
140
-
141
- export interface RefProp<T = HTMLElement> {
142
- ref?: Ref<T>;
143
- }
144
-
145
- /* *********** */
146
-
147
- // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
148
- export type CallbackReturn<T = unknown> =
149
- | undefined
150
- | T
151
- | Promise<T | undefined>;
152
-
153
- export type ReactTag = keyof JSX.IntrinsicElements | JSXElementConstructor<any>;
154
-
155
- export type PropsOf<AsTag extends ReactTag> = AsTag extends React.ElementType
156
- ? Omit<React.ComponentProps<AsTag>, "ref">
157
- : never;
158
-
159
- export type PolymorphicProps<AsTag extends ReactTag> = Omit<
160
- PropsOf<AsTag>,
161
- "children" | "as" | "className" | "onClick"
162
- > & {
129
+ export interface HtmlEvents {
163
130
  /**
164
- * The component used for the root node.
165
- * Either a string to use a HTML element or a component.
131
+ * Focus handler for the button.
166
132
  */
167
- as?: AsTag;
168
- };
133
+ onFocus?: (e: React.FocusEvent) => void;
134
+ /**
135
+ * Blur handler for the button.
136
+ */
137
+ onBlur?: (e: React.FocusEvent) => void;
138
+ /**
139
+ * Click handler for the button.
140
+ */
141
+ onClick?: (e?: React.MouseEvent) => CallbackReturn;
142
+ /**
143
+ * Mouse down handler for the button.
144
+ */
145
+ onMouseDown?: (e: React.MouseEvent) => void;
146
+ /**
147
+ * Mouse up handler for the button.
148
+ */
149
+ onMouseUp?: (e: React.MouseEvent) => void;
150
+ /**
151
+ * Mouse over handler for the button.
152
+ */
153
+ onMouseOver?: (e: React.MouseEvent) => void;
154
+ /**
155
+ * Mouse move handler for the button.
156
+ */
157
+ onMouseMove?: (e: React.MouseEvent) => void;
158
+ /**
159
+ * Mouse enter handler for the button.
160
+ */
161
+ onMouseEnter?: (e: React.MouseEvent) => void;
162
+ /**
163
+ * Mouse leave handler for the button.
164
+ */
165
+ onMouseLeave?: (e: React.MouseEvent) => void;
166
+ }
169
167
 
170
- export interface IconProps {
168
+ export interface Draggable {
171
169
  /**
172
- * svg path / image url
170
+ * make card draggable
173
171
  */
174
- icon?: string;
172
+ draggable?: boolean;
175
173
  /**
176
- * flip icon in rtl
174
+ * drag event data key
177
175
  */
178
- rtlFlip?: boolean;
176
+ dragKey?: string;
179
177
  /**
180
- * icon background color
178
+ * drag event data
181
179
  */
182
- iconBg?: ColorType | string;
180
+ dragData?: KeyValue;
181
+ onDrag?: (e: React.DragEvent) => void;
182
+ onDragStart?: (e: React.DragEvent, dragKey: string, dragData?: KeyValue) => void;
183
+ onDragEnd?: (e: React.DragEvent) => void;
184
+ }
185
+
186
+ export interface Droppable {
183
187
  /**
184
- * icon color
188
+ * droppable types. true for all, string[] for specific types
185
189
  */
186
- iconColor?: ColorType | string;
190
+ dropable?: true | string[];
191
+ onDragEnter?: (e: React.DragEvent) => void;
192
+ onDragOver?: (e: React.DragEvent) => void;
193
+ onDragLeave?: (e: React.DragEvent) => void;
194
+ onDrop?: (e: React.DragEvent) => void;
195
+ }
196
+
197
+ /**
198
+ * Utility type for ref props in React components.
199
+ * This type defines a generic interface for components that accept a ref prop, allowing the ref to be of any specified type T (defaulting to HTMLElement).
200
+ * The ref prop is optional and can be used to access the underlying DOM element or component instance.
201
+ * By using this type, you can ensure that your components are properly typed when accepting refs, improving type safety and developer experience.
202
+ */
203
+ export interface RefProp<T = HTMLElement> {
204
+ ref?: React.Ref<T>;
187
205
  }
188
206
 
207
+ export type ModalProps<P = unknown, T extends AnyObject = AnyObject> = P & {
208
+ onClose?: (args: T | null) => void;
209
+ };
210
+
211
+ /**
212
+ * Utility type for callback return values, allowing for void, undefined, a specific type T, or a Promise that resolves to T or undefined.
213
+ * This type is useful for defining the return type of callback functions that may perform asynchronous operations or may not return a value at all.
214
+ * By including void and undefined, it allows for flexibility in how the callback is implemented, while still providing the option to return a specific type or a Promise.
215
+ */
216
+ export type CallbackReturn<T = unknown> = void | undefined | T | Promise<T | undefined>;
217
+
189
218
  export interface CollapseProps {
190
219
  /**
191
220
  * Allow collapsing
@@ -200,6 +229,7 @@ export interface CollapseProps {
200
229
  */
201
230
  onCollapse?: (state: boolean) => void;
202
231
  }
232
+
203
233
  export interface ExpandProps {
204
234
  /**
205
235
  * Allow expanding
@@ -215,32 +245,90 @@ export interface ExpandProps {
215
245
  onExpand?: (state: boolean) => void;
216
246
  }
217
247
 
218
- export interface TooltipProp {
219
- /**
220
- * floating tooltip
221
- */
222
- tooltip?: string | TooltipType;
223
- }
248
+ export type ChildNode<T = unknown> = React.ReactElement<T> | React.ReactNode | false | undefined | null;
224
249
 
225
- export interface ChildProp<T = JSX.Element> {
226
- children: Elements<T>;
250
+ export interface ChildProp<T = unknown> {
251
+ children: ChildNode<T>;
227
252
  }
228
253
 
229
- export interface ChildrenProp<T = JSX.Element> {
230
- children: Elements<T> | Array<Elements<T>>;
254
+ export interface ChildrenProp<T = unknown> {
255
+ children: ChildNode<T> | Array<ChildNode<T>>;
231
256
  }
232
257
 
233
- export interface PositionObject {
234
- top: number;
235
- left: number;
236
- }
258
+ /* *********** */
237
259
 
238
- export interface SizeObject {
239
- width: number;
240
- height: number;
241
- }
260
+ /**
261
+ * React tag types
262
+ */
263
+ export type ReactTag = keyof React.JSX.IntrinsicElements | React.JSXElementConstructor<unknown>;
242
264
 
243
- export interface ScrollObject extends PositionObject, SizeObject {
244
- scrollWidth?: number;
245
- scrollHeight: number;
246
- }
265
+ /**
266
+ * Utility type to extract props of a given React tag, excluding the ref prop.
267
+ * If the tag is a valid React element type, it returns the component props without the ref.
268
+ * Otherwise, it returns never.
269
+ */
270
+ export type PropsOf<AsTag extends ReactTag> = AsTag extends React.ElementType
271
+ ? Omit<React.ComponentProps<AsTag>, "ref">
272
+ : never;
273
+
274
+ /**
275
+ * Utility type for polymorphic component props.
276
+ * It combines the props of the specified React tag (excluding "as" and HTML attributes)
277
+ * with an optional "as" prop that allows specifying the component or HTML element to render.
278
+ * This type is useful for creating flexible components that can render different elements based on the "as" prop.
279
+ * The resulting props include all props of the specified tag, except for "as",
280
+ * which are handled separately to avoid conflicts.
281
+ */
282
+ export type PolymorphicProps<AsTag extends ReactTag> = Omit<PropsOf<AsTag>, "as" | "children" | "onClick" | "onDragStart"> & {
283
+ /**
284
+ * The component used for the root node.
285
+ * Either a string to use a HTML element or a component.
286
+ */
287
+ as?: AsTag;
288
+ };
289
+
290
+ /**
291
+ * Utility type to extract the element type from an array or array-like type.
292
+ * If the type is a readonly array, it returns the type of its elements.
293
+ * If the type is an array-like object, it also returns the type of its elements.
294
+ * If the type is undefined or does not match either case, it returns undefined.
295
+ */
296
+ export type ArrayType<T extends readonly unknown[] | ArrayLike<unknown> | undefined> = T extends readonly unknown[]
297
+ ? T[number]
298
+ : T extends ArrayLike<unknown>
299
+ ? T[number]
300
+ : undefined;
301
+
302
+ /**
303
+ * Utility type to make all properties of a type required, but still allow them to be optional if they were originally optional.
304
+ * This is useful for cases where you want to ensure that all properties are present, but still want to allow for optional properties to be omitted.
305
+ * The type iterates over each property of the input type T and checks if it is required or optional.
306
+ * If the property is required, it keeps it as is. If the property is optional, it allows it to be either the original type or undefined.
307
+ */
308
+ export type Complete<T> = {
309
+ [P in keyof Required<T>]: Pick<T, P> extends Required<Pick<T, P>> ? T[P] : T[P] | undefined;
310
+ };
311
+
312
+ /**
313
+ * Utility type to recursively extract nested keys from an object type T.
314
+ * It checks if T is an object and iterates over its keys. For each key K, it checks if the corresponding value is also an object.
315
+ * If it is, it recursively extracts the nested keys and combines them with the current key using dot notation.
316
+ * If the value is not an object, it simply returns the current key. The resulting type is a union of all possible nested keys in the object.
317
+ * This type is useful for scenarios where you want to access deeply nested properties of an object using a string path.
318
+ */
319
+ export type NestedKeys<T> = T extends object
320
+ ? {
321
+ [K in keyof T]: K extends string | number
322
+ ? T[K] extends object
323
+ ? // Check for array type explicitly and handle it
324
+ T[K] extends readonly unknown[]
325
+ ? T[K][number] extends object
326
+ ? // Array of objects/items: return key with array index notation and recurse
327
+ `${K}.${NestedKeys<T[K][number]>}` | `${K}`
328
+ : `${K}`
329
+ : // Standard object: return key with dot notation and recurse
330
+ `${K}.${NestedKeys<T[K]>}` | `${K}`
331
+ : `${K}`
332
+ : never;
333
+ }[keyof T]
334
+ : "";
@@ -1,34 +1,34 @@
1
- /*
1
+ /**
2
2
  * React Fabric
3
- * @version: 1.0.0
4
- *
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
5
6
  *
6
- * The MIT License (MIT)
7
- * Copyright (c) 2024 Adarsh Pastakia
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:
8
13
  *
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
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
14
16
  *
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.
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.
22
24
  */
23
25
 
24
- import { isEmpty, isString, tokenize } from "@react-fabric/utilities";
25
- import classNames from "classnames";
26
+ import { cn, isEmpty, isString, tokenize } from "@react-fabric/utilities";
26
27
  import { Fragment, useCallback, useMemo } from "react";
28
+ import { Tooltip } from "../components/tooltip/Tooltip";
27
29
  import { useMemoDebugger } from "../hooks/useEffectDebugger";
28
- import { Tooltip, getTooltipProps } from "../overlays/tooltip/Tooltip";
29
- import { type ChildProp, type ColorType, type CssProp } from "../types";
30
- import { getColor, getColorClass } from "../utils";
31
- import classes from "./Typography.module.css";
30
+ import type { ChildProp, CssProp, CustomColors } from "../types";
31
+ import { getColor, getTooltipProps } from "../utils";
32
32
 
33
33
  interface AbbrTextProps {
34
34
  children: string;
@@ -37,32 +37,23 @@ interface AbbrTextProps {
37
37
  content?: string;
38
38
  }
39
39
 
40
- const AbbrText = ({ color, children, tooltip, content }: AbbrTextProps) => {
41
- const TooltipWrapper = useMemo(
42
- () => (tooltip ? Tooltip : Fragment),
43
- [tooltip],
44
- );
40
+ function AbbrText({ color, children, tooltip, content }: AbbrTextProps) {
41
+ const TooltipWrapper = tooltip ? Tooltip : Fragment;
45
42
  const tooltipProps = useMemo(() => {
46
- return { ...getTooltipProps(tooltip), copyContent: content };
43
+ return tooltip ? { ...getTooltipProps(tooltip), copyContent: content } : {};
47
44
  }, [tooltip, content]);
48
45
 
49
46
  return (
50
47
  <TooltipWrapper {...tooltipProps}>
51
48
  <abbr
52
- className={classNames(
53
- classes.abbr,
54
- "whitespace-nowrap",
55
- color && getColorClass(color),
56
- )}
57
- style={
58
- color ? ({ "--abbr-color": getColor(color) } as AnyObject) : undefined
59
- }
49
+ className={cn("fabric-abbr whitespace-nowrap")}
50
+ style={color ? ({ "--abbr-color": getColor(color) } as React.CSSProperties) : undefined}
60
51
  >
61
52
  {children}
62
53
  </abbr>
63
54
  </TooltipWrapper>
64
55
  );
65
- };
56
+ }
66
57
 
67
58
  export interface AbbrProps extends ChildProp<string>, CssProp {
68
59
  /**
@@ -74,32 +65,44 @@ export interface AbbrProps extends ChildProp<string>, CssProp {
74
65
  *
75
66
  * [textPart, tooltip, color (class name or color string)]
76
67
  */
77
- abbr: Array<[textPart: string, tooltip: string, color?: ColorType | string]>;
68
+ abbr: Array<[textPart: string, tooltip: string, color?: CustomColors]>;
78
69
  /**
79
70
  * renderer callback
80
71
  */
81
- renderer?: (part: string[]) => JSX.Element;
72
+ renderer?: (part: string[]) => React.ReactElement;
82
73
  }
83
74
 
84
75
  /**
85
- * Typography abbr component to wrap text parts in `abbr` with tooltip
76
+ * A component that renders abbreviated text with tooltips for additional information.
77
+ * It allows you to define a list of abbreviations, each with a tooltip and optional color.
78
+ * The component will tokenize the children text and replace matching parts with the abbreviated version.
79
+ * It supports a copy action that can either copy the text or the tooltip content.
80
+ * This component is useful for displaying technical terms or acronyms in a user-friendly way,
81
+ * while providing additional context through tooltips.
82
+ *
83
+ * @example
84
+ * ```jsx
85
+ * <Abbr
86
+ * abbr={[
87
+ * ["HTML", "HyperText Markup Language", "primary"],
88
+ * ["CSS", "Cascading Style Sheets", "secondary"],
89
+ * ["JS", "JavaScript", "success"],
90
+ * ]}
91
+ * className="text-sm"
92
+ * copyContent="tooltip"
93
+ * >
94
+ * Learn more about HTML, CSS, and JS.
95
+ * </Abbr>
96
+ * // Renders the text with abbreviations for HTML, CSS, and JS,
97
+ * // each with a tooltip showing the full form and colored according to the specified color.
98
+ * ```
86
99
  */
87
- export const Abbr = ({
88
- children,
89
- abbr,
90
- className,
91
- renderer,
92
- copyContent = "text",
93
- }: AbbrProps) => {
100
+ export function Abbr({ children, abbr, className, renderer, copyContent = "text" }: AbbrProps) {
94
101
  /** ***************** abbr text renderer *******************/
95
102
  const abbrRender = useCallback(
96
103
  (text: string, tooltip: string, color = "") => {
97
104
  return (
98
- <AbbrText
99
- color={color}
100
- tooltip={tooltip}
101
- content={copyContent === "tooltip" ? tooltip : text}
102
- >
105
+ <AbbrText color={color} tooltip={tooltip} content={copyContent === "tooltip" ? tooltip : text}>
103
106
  {(renderer?.([text, tooltip, color]) ?? text) as string}
104
107
  </AbbrText>
105
108
  );
@@ -116,7 +119,7 @@ export const Abbr = ({
116
119
  children,
117
120
  abbr.map(([keyword]) => keyword),
118
121
  );
119
- const titles: KeyValue = abbr.reduce(
122
+ const titles = abbr.reduce<KeyValue<{ tooltip: string; color: string }>>(
120
123
  (t, [a, tooltip = "", color = ""]) => ({
121
124
  ...t,
122
125
  [a.toLowerCase()]: {
@@ -129,10 +132,10 @@ export const Abbr = ({
129
132
  return (
130
133
  <Fragment>
131
134
  {tokens.map(([start, text], i) => {
132
- const { tooltip = "", color = "" } =
133
- titles[text.toLowerCase()] ?? {};
135
+ const { tooltip = "", color = "" } = titles[text.toLowerCase()] ?? {};
134
136
  return (
135
- <Fragment key={i}>
137
+ // eslint-disable-next-line @eslint-react/no-array-index-key
138
+ <Fragment key={`${text}-${i}`}>
136
139
  {start}
137
140
  {text ? abbrRender(text, tooltip, color) : null}
138
141
  </Fragment>
@@ -149,5 +152,5 @@ export const Abbr = ({
149
152
  );
150
153
 
151
154
  /** ***************** component *******************/
152
- return <span className={className}>{inner}</span>;
153
- };
155
+ return <span className={cn(className, "mixed-lang whitespace-pre-wrap")}>{inner}</span>;
156
+ }