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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
  2. package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
  3. package/css/components/_animations.css +52 -0
  4. package/css/components/_avatar.css +89 -0
  5. package/css/components/_button.css +218 -0
  6. package/css/components/_buttonGroup.css +62 -0
  7. package/css/components/_callout.css +32 -0
  8. package/css/components/_card.css +167 -0
  9. package/css/components/_chip.css +125 -0
  10. package/css/components/_collapsable.css +32 -0
  11. package/{src/overlays/message/Message.module.css → css/components/_divider.css} +11 -10
  12. package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +3 -2
  13. package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +15 -9
  14. package/css/components/_media.css +102 -0
  15. package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
  16. package/{src/components/meter/Meter.module.css → css/components/_meter.css} +15 -20
  17. package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +9 -9
  18. package/{src/components/panel/Panel.module.css → css/components/_panel.css} +19 -19
  19. package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
  20. package/css/components/_sonner.css +431 -0
  21. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +125 -85
  22. package/css/components/_titlebar.css +48 -0
  23. package/css/components/index.css +47 -0
  24. package/css/core/_aside.css +176 -0
  25. package/css/core/_content.css +31 -0
  26. package/css/core/_errorboundary.css +55 -0
  27. package/css/core/_responsive.css +45 -0
  28. package/css/core/_typography.css +69 -0
  29. package/css/core/_viewport.css +33 -0
  30. package/{src/hooks/useClientService.tsx → css/core/index.css} +7 -7
  31. package/css/reset/_gradients.css +36 -33
  32. package/css/reset/_reset.css +206 -300
  33. package/css/reset/_text.css +31 -61
  34. package/css/reset/_theme.css +467 -81
  35. package/css/reset/index.css +23 -21
  36. package/css/styles.css +30 -23
  37. package/css/theme/_colors.css +445 -0
  38. package/css/theme/_utilities.css +528 -0
  39. package/css/theme/_variants.css +128 -0
  40. package/css/theme/index.css +55 -0
  41. package/dist/cjs/components/actionLabel/ActionLabel.js +25 -12
  42. package/dist/cjs/{overlays → components}/alert/Alert.js +76 -53
  43. package/dist/cjs/components/animations/Indicator.js +66 -0
  44. package/dist/cjs/components/animations/Loader.js +77 -0
  45. package/dist/cjs/components/animations/LoadingBars.js +37 -0
  46. package/dist/cjs/components/animations/LoadingLine.js +59 -0
  47. package/dist/cjs/components/animations/LoadingSpinner.js +37 -0
  48. package/dist/cjs/components/animations/Skeleton.js +88 -0
  49. package/dist/cjs/components/avatar/Avatar.js +41 -20
  50. package/dist/cjs/components/avatar/AvatarGroup.js +37 -16
  51. package/dist/cjs/components/badge/Badge.js +90 -68
  52. package/dist/cjs/components/button/Button.js +198 -136
  53. package/dist/cjs/components/button/ButtonGroup.js +86 -21
  54. package/dist/cjs/components/button/ConfirmButton.js +55 -41
  55. package/dist/cjs/components/button/ToggleButtonGroup.js +84 -32
  56. package/dist/cjs/components/callout/Callout.js +56 -25
  57. package/dist/cjs/components/card/Card.js +90 -42
  58. package/dist/cjs/components/card/CardCover.js +38 -27
  59. package/dist/cjs/components/card/FlipContent.js +47 -0
  60. package/dist/cjs/components/chip/Chip.js +80 -37
  61. package/dist/cjs/components/collapsable/Collapsable.js +62 -31
  62. package/dist/cjs/components/divider/Divider.js +58 -24
  63. package/dist/cjs/components/dropdown/Dropdown.js +92 -45
  64. package/dist/cjs/components/dropdown/DropdownTool.js +6 -7
  65. package/dist/cjs/components/effect/GlassEffect.js +259 -0
  66. package/dist/cjs/components/effect/MatteEffect.js +127 -0
  67. package/dist/cjs/components/effect/StyleEffect.js +43 -0
  68. package/dist/cjs/components/empty/EmptyContent.js +37 -49
  69. package/dist/cjs/components/flyout/Flyout.js +170 -0
  70. package/dist/cjs/components/hotkey/HotKey.js +42 -0
  71. package/dist/cjs/components/icon/Icon.js +81 -80
  72. package/dist/cjs/components/media/Media.js +154 -77
  73. package/dist/cjs/components/menu/ContextMenu.js +45 -20
  74. package/dist/cjs/components/menu/Menu.js +98 -38
  75. package/dist/cjs/components/menu/MenuItem.js +102 -74
  76. package/dist/cjs/components/meter/Meter.js +35 -12
  77. package/dist/cjs/components/modal/Modal.js +152 -0
  78. package/dist/cjs/components/navigator/Navigator.js +81 -36
  79. package/dist/cjs/components/panel/Panel.js +115 -60
  80. package/dist/cjs/components/panel/PanelGroup.js +42 -16
  81. package/dist/cjs/components/panel/PanelStack.js +47 -16
  82. package/dist/cjs/components/pillbox/Pillbox.js +118 -0
  83. package/dist/cjs/components/progress/ProgressBar.js +30 -14
  84. package/dist/cjs/components/progress/ProgressCircle.js +27 -11
  85. package/dist/cjs/components/tabpanel/Tab.js +53 -37
  86. package/dist/cjs/components/tabpanel/TabPanel.js +74 -28
  87. package/dist/cjs/components/titlebar/Titlebar.js +52 -0
  88. package/dist/cjs/components/tooltip/Tooltip.js +180 -0
  89. package/dist/cjs/context/Global.js +159 -80
  90. package/dist/cjs/context/ModalManager.js +60 -0
  91. package/dist/cjs/context/context.js +43 -0
  92. package/dist/cjs/core/areaToggle/AreaToggle.js +41 -0
  93. package/dist/cjs/core/aside/Aside.js +178 -83
  94. package/dist/cjs/core/boundary/ErrorBoundary.js +37 -34
  95. package/dist/cjs/core/boundary/ErrorIcon.js +32 -19
  96. package/dist/cjs/core/content/Content.js +26 -37
  97. package/dist/cjs/core/headfoot/HeadFoot.js +133 -35
  98. package/dist/cjs/core/layout/Layout.js +28 -0
  99. package/dist/cjs/core/responsive/Responsive.js +62 -26
  100. package/dist/cjs/core/theme/ThemeProvider.js +35 -41
  101. package/dist/cjs/core/viewport/Viewport.js +26 -22
  102. package/dist/cjs/hooks/useClientService.js +39 -18
  103. package/dist/cjs/hooks/useContextMenu.js +103 -0
  104. package/dist/cjs/hooks/useControlledValue.js +13 -7
  105. package/dist/cjs/hooks/useDebounce.js +37 -21
  106. package/dist/cjs/hooks/useEffectDebugger.js +79 -60
  107. package/dist/cjs/hooks/useIsDark.js +34 -26
  108. package/dist/cjs/hooks/useIsRtl.js +13 -3
  109. package/dist/cjs/hooks/useNavigator.js +12 -9
  110. package/dist/cjs/hooks/useNotificationService.js +199 -0
  111. package/dist/cjs/hooks/useOverlayService.js +82 -41
  112. package/dist/cjs/hooks/usePropState.js +41 -0
  113. package/dist/cjs/hooks/usePropToggle.js +32 -26
  114. package/dist/cjs/hooks/useResize.js +47 -38
  115. package/dist/cjs/hooks/useResizeObserver.js +26 -7
  116. package/dist/cjs/hooks/useStorage.js +29 -16
  117. package/dist/cjs/i18n/index.js +25 -23
  118. package/dist/cjs/index.js +142 -94
  119. package/dist/cjs/typography/Abbr.js +43 -20
  120. package/dist/cjs/typography/Anchor.js +39 -0
  121. package/dist/cjs/typography/Copy.js +28 -28
  122. package/dist/cjs/typography/Kbd.js +43 -0
  123. package/dist/cjs/typography/Mark.js +34 -17
  124. package/dist/cjs/typography/Text.js +36 -54
  125. package/dist/cjs/typography/Title.js +17 -40
  126. package/dist/cjs/utils/calculateDimensions.js +38 -23
  127. package/dist/cjs/utils/cloneElement.js +64 -0
  128. package/dist/cjs/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  129. package/dist/cjs/utils/getColor.js +42 -36
  130. package/dist/cjs/utils/getIconProps.js +63 -0
  131. package/dist/cjs/utils/getTooltipProps.js +66 -0
  132. package/dist/cjs/utils/nodeCheck.js +4 -4
  133. package/dist/esm/components/actionLabel/ActionLabel.js +25 -12
  134. package/dist/esm/{overlays → components}/alert/Alert.js +73 -50
  135. package/dist/esm/components/animations/Indicator.js +66 -0
  136. package/dist/esm/components/animations/Loader.js +77 -0
  137. package/dist/esm/components/animations/LoadingBars.js +37 -0
  138. package/dist/esm/components/animations/LoadingLine.js +59 -0
  139. package/dist/esm/components/animations/LoadingSpinner.js +37 -0
  140. package/dist/esm/components/animations/Skeleton.js +88 -0
  141. package/dist/esm/components/avatar/Avatar.js +42 -21
  142. package/dist/esm/components/avatar/AvatarGroup.js +37 -16
  143. package/dist/esm/components/badge/Badge.js +93 -70
  144. package/dist/esm/components/button/Button.js +199 -137
  145. package/dist/esm/components/button/ButtonGroup.js +87 -22
  146. package/dist/esm/components/button/ConfirmButton.js +58 -44
  147. package/dist/esm/components/button/ToggleButtonGroup.js +86 -34
  148. package/dist/esm/components/callout/Callout.js +56 -25
  149. package/dist/esm/components/card/Card.js +92 -44
  150. package/dist/esm/components/card/CardCover.js +38 -27
  151. package/dist/esm/components/card/FlipContent.js +47 -0
  152. package/dist/esm/components/chip/Chip.js +81 -38
  153. package/dist/esm/components/collapsable/Collapsable.js +63 -32
  154. package/dist/esm/components/divider/Divider.js +59 -25
  155. package/dist/esm/components/dropdown/Dropdown.js +95 -48
  156. package/dist/esm/components/dropdown/DropdownTool.js +6 -7
  157. package/dist/esm/components/effect/GlassEffect.js +259 -0
  158. package/dist/esm/components/effect/MatteEffect.js +127 -0
  159. package/dist/esm/components/effect/StyleEffect.js +43 -0
  160. package/dist/esm/components/empty/EmptyContent.js +38 -50
  161. package/dist/esm/components/flyout/Flyout.js +170 -0
  162. package/dist/esm/components/hotkey/HotKey.js +42 -0
  163. package/dist/esm/components/icon/Icon.js +83 -82
  164. package/dist/esm/components/media/Media.js +156 -79
  165. package/dist/esm/components/menu/ContextMenu.js +46 -21
  166. package/dist/esm/components/menu/Menu.js +101 -41
  167. package/dist/esm/components/menu/MenuItem.js +98 -70
  168. package/dist/esm/components/meter/Meter.js +36 -13
  169. package/dist/esm/components/modal/Modal.js +152 -0
  170. package/dist/esm/components/navigator/Navigator.js +81 -36
  171. package/dist/esm/components/panel/Panel.js +117 -62
  172. package/dist/esm/components/panel/PanelGroup.js +43 -17
  173. package/dist/esm/components/panel/PanelStack.js +48 -17
  174. package/dist/esm/components/pillbox/Pillbox.js +118 -0
  175. package/dist/esm/components/progress/ProgressBar.js +31 -15
  176. package/dist/esm/components/progress/ProgressCircle.js +28 -12
  177. package/dist/esm/components/tabpanel/Tab.js +54 -38
  178. package/dist/esm/components/tabpanel/TabPanel.js +75 -29
  179. package/dist/esm/components/titlebar/Titlebar.js +52 -0
  180. package/dist/esm/components/tooltip/Tooltip.js +180 -0
  181. package/dist/esm/context/Global.js +161 -78
  182. package/dist/esm/context/ModalManager.js +60 -0
  183. package/dist/esm/context/context.js +40 -0
  184. package/dist/esm/core/areaToggle/AreaToggle.js +41 -0
  185. package/dist/esm/core/aside/Aside.js +179 -84
  186. package/dist/esm/core/boundary/ErrorBoundary.js +38 -35
  187. package/dist/esm/core/boundary/ErrorIcon.js +32 -19
  188. package/dist/esm/core/content/Content.js +26 -37
  189. package/dist/esm/core/headfoot/HeadFoot.js +134 -36
  190. package/dist/esm/core/layout/Layout.js +28 -0
  191. package/dist/esm/core/responsive/Responsive.js +62 -26
  192. package/dist/esm/core/theme/ThemeProvider.js +36 -42
  193. package/dist/esm/core/viewport/Viewport.js +26 -22
  194. package/dist/esm/hooks/useClientService.js +39 -18
  195. package/dist/esm/hooks/useContextMenu.js +103 -0
  196. package/dist/esm/hooks/useControlledValue.js +14 -8
  197. package/dist/esm/hooks/useDebounce.js +37 -21
  198. package/dist/esm/hooks/useEffectDebugger.js +81 -62
  199. package/dist/esm/hooks/useIsDark.js +34 -26
  200. package/dist/esm/hooks/useIsRtl.js +13 -3
  201. package/dist/esm/hooks/useNavigator.js +13 -10
  202. package/dist/esm/hooks/useNotificationService.js +199 -0
  203. package/dist/esm/hooks/useOverlayService.js +83 -42
  204. package/dist/esm/hooks/usePropState.js +40 -0
  205. package/dist/esm/hooks/usePropToggle.js +33 -27
  206. package/dist/esm/hooks/useResize.js +48 -39
  207. package/dist/esm/hooks/useResizeObserver.js +27 -8
  208. package/dist/esm/hooks/useStorage.js +30 -17
  209. package/dist/esm/i18n/index.js +23 -21
  210. package/dist/esm/index.js +87 -44
  211. package/dist/esm/typography/Abbr.js +45 -22
  212. package/dist/esm/typography/Anchor.js +39 -0
  213. package/dist/esm/typography/Copy.js +28 -28
  214. package/dist/esm/typography/Kbd.js +43 -0
  215. package/dist/esm/typography/Mark.js +35 -18
  216. package/dist/esm/typography/Text.js +39 -57
  217. package/dist/esm/typography/Title.js +17 -40
  218. package/dist/esm/utils/calculateDimensions.js +38 -23
  219. package/dist/esm/utils/cloneElement.js +64 -0
  220. package/dist/esm/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  221. package/dist/esm/utils/getColor.js +43 -34
  222. package/dist/esm/utils/getIconProps.js +63 -0
  223. package/dist/esm/utils/getTooltipProps.js +66 -0
  224. package/dist/esm/utils/nodeCheck.js +4 -4
  225. package/dist/types/components/actionLabel/ActionLabel.d.ts +20 -7
  226. package/dist/types/components/alert/Alert.d.ts +74 -0
  227. package/dist/types/components/animations/Indicator.d.ts +57 -0
  228. package/dist/types/components/animations/Loader.d.ts +65 -0
  229. package/dist/types/components/animations/LoadingBars.d.ts +61 -0
  230. package/dist/types/components/animations/LoadingLine.d.ts +43 -0
  231. package/dist/types/components/animations/LoadingSpinner.d.ts +61 -0
  232. package/dist/types/components/animations/Skeleton.d.ts +61 -0
  233. package/dist/types/components/avatar/Avatar.d.ts +70 -19
  234. package/dist/types/components/avatar/AvatarGroup.d.ts +51 -14
  235. package/dist/types/components/badge/Badge.d.ts +64 -14
  236. package/dist/types/components/button/Button.d.ts +72 -55
  237. package/dist/types/components/button/ButtonGroup.d.ts +86 -24
  238. package/dist/types/components/button/ConfirmButton.d.ts +21 -7
  239. package/dist/types/components/button/ToggleButtonGroup.d.ts +88 -44
  240. package/dist/types/components/callout/Callout.d.ts +58 -7
  241. package/dist/types/components/card/Card.d.ts +66 -25
  242. package/dist/types/components/card/CardCover.d.ts +52 -7
  243. package/dist/types/components/card/FlipContent.d.ts +50 -0
  244. package/dist/types/components/chip/Chip.d.ts +72 -20
  245. package/dist/types/components/collapsable/Collapsable.d.ts +55 -15
  246. package/dist/types/components/divider/Divider.d.ts +25 -8
  247. package/dist/types/components/dropdown/Dropdown.d.ts +42 -9
  248. package/dist/types/components/dropdown/DropdownTool.d.ts +22 -4
  249. package/dist/types/components/effect/GlassEffect.d.ts +5 -0
  250. package/dist/types/components/effect/MatteEffect.d.ts +40 -0
  251. package/dist/types/components/effect/StyleEffect.d.ts +27 -0
  252. package/dist/types/components/empty/EmptyContent.d.ts +53 -9
  253. package/dist/types/components/flyout/Flyout.d.ts +60 -0
  254. package/dist/types/components/hotkey/HotKey.d.ts +41 -0
  255. package/dist/types/components/icon/Icon.d.ts +74 -24
  256. package/dist/types/components/media/Media.d.ts +72 -4
  257. package/dist/types/components/menu/ContextMenu.d.ts +22 -5
  258. package/dist/types/components/menu/Menu.d.ts +26 -2
  259. package/dist/types/components/menu/MenuItem.d.ts +19 -4
  260. package/dist/types/components/menu/types.d.ts +23 -14
  261. package/dist/types/components/meter/Meter.d.ts +23 -3
  262. package/dist/types/components/modal/Modal.d.ts +52 -0
  263. package/dist/types/components/navigator/Navigator.d.ts +30 -4
  264. package/dist/types/components/panel/Panel.d.ts +43 -23
  265. package/dist/types/components/panel/PanelGroup.d.ts +22 -3
  266. package/dist/types/components/panel/PanelStack.d.ts +28 -2
  267. package/dist/types/components/pillbox/Pillbox.d.ts +95 -0
  268. package/dist/types/components/progress/ProgressBar.d.ts +19 -4
  269. package/dist/types/components/progress/ProgressCircle.d.ts +18 -4
  270. package/dist/types/components/tabpanel/Tab.d.ts +42 -10
  271. package/dist/types/components/tabpanel/TabPanel.d.ts +47 -7
  272. package/dist/types/components/titlebar/Titlebar.d.ts +54 -0
  273. package/dist/types/components/tooltip/Tooltip.d.ts +76 -0
  274. package/dist/types/context/Global.d.ts +39 -69
  275. package/dist/types/context/ModalManager.d.ts +30 -0
  276. package/dist/types/context/context.d.ts +107 -0
  277. package/dist/types/core/areaToggle/AreaToggle.d.ts +33 -0
  278. package/dist/types/core/aside/Aside.d.ts +75 -20
  279. package/dist/types/core/boundary/ErrorBoundary.d.ts +43 -4
  280. package/dist/types/core/boundary/ErrorIcon.d.ts +38 -1
  281. package/dist/types/core/content/Content.d.ts +38 -6
  282. package/dist/types/core/headfoot/HeadFoot.d.ts +48 -14
  283. package/dist/types/core/layout/Layout.d.ts +38 -0
  284. package/dist/types/core/responsive/Responsive.d.ts +45 -15
  285. package/dist/types/core/theme/ThemeProvider.d.ts +35 -11
  286. package/dist/types/core/viewport/Viewport.d.ts +27 -3
  287. package/dist/types/hooks/useClientService.d.ts +43 -1
  288. package/dist/types/hooks/useContextMenu.d.ts +10 -0
  289. package/dist/types/hooks/useControlledValue.d.ts +28 -4
  290. package/dist/types/hooks/useDebounce.d.ts +38 -2
  291. package/dist/types/hooks/useEffectDebugger.d.ts +73 -4
  292. package/dist/types/hooks/useIsDark.d.ts +6 -0
  293. package/dist/types/hooks/useIsRtl.d.ts +35 -1
  294. package/dist/types/hooks/useNavigator.d.ts +37 -2
  295. package/dist/types/hooks/useNotificationService.d.ts +60 -0
  296. package/dist/types/hooks/useOverlayService.d.ts +28 -8
  297. package/dist/types/hooks/usePropState.d.ts +26 -0
  298. package/dist/types/hooks/usePropToggle.d.ts +41 -7
  299. package/dist/types/hooks/useResize.d.ts +46 -4
  300. package/dist/types/hooks/useResizeObserver.d.ts +45 -3
  301. package/dist/types/hooks/useStorage.d.ts +32 -2
  302. package/dist/types/i18n/index.d.ts +27 -3
  303. package/dist/types/index.d.ts +106 -18
  304. package/dist/types/types/colors.d.ts +29 -0
  305. package/dist/types/types/index.d.ts +216 -76
  306. package/dist/types/typography/Abbr.d.ts +51 -6
  307. package/dist/types/typography/Anchor.d.ts +41 -0
  308. package/dist/types/typography/Copy.d.ts +36 -2
  309. package/dist/types/typography/Kbd.d.ts +40 -0
  310. package/dist/types/typography/Mark.d.ts +44 -7
  311. package/dist/types/typography/Text.d.ts +40 -24
  312. package/dist/types/typography/Title.d.ts +37 -26
  313. package/dist/types/typography/types.d.ts +32 -0
  314. package/dist/types/utils/calculateDimensions.d.ts +50 -6
  315. package/dist/types/utils/cloneElement.d.ts +41 -0
  316. package/dist/types/utils/getBadgeProps.d.ts +16 -0
  317. package/dist/types/utils/getColor.d.ts +43 -4
  318. package/dist/types/utils/getIconProps.d.ts +45 -0
  319. package/dist/types/utils/getTooltipProps.d.ts +47 -0
  320. package/dist/types/utils/index.d.ts +28 -0
  321. package/dist/types/utils/nodeCheck.d.ts +1 -2
  322. package/package.json +30 -21
  323. package/src/components/actionLabel/ActionLabel.tsx +28 -39
  324. package/src/components/alert/Alert.tsx +261 -0
  325. package/src/components/animations/Indicator.tsx +75 -0
  326. package/src/components/animations/Loader.tsx +89 -0
  327. package/src/components/animations/LoadingBars.tsx +70 -0
  328. package/src/components/animations/LoadingLine.tsx +51 -0
  329. package/src/components/animations/LoadingSpinner.tsx +70 -0
  330. package/src/components/animations/Skeleton.tsx +100 -0
  331. package/src/components/avatar/Avatar.tsx +89 -70
  332. package/src/components/avatar/AvatarGroup.tsx +65 -74
  333. package/src/components/badge/Badge.tsx +141 -108
  334. package/src/components/button/Button.tsx +223 -238
  335. package/src/components/button/ButtonGroup.tsx +117 -77
  336. package/src/components/button/ConfirmButton.tsx +60 -90
  337. package/src/components/button/ToggleButtonGroup.tsx +134 -120
  338. package/src/components/callout/Callout.tsx +81 -59
  339. package/src/components/card/Card.tsx +131 -113
  340. package/src/components/card/CardCover.tsx +61 -61
  341. package/src/components/card/FlipContent.tsx +78 -0
  342. package/src/components/chip/Chip.tsx +139 -99
  343. package/src/components/collapsable/Collapsable.tsx +79 -77
  344. package/src/components/divider/Divider.tsx +74 -53
  345. package/src/components/dropdown/Dropdown.tsx +109 -106
  346. package/src/components/dropdown/DropdownTool.tsx +29 -12
  347. package/src/components/effect/GlassEffect.tsx +221 -0
  348. package/src/components/effect/MatteEffect.tsx +99 -0
  349. package/src/components/effect/StyleEffect.tsx +36 -0
  350. package/src/components/empty/EmptyContent.tsx +60 -99
  351. package/src/components/flyout/Flyout.tsx +257 -0
  352. package/src/components/hotkey/HotKey.tsx +57 -0
  353. package/src/components/icon/Icon.tsx +131 -130
  354. package/src/components/media/Media.tsx +184 -154
  355. package/src/components/menu/ContextMenu.tsx +56 -39
  356. package/src/components/menu/Menu.tsx +121 -84
  357. package/src/components/menu/MenuItem.tsx +87 -69
  358. package/src/components/menu/types.ts +23 -28
  359. package/src/components/meter/Meter.tsx +34 -17
  360. package/src/components/modal/Modal.tsx +226 -0
  361. package/src/components/navigator/Navigator.tsx +93 -38
  362. package/src/components/panel/Panel.tsx +123 -131
  363. package/src/components/panel/PanelGroup.tsx +49 -43
  364. package/src/components/panel/PanelStack.tsx +63 -62
  365. package/src/components/pillbox/Pillbox.tsx +208 -0
  366. package/src/components/progress/ProgressBar.tsx +33 -33
  367. package/src/components/progress/ProgressCircle.tsx +29 -37
  368. package/src/components/tabpanel/Tab.tsx +84 -73
  369. package/src/components/tabpanel/TabPanel.tsx +102 -51
  370. package/src/components/titlebar/Titlebar.tsx +115 -0
  371. package/src/components/tooltip/Tooltip.tsx +255 -0
  372. package/src/context/Global.tsx +148 -148
  373. package/src/context/ModalManager.tsx +68 -0
  374. package/src/context/context.ts +111 -0
  375. package/src/core/areaToggle/AreaToggle.tsx +45 -0
  376. package/src/core/aside/Aside.tsx +200 -155
  377. package/src/core/boundary/ErrorBoundary.tsx +50 -68
  378. package/src/core/boundary/ErrorIcon.tsx +34 -32
  379. package/src/core/content/Content.tsx +41 -50
  380. package/src/core/headfoot/HeadFoot.tsx +162 -81
  381. package/src/core/layout/Layout.tsx +54 -0
  382. package/src/core/responsive/Responsive.tsx +91 -98
  383. package/src/core/theme/ThemeProvider.tsx +45 -56
  384. package/src/core/viewport/Viewport.tsx +25 -27
  385. package/src/hooks/useClientService.ts +47 -0
  386. package/src/hooks/useContextMenu.tsx +131 -0
  387. package/src/hooks/useControlledValue.ts +47 -0
  388. package/src/hooks/useDebounce.ts +41 -24
  389. package/src/hooks/useEffectDebugger.ts +105 -94
  390. package/src/hooks/useIsDark.ts +10 -24
  391. package/src/hooks/useIsRtl.ts +32 -20
  392. package/src/hooks/useNavigator.tsx +41 -26
  393. package/src/hooks/useNotificationService.tsx +239 -0
  394. package/src/hooks/useOverlayService.tsx +67 -20
  395. package/src/hooks/usePropState.ts +52 -0
  396. package/src/hooks/usePropToggle.ts +54 -47
  397. package/src/hooks/useResize.ts +69 -45
  398. package/src/hooks/useResizeObserver.ts +59 -34
  399. package/src/hooks/useStorage.ts +40 -48
  400. package/src/i18n/index.ts +24 -25
  401. package/src/index.ts +115 -44
  402. package/src/types/colors.ts +49 -0
  403. package/src/types/global.d.ts +40 -17
  404. package/src/types/index.ts +243 -155
  405. package/src/typography/Abbr.tsx +62 -59
  406. package/src/typography/Anchor.tsx +63 -0
  407. package/src/typography/Copy.tsx +39 -29
  408. package/src/typography/Kbd.tsx +50 -0
  409. package/src/typography/Mark.tsx +56 -51
  410. package/src/typography/Text.tsx +57 -128
  411. package/src/typography/Title.tsx +36 -108
  412. package/src/typography/types.ts +27 -17
  413. package/src/utils/calculateDimensions.ts +50 -40
  414. package/src/utils/cloneElement.ts +61 -0
  415. package/src/{core/content/Content.module.css → utils/getBadgeProps.ts} +20 -15
  416. package/src/utils/getColor.ts +42 -36
  417. package/src/utils/getIconProps.ts +58 -0
  418. package/src/utils/getTooltipProps.ts +59 -0
  419. package/src/utils/index.ts +23 -17
  420. package/src/utils/nodeCheck.ts +4 -8
  421. package/css/flags.rect.css +0 -1607
  422. package/css/flags.wavy.css +0 -1606
  423. package/css/index.js +0 -250
  424. package/css/tailwind/colors.ts +0 -158
  425. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  426. package/dist/cjs/components/animations/Animations.js +0 -142
  427. package/dist/cjs/components/animations/Animations.module.css +0 -1
  428. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  429. package/dist/cjs/components/badge/Badge.module.css +0 -1
  430. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +0 -71
  431. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  432. package/dist/cjs/components/button/Button.module.css +0 -1
  433. package/dist/cjs/components/card/Card.module.css +0 -1
  434. package/dist/cjs/components/chip/Chip.module.css +0 -1
  435. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  436. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  437. package/dist/cjs/components/icon/Icon.module.css +0 -1
  438. package/dist/cjs/components/media/Media.module.css +0 -1
  439. package/dist/cjs/components/menu/Menu.module.css +0 -1
  440. package/dist/cjs/components/meter/Meter.module.css +0 -1
  441. package/dist/cjs/components/panel/Panel.module.css +0 -1
  442. package/dist/cjs/components/progress/Progress.module.css +0 -1
  443. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  444. package/dist/cjs/context/NotificationCenter.js +0 -254
  445. package/dist/cjs/core/aside/Aside.module.css +0 -1
  446. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  447. package/dist/cjs/core/content/Content.module.css +0 -1
  448. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  449. package/dist/cjs/core/page/Page.js +0 -66
  450. package/dist/cjs/core/page/Page.module.css +0 -1
  451. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  452. package/dist/cjs/core/section/Section.module.css +0 -1
  453. package/dist/cjs/core/theme/Theme.module.css +0 -1
  454. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  455. package/dist/cjs/hotkeys/HotKey.js +0 -47
  456. package/dist/cjs/hotkeys/HotKeyLabel.js +0 -52
  457. package/dist/cjs/hotkeys/HotKeyWrapper.js +0 -98
  458. package/dist/cjs/hotkeys/commons.js +0 -56
  459. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  460. package/dist/cjs/overlays/flyout/Flyout.js +0 -152
  461. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  462. package/dist/cjs/overlays/message/Message.js +0 -84
  463. package/dist/cjs/overlays/message/Message.module.css +0 -1
  464. package/dist/cjs/overlays/modal/Modal.js +0 -132
  465. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  466. package/dist/cjs/overlays/toast/Toast.js +0 -166
  467. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  468. package/dist/cjs/overlays/tooltip/Tooltip.js +0 -133
  469. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  470. package/dist/cjs/types/icons.js +0 -200
  471. package/dist/cjs/typography/Link.js +0 -55
  472. package/dist/cjs/typography/Typography.module.css +0 -1
  473. package/dist/cjs/typography/types.js +0 -42
  474. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  475. package/dist/esm/components/animations/Animations.js +0 -138
  476. package/dist/esm/components/animations/Animations.module.css +0 -1
  477. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  478. package/dist/esm/components/badge/Badge.module.css +0 -1
  479. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +0 -71
  480. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  481. package/dist/esm/components/button/Button.module.css +0 -1
  482. package/dist/esm/components/card/Card.module.css +0 -1
  483. package/dist/esm/components/chip/Chip.module.css +0 -1
  484. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  485. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  486. package/dist/esm/components/icon/Icon.module.css +0 -1
  487. package/dist/esm/components/media/Media.module.css +0 -1
  488. package/dist/esm/components/menu/Menu.module.css +0 -1
  489. package/dist/esm/components/meter/Meter.module.css +0 -1
  490. package/dist/esm/components/panel/Panel.module.css +0 -1
  491. package/dist/esm/components/progress/Progress.module.css +0 -1
  492. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  493. package/dist/esm/context/NotificationCenter.js +0 -254
  494. package/dist/esm/core/aside/Aside.module.css +0 -1
  495. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  496. package/dist/esm/core/content/Content.module.css +0 -1
  497. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  498. package/dist/esm/core/page/Page.js +0 -66
  499. package/dist/esm/core/page/Page.module.css +0 -1
  500. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  501. package/dist/esm/core/section/Section.module.css +0 -1
  502. package/dist/esm/core/theme/Theme.module.css +0 -1
  503. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  504. package/dist/esm/hotkeys/HotKey.js +0 -47
  505. package/dist/esm/hotkeys/HotKeyLabel.js +0 -52
  506. package/dist/esm/hotkeys/HotKeyWrapper.js +0 -96
  507. package/dist/esm/hotkeys/commons.js +0 -56
  508. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  509. package/dist/esm/overlays/flyout/Flyout.js +0 -152
  510. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  511. package/dist/esm/overlays/message/Message.js +0 -84
  512. package/dist/esm/overlays/message/Message.module.css +0 -1
  513. package/dist/esm/overlays/modal/Modal.js +0 -132
  514. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  515. package/dist/esm/overlays/toast/Toast.js +0 -166
  516. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  517. package/dist/esm/overlays/tooltip/Tooltip.js +0 -132
  518. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  519. package/dist/esm/types/icons.js +0 -202
  520. package/dist/esm/typography/Link.js +0 -55
  521. package/dist/esm/typography/Typography.module.css +0 -1
  522. package/dist/esm/typography/types.js +0 -41
  523. package/dist/types/components/animations/Animations.d.ts +0 -23
  524. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +0 -17
  525. package/dist/types/components/index.d.ts +0 -33
  526. package/dist/types/context/NotificationCenter.d.ts +0 -11
  527. package/dist/types/core/index.d.ts +0 -9
  528. package/dist/types/core/page/Page.d.ts +0 -23
  529. package/dist/types/core/section/Section.d.ts +0 -7
  530. package/dist/types/hotkeys/HotKey.d.ts +0 -2
  531. package/dist/types/hotkeys/HotKeyLabel.d.ts +0 -2
  532. package/dist/types/hotkeys/HotKeyWrapper.d.ts +0 -11
  533. package/dist/types/hotkeys/commons.d.ts +0 -28
  534. package/dist/types/overlays/alert/Alert.d.ts +0 -41
  535. package/dist/types/overlays/flyout/Flyout.d.ts +0 -57
  536. package/dist/types/overlays/index.d.ts +0 -6
  537. package/dist/types/overlays/message/Message.d.ts +0 -21
  538. package/dist/types/overlays/modal/Modal.d.ts +0 -53
  539. package/dist/types/overlays/toast/Toast.d.ts +0 -33
  540. package/dist/types/overlays/tooltip/Tooltip.d.ts +0 -18
  541. package/dist/types/types/icons.d.ts +0 -197
  542. package/dist/types/typography/Link.d.ts +0 -25
  543. package/dist/types/typography/index.d.ts +0 -6
  544. package/src/components/animations/Animations.module.css +0 -253
  545. package/src/components/animations/Animations.tsx +0 -196
  546. package/src/components/avatar/Avatar.module.css +0 -90
  547. package/src/components/badge/Badge.module.css +0 -165
  548. package/src/components/breadcrumbs/Breadcrumbs.module.css +0 -189
  549. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -109
  550. package/src/components/button/Button.module.css +0 -375
  551. package/src/components/card/Card.module.css +0 -152
  552. package/src/components/chip/Chip.module.css +0 -118
  553. package/src/components/collapsable/Collapsable.module.css +0 -30
  554. package/src/components/icon/Icon.module.css +0 -71
  555. package/src/components/index.ts +0 -62
  556. package/src/components/media/Media.module.css +0 -112
  557. package/src/context/NotificationCenter.tsx +0 -223
  558. package/src/core/aside/Aside.module.css +0 -231
  559. package/src/core/boundary/ErrorBoundary.module.css +0 -65
  560. package/src/core/headfoot/HeadFoot.module.css +0 -38
  561. package/src/core/index.ts +0 -32
  562. package/src/core/page/Page.module.css +0 -46
  563. package/src/core/page/Page.tsx +0 -101
  564. package/src/core/responsive/Responsive.module.css +0 -85
  565. package/src/core/section/Section.module.css +0 -28
  566. package/src/core/section/Section.tsx +0 -54
  567. package/src/core/theme/Theme.module.css +0 -30
  568. package/src/core/viewport/Viewport.module.css +0 -32
  569. package/src/hooks/useControlledValue.tsx +0 -43
  570. package/src/hotkeys/HotKey.tsx +0 -39
  571. package/src/hotkeys/HotKeyLabel.tsx +0 -61
  572. package/src/hotkeys/HotKeyWrapper.tsx +0 -137
  573. package/src/hotkeys/commons.ts +0 -74
  574. package/src/overlays/alert/Alert.tsx +0 -252
  575. package/src/overlays/flyout/Flyout.tsx +0 -283
  576. package/src/overlays/index.ts +0 -29
  577. package/src/overlays/message/Message.tsx +0 -107
  578. package/src/overlays/modal/Modal.tsx +0 -244
  579. package/src/overlays/toast/Toast.module.css +0 -37
  580. package/src/overlays/toast/Toast.tsx +0 -216
  581. package/src/overlays/tooltip/Tooltip.module.css +0 -53
  582. package/src/overlays/tooltip/Tooltip.tsx +0 -200
  583. package/src/types/icons.ts +0 -426
  584. package/src/typography/Link.tsx +0 -113
  585. package/src/typography/Typography.module.css +0 -68
  586. package/src/typography/index.ts +0 -29
  587. /package/dist/cjs/i18n/{ar.json.js → ar/core.json.js} +0 -0
  588. /package/dist/cjs/i18n/{en.json.js → en/core.json.js} +0 -0
  589. /package/dist/esm/i18n/{ar.json.js → ar/core.json.js} +0 -0
  590. /package/dist/esm/i18n/{en.json.js → en/core.json.js} +0 -0
  591. /package/src/i18n/{ar.json → ar/core.json} +0 -0
  592. /package/src/i18n/{en.json → en/core.json} +0 -0
@@ -2,82 +2,105 @@
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
5
- import { isObject, isNil, isNumber, mergeRefs } from '@react-fabric/utilities';
6
- import classNames from 'classnames';
7
- import { useMemo, cloneElement } from 'react';
5
+ import { cn } from '@react-fabric/utilities';
6
+ import { useMemo } from 'react';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { getColor } from '../../utils/getColor.js';
8
9
  import { Icon } from '../icon/Icon.js';
9
- import classes from './Badge.module.css';
10
- import { jsxs, jsx } from 'react/jsx-runtime';
11
10
 
12
- var _excluded = ["ref", "className", "value", "max", "ping", "block", "placement", "children", "forButton", "icon", "iconBg", "iconColor", "rtlFlip"];
11
+ var _excluded = ["className", "bg", "color", "icon", "inline", "ping", "value", "children", "placement"];
13
12
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
- var getBadgeProps = function getBadgeProps(badge) {
16
- if (isObject(badge)) {
17
- return Object.assign({
18
- forButton: true,
19
- placement: ""
20
- }, badge);
21
- } else {
22
- return {
23
- value: badge,
24
- forButton: true,
25
- placement: ""
26
- };
27
- }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ /**
15
+ * Tailwind class names for each badge placement position.
16
+ * Each value uses absolute positioning relative to the parent container,
17
+ * with RTL-aware horizontal flipping via Tailwind's `rtl:` variant.
18
+ */
19
+ var PLACEMENT_STYLES = {
20
+ top: "absolute z-1 top-0 inset-x-1/2 -translate-y-1/2 -translate-x-1/2 rtl:translate-x-1/2",
21
+ start: "absolute z-1 inset-s-0 top-1/2 -translate-y-1/2 -translate-x-1/2 rtl:translate-x-1/2",
22
+ end: "absolute z-1 inset-e-0 top-1/2 -translate-y-1/2 translate-x-1/2 rtl:-translate-x-1/2",
23
+ "top-start": "absolute z-1 top-0 start-0 -translate-y-1/2 -translate-x-1/2 rtl:translate-x-1/2",
24
+ "top-end": "absolute z-1 top-0 end-0 -translate-y-1/2 translate-x-1/2 rtl:-translate-x-1/2",
25
+ bottom: "absolute z-1 bottom-0 inset-x-1/2 translate-y-1/2 -translate-x-1/2 rtl:translate-x-1/2",
26
+ "bottom-start": "absolute z-1 bottom-0 start-0 translate-y-1/2 -translate-x-1/2 rtl:translate-x-1/2",
27
+ "bottom-end": "absolute z-1 bottom-0 end-0 translate-y-1/2 translate-x-1/2 rtl:-translate-x-1/2"
28
28
  };
29
- var Badge = function Badge(_ref) {
30
- var ref = _ref.ref,
31
- className = _ref.className,
32
- value = _ref.value,
33
- max = _ref.max,
29
+
30
+ /**
31
+ * A small overlay component used to display a numeric value, icon, or pulsing
32
+ * indicator positioned relative to a child element.
33
+ *
34
+ * Commonly used for notification counts, unread indicators, or status badges
35
+ * on avatars, buttons, or list items.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * import { Badge } from "@react-fabric/core";
40
+ *
41
+ * // Numeric badge
42
+ * <Badge value="42">
43
+ * <Avatar name="John" />
44
+ * </Badge>
45
+ *
46
+ * // Icon badge
47
+ * <Badge icon="icon-[mdi--bell]" />
48
+ *
49
+ * // Pulsing indicator
50
+ * <Badge ping>
51
+ * <Icon icon="icon-[mdi--email]" />
52
+ * </Badge>
53
+ * ```
54
+ */
55
+ function Badge(_ref) {
56
+ var className = _ref.className,
57
+ _ref$bg = _ref.bg,
58
+ bg = _ref$bg === void 0 ? "tint-200" : _ref$bg,
59
+ _ref$color = _ref.color,
60
+ color = _ref$color === void 0 ? "tint-900" : _ref$color,
61
+ icon = _ref.icon,
62
+ inline = _ref.inline,
34
63
  ping = _ref.ping,
35
- block = _ref.block,
64
+ value = _ref.value,
65
+ children = _ref.children,
36
66
  _ref$placement = _ref.placement,
37
67
  placement = _ref$placement === void 0 ? "top-end" : _ref$placement,
38
- children = _ref.children,
39
- _ref$forButton = _ref.forButton,
40
- forButton = _ref$forButton === void 0 ? false : _ref$forButton,
41
- icon = _ref.icon,
42
- iconBg = _ref.iconBg,
43
- iconColor = _ref.iconColor,
44
- rtlFlip = _ref.rtlFlip,
45
- rest = _objectWithoutProperties(_ref, _excluded);
46
- var label = useMemo(function () {
47
- if (!isNil(value)) {
48
- if (isNumber(value) && max && value > max) {
49
- return "".concat(max, "+");
50
- }
51
- return "".concat(value);
68
+ props = _objectWithoutProperties(_ref, _excluded);
69
+ // Render the appropriate badge shape based on which mode is active
70
+ var el = useMemo(function () {
71
+ if (icon) {
72
+ return /*#__PURE__*/jsx("div", {
73
+ className: cn("fabric-badgeIcon", "px-[0.325em] py-[0.25em] bg-(--bg) text-(--color) rounded-full leading-0"),
74
+ children: /*#__PURE__*/jsx(Icon, {
75
+ icon: icon
76
+ })
77
+ });
52
78
  }
53
- }, [value, max]);
54
- var innerRef = useMemo(function () {
55
- return mergeRefs(ref, children === null || children === void 0 ? void 0 : children.props.ref);
56
- }, [ref, children === null || children === void 0 ? void 0 : children.props.ref]);
57
-
58
- /**
59
- * wrap children in a relative div to float badge, wrapper allows for floating a badge on elements with overflow hidden
60
- */
61
- return /*#__PURE__*/jsxs("div", {
62
- className: classNames(forButton ? "contents" : "relative", block ? "block" : "inline-block"),
63
- children: [children && /*#__PURE__*/cloneElement(children, _objectSpread(_objectSpread({}, rest), {}, {
64
- ref: innerRef
65
- })), (!!ping || label) && /*#__PURE__*/jsxs("div", {
66
- "data-ref": "badge",
67
- "data-ping": ping,
68
- "data-placement": placement,
69
- className: classNames(classes.badge, className, "inline-block p-px min-w-2 min-h-2 text-center select-none rounded-full leading-none z-5 pointer-events-none", forButton && !placement ? "relative" : "absolute"),
70
- children: [label && /*#__PURE__*/jsx("span", {
71
- className: "p-1",
72
- children: label
73
- }), icon && /*#__PURE__*/jsx(Icon, {
74
- icon: icon,
75
- bg: iconBg,
76
- color: iconColor,
77
- rtlFlip: rtlFlip
78
- })]
79
- })]
80
- });
81
- };
79
+ if (value) {
80
+ return /*#__PURE__*/jsx("div", {
81
+ className: cn("fabric-badgeValue", "px-[0.5em] py-[0.25em] leading-none bg-(--bg) text-(--color) rounded-full"),
82
+ children: value
83
+ });
84
+ }
85
+ return /*#__PURE__*/jsx("div", {
86
+ className: cn("fabric-badgePing", "size-2 bg-(--bg) rounded-full", ping && "animate-ping")
87
+ });
88
+ }, [icon, value, ping]);
89
+ return /*#__PURE__*/jsxs("div", _objectSpread(_objectSpread({}, props), {}, {
90
+ "data-ref": "badge",
91
+ role: "presentation",
92
+ className: cn("fabric-badge", "size-fit relative", className),
93
+ children: [/*#__PURE__*/jsx("div", {
94
+ className: cn("fabric-badgeContainer", "rounded-full text-[0.625em] select-none pointer-events-none bg-(--bg) size-fit", !inline && PLACEMENT_STYLES[placement])
95
+ // Set CSS custom properties so child elements can reference badge colors
96
+ ,
97
+ style: {
98
+ "--color": getColor(color),
99
+ "--bg": getColor(bg)
100
+ },
101
+ children: el
102
+ }), children]
103
+ }));
104
+ }
82
105
 
83
- export { Badge, getBadgeProps };
106
+ export { Badge };
@@ -1,171 +1,233 @@
1
1
  'use client';
2
2
 
3
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
3
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
5
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
6
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
6
- import { mergeRefs, isString, isNil } from '@react-fabric/utilities';
7
- import classNames from 'classnames';
8
- import { useRef, useState, useCallback, useEffect, useMemo, Fragment, isValidElement } from 'react';
9
- import { useEffectDebugger } from '../../hooks/useEffectDebugger.js';
10
- import { HotKey } from '../../hotkeys/HotKey.js';
11
- import { HotKeyLabel } from '../../hotkeys/HotKeyLabel.js';
12
- import { Tooltip } from '../../overlays/tooltip/Tooltip.js';
13
- import { AnimationIndicator } from '../animations/Animations.js';
14
- import { getBadgeProps, Badge } from '../badge/Badge.js';
15
- import { Icon } from '../icon/Icon.js';
16
- import classes from './Button.module.css';
7
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
8
+ import { EMPTY_ARRAY, cn } from '@react-fabric/utilities';
9
+ import { useHotkeySequence } from '@tanstack/react-hotkeys';
10
+ import { useReducer, useEffect } from 'react';
11
+ import { Kbd } from '../../typography/Kbd.js';
17
12
  import { jsxs, jsx } from 'react/jsx-runtime';
13
+ import { getIconProps } from '../../utils/getIconProps.js';
14
+ import { AnimationIndicator } from '../animations/Indicator.js';
15
+ import { StyleEffect } from '../effect/StyleEffect.js';
16
+ import { Icon } from '../icon/Icon.js';
18
17
 
19
- var _excluded = ["as", "ref", "children", "className", "active", "color", "icon", "iconBg", "iconColor", "iconAlign", "altIcon", "rtlFlip", "rounded", "size", "disabled", "loading", "variant", "badge", "fullWidth", "spinOnHover", "onClick", "actionMessage", "stopPropagation", "type", "hotKey", "showActionDone", "showActionDoneEvent", "tabIndex", "data-ref"];
18
+ var _excluded = ["active", "altIcon", "as", "children", "className", "classNames", "color", "disabled", "icon", "loading", "onBlur", "onClick", "onFocus", "onMouseDown", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseOver", "onMouseUp", "activeClickable", "showActionDone", "showActionDoneEvent", "type", "ref", "rounded", "size", "variant", "width", "hotKey", "hideHotKeyLabel"];
20
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
21
  /**
23
- * Clickable action button
22
+ * A versatile button component that supports multiple variants, colors, sizes, and states.
23
+ * It can display icons, handle loading/action states, show keyboard shortcuts, and be
24
+ * polymorphic to render as different HTML elements or custom components.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * // Basic button
29
+ * <Button variant="solid" color="primary" onClick={handleClick}>
30
+ * Click me
31
+ * </Button>
32
+ *
33
+ * // Icon button with loading state
34
+ * <Button icon="icon-[mdi--floppy]" loading={saving}>
35
+ * Save
36
+ * </Button>
37
+ *
38
+ * // Polymorphic: renders as a link
39
+ * <Button as="a" href="/dashboard" variant="soft">
40
+ * Dashboard
41
+ * </Button>
42
+ *
43
+ * // Button with keyboard shortcut
44
+ * <Button hotKey="Ctrl+S" variant="dashed">
45
+ * Save (Ctrl+S)
46
+ * </Button>
47
+ * ```
24
48
  */
25
- var Button = function Button(_ref) {
26
- var as = _ref.as,
27
- ref = _ref.ref,
49
+ function Button(_ref) {
50
+ var active = _ref.active,
51
+ altIcon = _ref.altIcon,
52
+ as = _ref.as,
28
53
  children = _ref.children,
29
54
  className = _ref.className,
30
- active = _ref.active,
55
+ classNames = _ref.classNames,
31
56
  _ref$color = _ref.color,
32
- color = _ref$color === void 0 ? "primary" : _ref$color,
33
- icon = _ref.icon,
34
- iconBg = _ref.iconBg,
35
- iconColor = _ref.iconColor,
36
- _ref$iconAlign = _ref.iconAlign,
37
- iconAlign = _ref$iconAlign === void 0 ? "start" : _ref$iconAlign,
38
- altIcon = _ref.altIcon,
39
- rtlFlip = _ref.rtlFlip,
40
- rounded = _ref.rounded,
41
- size = _ref.size,
57
+ color = _ref$color === void 0 ? "default" : _ref$color,
42
58
  disabled = _ref.disabled,
59
+ icon = _ref.icon,
43
60
  loading = _ref.loading,
44
- variant = _ref.variant,
45
- badge = _ref.badge,
46
- fullWidth = _ref.fullWidth,
47
- spinOnHover = _ref.spinOnHover,
61
+ onBlur = _ref.onBlur,
48
62
  onClick = _ref.onClick,
49
- actionMessage = _ref.actionMessage,
50
- stopPropagation = _ref.stopPropagation,
63
+ onFocus = _ref.onFocus,
64
+ onMouseDown = _ref.onMouseDown,
65
+ onMouseEnter = _ref.onMouseEnter,
66
+ onMouseLeave = _ref.onMouseLeave,
67
+ onMouseMove = _ref.onMouseMove,
68
+ onMouseOver = _ref.onMouseOver,
69
+ onMouseUp = _ref.onMouseUp,
70
+ activeClickable = _ref.activeClickable,
71
+ showActionDone = _ref.showActionDone,
72
+ showActionDoneEvent = _ref.showActionDoneEvent,
51
73
  _ref$type = _ref.type,
52
74
  type = _ref$type === void 0 ? "button" : _ref$type,
75
+ ref = _ref.ref,
76
+ rounded = _ref.rounded,
77
+ size = _ref.size,
78
+ _ref$variant = _ref.variant,
79
+ variant = _ref$variant === void 0 ? "default" : _ref$variant,
80
+ width = _ref.width,
53
81
  hotKey = _ref.hotKey,
54
- showActionDone = _ref.showActionDone,
55
- _ref$showActionDoneEv = _ref.showActionDoneEvent,
56
- showActionDoneEvent = _ref$showActionDoneEv === void 0 ? "click" : _ref$showActionDoneEv,
57
- _ref$tabIndex = _ref.tabIndex,
58
- tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
59
- dataRef = _ref["data-ref"],
60
- aria = _objectWithoutProperties(_ref, _excluded);
61
- var refEl = useRef(null);
62
- var _useState = useState(false),
63
- _useState2 = _slicedToArray(_useState, 2),
64
- busy = _useState2[0],
65
- setBusy = _useState2[1];
66
- var _useState3 = useState(false),
67
- _useState4 = _slicedToArray(_useState3, 2),
68
- actionDone = _useState4[0],
69
- setActionDone = _useState4[1];
70
- var clickHandler = useCallback(function (e) {
71
- setBusy(true);
72
- stopPropagation && e.stopPropagation();
73
- var ret = onClick === null || onClick === void 0 ? void 0 : onClick(e);
74
- void Promise.resolve(ret).then(function (b) {
75
- setBusy(false);
76
- if (b !== false && actionMessage && showActionDoneEvent === "click") {
77
- setActionDone(true);
82
+ hideHotKeyLabel = _ref.hideHotKeyLabel,
83
+ props = _objectWithoutProperties(_ref, _excluded);
84
+ // Action state: tracks whether an action is running and whether to show the done overlay
85
+ var _useReducer = useReducer(function (state, action) {
86
+ // Start action: show spinner, hide done overlay
87
+ if (action.type === "actionStart") {
88
+ return {
89
+ isActionRunning: true,
90
+ showActionDone: false
91
+ };
92
+ }
93
+ // Action finished: hide spinner
94
+ if (action.type === "actionFinished") {
95
+ return _objectSpread(_objectSpread({}, state), {}, {
96
+ isActionRunning: false
97
+ });
98
+ }
99
+ // Action done: show checkmark overlay
100
+ if (action.type === "actionDone") {
101
+ return {
102
+ isActionRunning: false,
103
+ showActionDone: true
104
+ };
78
105
  }
79
- });
80
- }, [onClick, disabled, actionMessage, showActionDoneEvent, stopPropagation]);
106
+ // Reset: hide everything
107
+ return {
108
+ isActionRunning: false,
109
+ showActionDone: false
110
+ };
111
+ }, {
112
+ isActionRunning: false,
113
+ showActionDone: false
114
+ }),
115
+ _useReducer2 = _slicedToArray(_useReducer, 2),
116
+ state = _useReducer2[0],
117
+ dispatch = _useReducer2[1];
118
+ // Handle button click: dispatch action start, run onClick, then dispatch finished
119
+ var handleAction = /*#__PURE__*/function () {
120
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(e) {
121
+ return _regeneratorRuntime.wrap(function (_context) {
122
+ while (1) switch (_context.prev = _context.next) {
123
+ case 0:
124
+ dispatch({
125
+ type: "actionStart"
126
+ });
127
+ _context.prev = 1;
128
+ _context.next = 2;
129
+ return Promise.resolve(onClick === null || onClick === void 0 ? void 0 : onClick(e));
130
+ case 2:
131
+ if (showActionDoneEvent === "click") {
132
+ dispatch({
133
+ type: "actionDone"
134
+ });
135
+ setTimeout(function () {
136
+ return dispatch({
137
+ type: "actionReset"
138
+ });
139
+ }, 2000);
140
+ }
141
+ case 3:
142
+ _context.prev = 3;
143
+ dispatch({
144
+ type: "actionFinished"
145
+ });
146
+ return _context.finish(3);
147
+ case 4:
148
+ case "end":
149
+ return _context.stop();
150
+ }
151
+ }, _callee, null, [[1,, 3, 4]]);
152
+ }));
153
+ return function handleAction(_x) {
154
+ return _ref2.apply(this, arguments);
155
+ };
156
+ }();
157
+ useHotkeySequence(hotKey ? [hotKey].flat() : EMPTY_ARRAY, function () {
158
+ void handleAction();
159
+ }, {
160
+ enabled: !disabled
161
+ });
81
162
 
82
- /** ***************** reset done state on timeout *******************/
163
+ // Manual mode: show/hide the done overlay based on showActionDone prop
83
164
  useEffect(function () {
84
- actionMessage && showActionDone && setActionDone(true);
85
- }, [showActionDone, actionMessage]);
86
- useEffectDebugger(function () {
87
- if (actionDone) {
88
- var timer = setTimeout(function () {
89
- return setActionDone(false);
90
- }, 2000);
165
+ if (showActionDoneEvent === "manual") {
166
+ if (showActionDone) dispatch({
167
+ type: "actionDone"
168
+ });
91
169
  return function () {
92
- return clearTimeout(timer);
170
+ dispatch({
171
+ type: "actionFinished"
172
+ });
93
173
  };
94
174
  }
95
- }, [actionDone], "ActionButton done handler");
96
- var TooltipWrapper = useMemo(function () {
97
- return actionMessage ? Tooltip : Fragment;
98
- }, [actionMessage, actionDone]);
99
- var tooltipProps = useMemo(function () {
100
- if (actionDone && actionMessage) {
101
- return {
102
- content: actionMessage,
103
- placement: "top",
104
- color: color,
105
- open: true
106
- };
107
- }
108
- }, [actionDone, actionMessage, color]);
109
- var badgeProps = useMemo(function () {
110
- return getBadgeProps(badge);
111
- }, [badge]);
175
+ }, [showActionDone, showActionDoneEvent]);
112
176
  var E = as !== null && as !== void 0 ? as : "button";
113
177
  return /*#__PURE__*/jsxs("div", {
114
- className: classNames(classes.buttonWrapper, className, "relative align-text-top select-none focus-within:z-1", fullWidth ? "block w-full" : "inline-block"),
115
- "data-ref": dataRef !== null && dataRef !== void 0 ? dataRef : "button",
116
- "data-size": size,
117
- "data-loading": busy || loading,
178
+ className: cn("fabric-buttonWrapper", "inline-flex relative is-disabled:cursor-not-allowed is-loading:cursor-wait", className, classNames === null || classNames === void 0 ? void 0 : classNames.root),
179
+ "data-loading": loading || state.isActionRunning,
118
180
  "data-disabled": disabled,
119
- children: [hotKey && /*#__PURE__*/jsx(HotKey, {
120
- keyCombo: hotKey,
121
- handler: function handler() {
122
- var _refEl$current;
123
- return !disabled && ((_refEl$current = refEl.current) === null || _refEl$current === void 0 ? void 0 : _refEl$current.click());
124
- }
125
- }), /*#__PURE__*/jsx(TooltipWrapper, _objectSpread(_objectSpread({}, tooltipProps), {}, {
126
- children: /*#__PURE__*/jsxs(E, _objectSpread(_objectSpread({
127
- ref: mergeRefs(ref, refEl),
128
- role: "button",
129
- className: classNames(classes.button, "pointer-events-auto cursor-pointer select-none flex flex-nowrap w-full h-full items-center border-0 -outline-offset-1 justify-center max-w-72 p-0 font-sans font-medium appearance-none", "focus-visible:ring-2 focus-visible:ring-offset-2 buttonInner", fullWidth && "max-w-full w-full", rounded && "rounded-full", spinOnHover && classes.spinOnHover),
130
- type: type,
131
- disabled: disabled,
132
- tabIndex: tabIndex,
133
- "data-inner-clickable": true,
134
- onClick: clickHandler,
135
- "data-color": color,
136
- "data-active": active,
137
- "data-variant": variant
138
- }, aria), {}, {
139
- children: [icon && /*#__PURE__*/jsx(Icon, {
140
- className: classes.buttonIcon,
141
- icon: icon,
142
- bg: iconBg,
143
- color: iconColor,
144
- rtlFlip: rtlFlip,
145
- "data-align": iconAlign
146
- }), /*#__PURE__*/isValidElement(children) && /*#__PURE__*/jsx("div", {
147
- className: classes.buttonChild,
148
- children: children
149
- }), isString(children) && /*#__PURE__*/jsx("label", {
150
- className: classNames(classes.buttonLabel, "truncate"),
151
- "data-colored-icon": !!iconBg,
152
- children: children
153
- }), !isNil(badge) && /*#__PURE__*/jsx(Badge, _objectSpread({}, badgeProps)), hotKey && /*#__PURE__*/jsx(HotKeyLabel, {
154
- keyCombo: hotKey
155
- }), altIcon && /*#__PURE__*/jsx(Icon, {
156
- className: classes.altIcon,
157
- icon: altIcon,
158
- rtlFlip: true
159
- })]
160
- }))
161
- })), actionDone && /*#__PURE__*/jsx("div", {
162
- className: classNames("absolute inset-0 overflow-hidden flex justify-center items-center", "bg-".concat(color, "-300"), rounded ? "rounded-full" : "rounded"),
181
+ "data-rounded": rounded,
182
+ "data-variant": variant,
183
+ "data-active": active,
184
+ "data-color": color,
185
+ "data-size": size,
186
+ style: {
187
+ width: width
188
+ },
189
+ children: [/*#__PURE__*/jsxs(E, _objectSpread(_objectSpread({
190
+ ref: ref
191
+ }, props), {}, {
192
+ type: type,
193
+ className: cn("fabric-button", classNames === null || classNames === void 0 ? void 0 : classNames.button, "relative w-full appearance-none outline cursor-pointer overflow-hidden flex items-center justify-center has-[.fabric-buttonLabel]:px-[0.5em]", "rounded is-rounded:rounded-full", "is-loading:pointer-events-none is-loading:after:animate-progress is-disabled:pointer-events-none", "not-is-active:is-disabled:opacity-50 not-is-active:is-disabled:after:bg-tint-500/10", !activeClickable && "is-active:pointer-events-none"),
194
+ "data-clickable": true,
195
+ "data-ref": "button",
196
+ "data-testid": props["data-testid"],
197
+ "data-test-value": props["data-test-value"],
198
+ role: "button",
199
+ disabled: disabled,
200
+ "aria-label": props["aria-label"],
201
+ "aria-disabled": disabled,
202
+ onFocus: onFocus,
203
+ onBlur: onBlur
204
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
205
+ ,
206
+ onClick: handleAction,
207
+ onMouseDown: onMouseDown,
208
+ onMouseUp: onMouseUp,
209
+ onMouseOver: onMouseOver,
210
+ onMouseMove: onMouseMove,
211
+ onMouseEnter: onMouseEnter,
212
+ onMouseLeave: onMouseLeave,
213
+ children: [variant !== "link" && /*#__PURE__*/jsx(StyleEffect, {}), icon && /*#__PURE__*/jsx(Icon, _objectSpread({
214
+ className: cn("fabric-buttonIcon", classNames === null || classNames === void 0 ? void 0 : classNames.icon, "m-[0.375em] has-[~_.fabric-buttonLabel]:mx-0 inline-block size-fit flex-content pointer-events-none")
215
+ }, getIconProps(icon))), children && /*#__PURE__*/jsx("div", {
216
+ className: cn("fabric-buttonLabel", classNames === null || classNames === void 0 ? void 0 : classNames.label, "m-[0.25em] truncate flex-[0_1_auto] leading-tight pointer-events-none"),
217
+ children: children
218
+ }), !hideHotKeyLabel && hotKey && /*#__PURE__*/jsx(Kbd, {
219
+ keys: hotKey
220
+ }), altIcon && /*#__PURE__*/jsx(Icon, _objectSpread({
221
+ className: cn("fabric-buttonAltIcon", "my-[0.25em] size-fit inline-block flex-content pointer-events-none")
222
+ }, getIconProps(altIcon)))]
223
+ })), state.showActionDone && /*#__PURE__*/jsx("div", {
224
+ "data-testid": "doneOverlay",
225
+ className: "fabric-buttonDoneOverlay absolute inset-0 flex items-center justify-center z-1 border rounded is-rounded:rounded-full",
163
226
  children: /*#__PURE__*/jsx(AnimationIndicator, {
164
- type: "check",
165
- color: color
227
+ type: "check"
166
228
  })
167
229
  })]
168
230
  });
169
- };
231
+ }
170
232
 
171
233
  export { Button };