@react-fabric/core 1.0.0-beta.8 → 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
@@ -21,21 +21,17 @@
21
21
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  */
23
23
 
24
- import classNames from "classnames";
25
- import { useCallback } from "react";
26
- import {
27
- type CssProp,
28
- type ChildProp,
29
- type ColorType,
30
- type PaletteType,
31
- } from "../../types";
32
- import { getBgClass, getBorderClass, getColorClass } from "../../utils";
24
+ import { cn } from "@react-fabric/utilities";
25
+ import type { ChildProp, CssPropWithMap, CustomColors } from "../../types";
26
+ import { getColor } from "../../utils";
33
27
 
34
- export interface DividerProps extends CssProp, Partial<ChildProp> {
35
- /**
36
- * apply text bg
37
- */
38
- fill?: boolean;
28
+ export interface DividerProps
29
+ extends
30
+ CssPropWithMap<{
31
+ root: string;
32
+ label: string;
33
+ }>,
34
+ Partial<ChildProp> {
39
35
  /**
40
36
  * vertical rule
41
37
  */
@@ -43,63 +39,88 @@ export interface DividerProps extends CssProp, Partial<ChildProp> {
43
39
  /**
44
40
  * rule color
45
41
  */
46
- color?: ColorType | PaletteType | "tint";
42
+ color?: CustomColors;
47
43
  /**
48
44
  * text alignment
49
45
  */
50
46
  align?: "start" | "end" | "center";
47
+ /**
48
+ * divider style
49
+ */
50
+ style?: "solid" | "dashed" | "dotted";
51
51
  }
52
52
 
53
- export const Divider = ({
54
- children,
53
+ const Rule = ({
54
+ flex,
55
+ className,
55
56
  color,
56
57
  vertical,
57
- fill,
58
- align = "start",
59
- className,
60
- }: DividerProps) => {
61
- const Rule = useCallback(
62
- ({ flex, className }: KeyValue) => {
63
- return (
64
- <hr
65
- style={{ flex }}
66
- className={classNames(
67
- className,
68
- vertical && "vertical",
69
- !flex && "self-stretch",
70
- vertical ? "mx-1" : "my-1",
71
- color && getBorderClass(color + "-200"),
72
- )}
73
- />
74
- );
75
- },
76
- [color, vertical],
58
+ style,
59
+ }: {
60
+ flex?: string;
61
+ className: string;
62
+ color: DividerProps["color"];
63
+ vertical: DividerProps["vertical"];
64
+ style: DividerProps["style"];
65
+ }) => {
66
+ return (
67
+ <hr
68
+ style={{ flex, borderColor: getColor(color), borderStyle: style }}
69
+ className={cn(
70
+ className,
71
+ vertical && "vertical",
72
+ !flex && "self-stretch",
73
+ vertical ? "fabric-divider--vertical" : "fabric-divider--horizontal",
74
+ )}
75
+ />
77
76
  );
77
+ };
78
78
 
79
+ /**
80
+ * A component that represents a visual divider between content.
81
+ * It can be used to separate sections of content, with optional text labels.
82
+ * It supports both horizontal and vertical orientations, customizable colors,
83
+ * styles, and alignment options.
84
+ *
85
+ * @example
86
+ * ```jsx
87
+ * <Divider color="primary" align="center" style="dashed">
88
+ * Divider Text
89
+ * </Divider>
90
+ * // Renders a horizontal divider with primary color, centered text, and dashed style.
91
+ * ```
92
+ */
93
+ export function Divider({ children, color, vertical, style, align = "start", className, classNames }: DividerProps) {
79
94
  return children ? (
80
- <div
81
- className={classNames(
82
- "flex flex-nowrap items-center",
83
- vertical && "flex-col",
84
- className,
85
- )}
86
- >
87
- <Rule flex={align === "start" ? "0 0 1rem" : "1 1 1em"} />
95
+ <div className={cn("flex flex-nowrap items-center fabric-divider", vertical && "flex-col")}>
96
+ <Rule
97
+ className={cn(className, classNames?.root)}
98
+ style={style}
99
+ color={color}
100
+ vertical={vertical}
101
+ flex={align === "start" ? "0 0 1rem" : "1 1 1em"}
102
+ />
88
103
  <div
89
- className={classNames(
90
- "px-2 whitespace-nowrap",
91
- vertical ? "mx-1" : "my-1",
92
- fill && getBgClass((color ?? "tint") + "-200"),
93
- !fill && getColorClass((color ?? "tint") + "-600"),
104
+ className={cn(
105
+ "px-2 whitespace-nowrap text-dimmed",
106
+ vertical ? "fabric-divider-label--vertical" : "fabric-divider-label--horizontal",
107
+ classNames?.label,
94
108
  "rounded-full text-[0.75em]",
95
109
  vertical && "origin-center -rotate-90 z-1",
96
110
  )}
111
+ style={{ color: getColor(color) }}
97
112
  >
98
113
  {children}
99
114
  </div>
100
- <Rule flex={align === "end" ? "0 0 1rem" : "1 1 1em"} />
115
+ <Rule
116
+ className={cn(className, classNames?.root)}
117
+ style={style}
118
+ color={color}
119
+ vertical={vertical}
120
+ flex={align === "end" ? "0 0 1rem" : "1 1 1em"}
121
+ />
101
122
  </div>
102
123
  ) : (
103
- <Rule className={className} />
124
+ <Rule style={style} color={color} vertical={vertical} className={cn(className, classNames?.root)} />
104
125
  );
105
- };
126
+ }
@@ -21,6 +21,7 @@
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 type { Placement } from "@floating-ui/react";
24
25
  import {
25
26
  FloatingArrow,
26
27
  FloatingFocusManager,
@@ -36,25 +37,14 @@ import {
36
37
  useClick,
37
38
  useDismiss,
38
39
  useFloating,
40
+ useFloatingNodeId,
39
41
  useFloatingTree,
40
42
  useHover,
41
43
  useInteractions,
42
- type Placement,
43
44
  } from "@floating-ui/react";
44
- import { mergeRefs } from "@react-fabric/utilities";
45
- import classNames from "classnames";
46
- import {
47
- Children,
48
- Fragment,
49
- cloneElement,
50
- useCallback,
51
- useEffect,
52
- useMemo,
53
- useRef,
54
- useState,
55
- } from "react";
56
- import { type ChildProp, type RefProp } from "../../types";
57
- import classes from "./Dropdown.module.css";
45
+ import { cn, mergeRefs } from "@react-fabric/utilities";
46
+ import { Children, cloneElement, useEffect, useMemo, useRef, useState } from "react";
47
+ import type { ChildProp, RefProp } from "../../types";
58
48
 
59
49
  export interface DropdownProps extends RefProp {
60
50
  children: [React.ReactNode, React.ReactNode];
@@ -85,11 +75,15 @@ export interface DropdownProps extends RefProp {
85
75
  /**
86
76
  * dropdown body className
87
77
  */
88
- dropdownClassName?: string;
78
+ className?: string;
79
+ /**
80
+ * dropdown trigger event, default is click
81
+ */
82
+ trigger?: "click" | "hover";
89
83
  /**
90
- * dropdown event
84
+ * portal root element
91
85
  */
92
- dropdownEvent?: "click" | "hover";
86
+ root?: HTMLElement;
93
87
  /**
94
88
  * open handler
95
89
  */
@@ -100,7 +94,7 @@ export interface DropdownProps extends RefProp {
100
94
  onClose?: () => void;
101
95
  }
102
96
 
103
- const DropdownElement = ({
97
+ function DropdownComponent({
104
98
  ref,
105
99
  children,
106
100
  showArrow,
@@ -109,21 +103,24 @@ const DropdownElement = ({
109
103
  placement = "bottom",
110
104
  onClose,
111
105
  onOpen,
106
+ root,
112
107
  disabled,
113
108
  plainDropdown,
114
- dropdownEvent,
115
- dropdownClassName,
116
- }: DropdownProps) => {
109
+ trigger = "click",
110
+ className,
111
+ }: DropdownProps) {
117
112
  const arrowRef = useRef(null);
118
113
  const [isOpen, setIsOpen] = useState(false);
119
114
  const tree = useFloatingTree();
115
+ const nodeId = useFloatingNodeId();
120
116
 
121
- const [anchor, panel] = useMemo<AnyObject[]>(
122
- () => Children.toArray(children as AnyObject),
123
- [children],
124
- );
117
+ const [anchor, panel] = useMemo<Array<React.ReactElement<KeyValue>>>(() => {
118
+ // eslint-disable-next-line @eslint-react/no-children-to-array
119
+ return Children.toArray(children) as Array<React.ReactElement<KeyValue>>;
120
+ }, [children]);
125
121
 
126
122
  const { refs, floatingStyles, context } = useFloating({
123
+ nodeId: `dropdown-${nodeId}`,
127
124
  open: isOpen,
128
125
  onOpenChange: (open, _, reason) => {
129
126
  if (reason === "reference-press") return;
@@ -134,9 +131,9 @@ const DropdownElement = ({
134
131
  placement,
135
132
  whileElementsMounted: autoUpdate,
136
133
  middleware: [
134
+ offset(showArrow ? 9 : 4),
137
135
  shift({ padding: 8 }),
138
136
  flip(),
139
- showArrow && offset(9),
140
137
  showArrow &&
141
138
  arrow({
142
139
  element: arrowRef,
@@ -144,58 +141,48 @@ const DropdownElement = ({
144
141
  ],
145
142
  });
146
143
 
147
- const handler = dropdownEvent === "hover" ? useHover : useClick;
144
+ const handler = trigger === "hover" ? useHover : useClick;
148
145
  const click = handler(context, {
149
146
  enabled: !disabled,
150
147
  handleClose: safePolygon({ blockPointerEvents: true }),
151
148
  });
149
+
152
150
  const dismiss = useDismiss(context, {
153
151
  referencePress: true,
154
152
  });
155
153
 
156
- const { getReferenceProps, getFloatingProps } = useInteractions([
157
- dismiss,
158
- click,
159
- ]);
154
+ const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, click]);
160
155
 
161
- const minWidth = useMemo(() => {
156
+ const [minWidth, minHeight] = useMemo(() => {
162
157
  if (fitToParent) {
163
- const el: HTMLElement =
164
- // @ts-expect-error ignore
165
- refs.reference.current?.closest('[data-ref="buttonGroup"]') ??
166
- refs.reference.current;
167
- return el?.offsetWidth;
158
+ const ref = refs.reference.current as HTMLElement;
159
+ const el = (ref?.closest('[data-ref="buttonGroup"]') ?? refs.reference.current) as HTMLElement;
160
+ return [el?.offsetWidth, el?.offsetHeight];
168
161
  }
169
- return undefined;
162
+ return [undefined, undefined];
163
+ // eslint-disable-next-line @eslint-react/exhaustive-deps
170
164
  }, [refs, isOpen, fitToParent]);
171
165
 
172
- const tryClosing = useCallback(
173
- (e: React.MouseEvent) => {
174
- if (
175
- !refs.floating.current?.contains(
176
- (e.target as HTMLElement).closest("[data-dropdown-dismiss='false']"),
177
- ) &&
178
- (!!closeOnClick ||
179
- refs.floating.current?.contains(
180
- (e.target as HTMLElement).closest("[data-dropdown-dismiss='true']"),
181
- ))
182
- ) {
183
- setTimeout(() => {
184
- setIsOpen(false);
185
- onClose?.();
186
- }, 100);
187
- }
188
- },
189
- [closeOnClick, onClose],
190
- );
166
+ const tryClosing = (e: React.MouseEvent) => {
167
+ if (
168
+ !refs.floating.current?.contains((e.target as HTMLElement).closest("[data-dropdown-dismiss='false']")) &&
169
+ (!!closeOnClick || refs.floating.current?.contains((e.target as HTMLElement).closest("[data-dropdown-dismiss='true']")))
170
+ ) {
171
+ setTimeout(() => {
172
+ setIsOpen(false);
173
+ onClose?.();
174
+ }, 100);
175
+ }
176
+ };
191
177
 
192
178
  const innerRef = useMemo(
193
- () => mergeRefs(ref, anchor.props.ref, refs.setReference),
194
- [ref, anchor.props.ref, refs.setReference],
179
+ () => mergeRefs(ref, anchor.props?.ref, (el: HTMLDivElement) => refs.setReference(el)),
180
+ [ref, anchor.props.ref, refs],
195
181
  );
196
182
 
197
183
  useEffect(() => {
198
- disabled && setIsOpen(false);
184
+ // eslint-disable-next-line @eslint-react/set-state-in-effect
185
+ if (disabled) setIsOpen(false);
199
186
  }, [disabled]);
200
187
 
201
188
  useEffect(() => {
@@ -212,86 +199,104 @@ const DropdownElement = ({
212
199
  };
213
200
  }, [tree]);
214
201
 
215
- if (!anchor || !panel)
216
- throw Error("Dropdown requires two elements [Anchor, Panel]");
202
+ if (!anchor || !panel) throw Error("Dropdown requires two elements [Anchor, Panel]");
217
203
 
218
204
  return (
219
- <Fragment>
205
+ <>
220
206
  {cloneElement(anchor, {
221
207
  ...getReferenceProps({
222
208
  onClick: (e) => {
209
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
223
210
  anchor.props.onClick?.(e);
224
211
  e.stopPropagation();
212
+ e.preventDefault();
225
213
  },
226
214
  }),
215
+ "data-inner-clickable": "true",
227
216
  "data-dropdown-open": isOpen ? true : undefined,
228
217
  ref: innerRef,
229
218
  })}
230
219
  {isOpen && (
231
- <FloatingPortal
232
- root={
233
- refs.domReference.current?.closest<HTMLElement>(".theme-base") ??
234
- undefined
235
- }
236
- >
220
+ <FloatingPortal root={root ?? refs.domReference.current?.closest<HTMLElement>(".theme-base") ?? undefined}>
237
221
  <FloatingOverlay />
238
- <FloatingFocusManager context={context} modal>
222
+ <FloatingFocusManager context={context} closeOnFocusOut>
239
223
  <div
240
- ref={(el) => {
241
- refs.setFloating(el);
242
- el
243
- ?.querySelector<HTMLElement>("input,textarea,button")
244
- ?.focus();
245
- }}
224
+ ref={(el) => refs.setFloating(el)}
246
225
  style={{
247
- minWidth,
248
226
  zIndex: "var(--z-popover)",
249
227
  ...floatingStyles,
250
228
  }}
251
- data-testid="dropdown-body"
229
+ data-ref="dropdownBody"
252
230
  {...getFloatingProps({
253
231
  onClick: (e) => e.stopPropagation(),
254
232
  })}
255
233
  >
256
234
  <div
257
235
  role="none"
258
- className={classNames(
259
- classes.dropdownBody,
260
- dropdownClassName,
261
- !plainDropdown &&
262
- "shadow-lg shadow-base bg-base ring-1 ring-tint-100",
263
- "rounded-capped overflow-auto scroll-thin grid max-h-[70vh]",
236
+ className={cn(
237
+ "fabric-dropdownBody",
238
+ className,
239
+ !plainDropdown && "shadow-lg bg-default ring-1 ring-tint-200",
240
+ "rounded-capped grid max-h-[60vh] scroll-thin",
264
241
  )}
242
+ style={{
243
+ minWidth,
244
+ minHeight,
245
+ }}
265
246
  onMouseUpCapture={tryClosing}
266
247
  >
267
248
  {panel}
268
249
  </div>
269
250
  {showArrow && (
270
- <FloatingArrow
271
- ref={arrowRef}
272
- context={context}
273
- strokeWidth={0.5}
274
- className="fill-base stroke-muted"
275
- />
251
+ <FloatingArrow ref={arrowRef} context={context} strokeWidth={0.5} className="fill-default stroke-soft" />
276
252
  )}
277
253
  </div>
278
254
  </FloatingFocusManager>
279
255
  </FloatingPortal>
280
256
  )}
281
- </Fragment>
257
+ </>
282
258
  );
283
- };
259
+ }
284
260
 
285
- export const Dropdown = (props: DropdownProps) => (
286
- <FloatingTree>
287
- <DropdownElement {...props} />
288
- </FloatingTree>
289
- );
261
+ /**
262
+ * A component that displays a dropdown menu with an anchor and a panel.
263
+ * It supports various features such as placement, arrow display, click handling,
264
+ * and event handling for opening and closing the dropdown.
265
+ *
266
+ * @example
267
+ * ```jsx
268
+ * <Dropdown
269
+ * placement="bottom"
270
+ * showArrow
271
+ * closeOnClick
272
+ * fitToParent
273
+ * onOpen={() => console.log("Dropdown opened")}
274
+ * onClose={() => console.log("Dropdown closed")}
275
+ * >
276
+ * <button>Open Dropdown</button>
277
+ * <div>
278
+ * <DropdownDismiss>
279
+ * <button>Dismiss</button>
280
+ * </DropdownDismiss>
281
+ * <p>Dropdown Content</p>
282
+ * </div>
283
+ * </Dropdown>
284
+ * ```
285
+ */
286
+ export function Dropdown(props: DropdownProps) {
287
+ return (
288
+ <FloatingTree>
289
+ <DropdownComponent {...props} />
290
+ </FloatingTree>
291
+ );
292
+ }
290
293
 
291
- export const DropdownDismiss = ({
292
- children,
293
- dismiss = true,
294
- }: ChildProp & { dismiss?: boolean }) => {
294
+ /**
295
+ * A component that allows dismissing the dropdown when clicked.
296
+ * It can be used inside the dropdown panel to provide a dismiss area.
297
+ * It supports an optional `dismiss` prop to control whether the dropdown should be dismissed on click.
298
+ */
299
+ export function DropdownDismiss({ children, dismiss = true }: ChildProp & { dismiss?: boolean }) {
295
300
  const tree = useFloatingTree();
296
301
 
297
302
  return (
@@ -299,11 +304,9 @@ export const DropdownDismiss = ({
299
304
  role="none"
300
305
  className="contents"
301
306
  data-dropdown-dismiss={dismiss}
302
- onMouseUp={() =>
303
- dismiss && setTimeout(() => tree?.events.emit("close"), 50)
304
- }
307
+ onMouseUp={() => dismiss && setTimeout(() => tree?.events.emit("close"), 50)}
305
308
  >
306
309
  {children}
307
310
  </div>
308
311
  );
309
- };
312
+ }
@@ -21,13 +21,31 @@
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 { type ChildProp, type CssProp } from "../../types";
26
- import { CoreIcons } from "../../types/icons";
24
+ import { cn } from "@react-fabric/utilities";
25
+ import type { ChildProp, CssProp } from "../../types";
27
26
  import { Icon } from "../icon/Icon";
28
- import { Dropdown, type DropdownProps } from "./Dropdown";
27
+ import type { DropdownProps } from "./Dropdown";
28
+ import { Dropdown } from "./Dropdown";
29
29
 
30
- export const DropdownTool = ({
30
+ /**
31
+ * A dropdown component that displays an icon and tool menu.
32
+ * It can be used to create a dropdown menu that appears when the icon is clicked or hovered over.
33
+ * This component is useful for creating toolbars or action menus in a user interface.
34
+ * It accepts children as menu items and can be styled with additional CSS classes.
35
+ *
36
+ * @example
37
+ * ```jsx
38
+ * <DropdownTool
39
+ * icon="caret-down"
40
+ * groupHover={true}
41
+ * className="my-dropdown"
42
+ * >
43
+ * <MenuItem>Item 1</MenuItem>
44
+ * <MenuItem>Item 2</MenuItem>
45
+ * </DropdownTool>
46
+ * ```
47
+ */
48
+ export function DropdownTool({
31
49
  children,
32
50
  className,
33
51
  groupHover,
@@ -41,19 +59,18 @@ export const DropdownTool = ({
41
59
  * hide until group hovered
42
60
  */
43
61
  groupHover?: boolean;
44
- }) => {
62
+ }) {
45
63
  return (
46
64
  <Dropdown {...props}>
47
65
  <Icon
48
- icon={icon ?? CoreIcons.caretDown}
49
- className={classNames(
66
+ icon={icon ?? "icon-[mdi--menu-down]"}
67
+ className={cn(
50
68
  className,
51
- "outline bg-base flex-content pointer-events-auto cursor-pointer",
52
- groupHover &&
53
- "hidden group-hover:inline-block data-[dropdown-open]:inline-block",
69
+ groupHover && "invisible group-hover/tool:visible data-dropdown-open:visible",
70
+ "outline bg-tint-50/50 flex-content pointer-events-auto cursor-pointer",
54
71
  )}
55
72
  />
56
73
  {children}
57
74
  </Dropdown>
58
75
  );
59
- };
76
+ }