@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
@@ -21,53 +21,30 @@
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 { useMemo } from "react";
26
- import { type ContentProps } from "../../core/content/Content";
27
- import { type HeadFootProps } from "../../core/headfoot/HeadFoot";
24
+ import { cn } from "@react-fabric/utilities";
25
+ import { useHotkeySequences } from "@tanstack/react-hotkeys";
26
+ import { Activity, useMemo } from "react";
27
+ import type { ContentProps } from "../../core/content/Content";
28
+ import type { HeadFootProps } from "../../core/headfoot/HeadFoot";
28
29
  import { usePropToggle } from "../../hooks/usePropToggle";
29
- import {
30
- type AriaProps,
31
- type ChildrenProp,
32
- type CollapseProps,
33
- type CssProp,
34
- type ExpandProps,
35
- type IconProps,
36
- type TestProps,
37
- } from "../../types";
38
- import { CoreIcons } from "../../types/icons";
39
- import { Loading } from "../animations/Animations";
30
+ import type { ChildrenProp, CollapseProps, CssPropWithMap, ExpandProps, TestProps } from "../../types";
31
+ import { LoadingLine } from "../animations/LoadingLine";
40
32
  import { Icon } from "../icon/Icon";
41
- import classes from "./Panel.module.css";
33
+ import type { TitlebarProps } from "../titlebar/Titlebar";
34
+ import { Titlebar } from "../titlebar/Titlebar";
42
35
 
43
36
  export interface PanelProps
44
- extends CssProp,
45
- AriaProps,
37
+ extends
38
+ CssPropWithMap<{ root: string; body?: string; titlebar?: string; title?: string; icon?: string }>,
46
39
  TestProps,
47
- IconProps,
48
40
  ExpandProps,
49
41
  CollapseProps,
42
+ TitlebarProps,
50
43
  ChildrenProp<HeadFootProps | ContentProps> {
51
44
  /**
52
45
  * panel id used by panel stack
53
46
  */
54
- panelId?: string;
55
- /**
56
- * panel title
57
- */
58
- title?: string;
59
- /**
60
- * header actions
61
- */
62
- actions?: JSX.Element;
63
- /**
64
- * header css classname(s)
65
- */
66
- headerClassName?: string;
67
- /**
68
- * title css classname(s)
69
- */
70
- titleClassName?: string;
47
+ panelId?: string | number;
71
48
  /**
72
49
  * loading state
73
50
  */
@@ -102,17 +79,43 @@ export interface PanelProps
102
79
  onClose?: () => void;
103
80
  }
104
81
 
105
- export const Panel = ({
82
+ /**
83
+ * A component that represents a panel with a header, body, and optional actions.
84
+ * It supports expandable and collapsible functionality, loading state, and customizable styles.
85
+ * The panel can be resized and has a fixed position when expanded.
86
+ * It can be customized with different colors, icons, and behaviors.
87
+ * This component is useful for displaying content in a structured way, allowing users to interact with it through actions and toggles.
88
+ * It can be used in various applications where panels are needed, such as dashboards, settings pages, or content management systems.
89
+ *
90
+ * @example
91
+ * ```jsx
92
+ * <Panel
93
+ * title="Panel Title"
94
+ * icon="icon-[mdi--info]"
95
+ * actions={<button>Action</button>}
96
+ * expandable
97
+ * collapsable
98
+ * onExpand={() => console.log("Expanded")}
99
+ * onCollapse={() => console.log("Collapsed")}
100
+ * onClose={() => console.log("Closed")}
101
+ * height="400px"
102
+ * width="300px"
103
+ * minHeight="200px"
104
+ * minWidth="200px"
105
+ * maxHeight="600px"
106
+ * maxWidth="600px"
107
+ * >
108
+ * <p>This is the content of the panel.</p>
109
+ * </Panel>
110
+ * ```
111
+ */
112
+ export function Panel({
106
113
  children,
107
114
  className,
108
- titleClassName,
109
- headerClassName,
115
+ classNames,
110
116
  title,
111
117
  actions,
112
118
  icon,
113
- iconBg,
114
- iconColor,
115
- rtlFlip,
116
119
  panelId,
117
120
  height,
118
121
  width,
@@ -131,25 +134,26 @@ export const Panel = ({
131
134
  // @ts-expect-error ignore
132
135
  onBack,
133
136
  ...aria
134
- }: PanelProps) => {
135
- const [collapsed, toggleCollapse] = usePropToggle(
136
- _collapsed,
137
- onCollapse,
138
- panelId,
139
- );
137
+ }: PanelProps) {
138
+ const [collapsed, toggleCollapse] = usePropToggle(_collapsed, onCollapse, panelId);
140
139
  const [expanded, toggleExpand] = usePropToggle(_expanded, onExpand, panelId);
141
140
 
142
141
  const hasTools = useMemo(() => {
143
142
  return !!expandable || !!collapsable || !!onClose;
144
143
  }, [expandable, collapsable, onClose]);
145
144
 
145
+ useHotkeySequences([
146
+ { sequence: ["Escape"], callback: () => toggleExpand(), options: { enabled: expanded, conflictBehavior: "allow" } },
147
+ ]);
148
+
146
149
  return (
147
150
  <div
148
- className={classNames(
149
- classes.panel,
151
+ className={cn(
152
+ "fabric-panel",
150
153
  className,
151
- "rounded-capped overflow-hidden outline grid",
154
+ "rounded-capped overflow-hidden outline grid group",
152
155
  expanded ? "fixed inset-4 z-50" : "relative",
156
+ !collapsed && "not-last:border-b",
153
157
  )}
154
158
  data-ref="panel"
155
159
  data-collapsed={collapsed}
@@ -169,88 +173,76 @@ export const Panel = ({
169
173
  }
170
174
  {...aria}
171
175
  >
172
- <header
173
- role="none"
174
- className={classNames(
175
- classes.panelHeader,
176
- headerClassName,
177
- "flex flex-nowrap items-center area-head",
178
- )}
179
- data-testid="panel-header"
180
- onClick={collapsable ? toggleCollapse : undefined}
181
- >
182
- {onBack && (
183
- <Icon
184
- data-ref="panelBack"
185
- className={classNames(classes.panelAction, "cursor-pointer")}
186
- icon={CoreIcons.chevronLeft}
187
- onClick={onBack}
188
- />
189
- )}
190
- {icon && (
191
- <Icon
192
- icon={icon}
193
- bg={iconBg}
194
- color={iconColor}
195
- rtlFlip={rtlFlip}
196
- className="p-2 text-md select-none pointer-events-none"
197
- />
198
- )}
199
- <div
200
- className={classNames(
201
- titleClassName,
202
- "flex-1 select-none truncate",
203
- title && "py-1 first:px-2",
204
- )}
205
- >
206
- {title}
207
- </div>
208
- <div className="px-1">{actions}</div>
209
- {hasTools && (
210
- <div
211
- role="none"
212
- className="px-1 gap-px flex"
213
- onClick={(e) => e.stopPropagation()}
214
- >
215
- {expandable && (
216
- <Icon
217
- data-ref="panelExpand"
218
- className={classNames(classes.panelAction, "cursor-pointer")}
219
- icon={expanded ? CoreIcons.minimize : CoreIcons.maximize}
220
- onClick={toggleExpand}
221
- />
176
+ <Titlebar
177
+ title={title}
178
+ icon={icon}
179
+ onClick={() => toggleCollapse()}
180
+ prepend={
181
+ !!onBack && (
182
+ <Icon
183
+ rtlFlip
184
+ data-ref="panelBack"
185
+ className={cn("fabric-panelAction", "cursor-pointer pointer-events-auto")}
186
+ icon="icon-[mdi--chevron-left]"
187
+ // @ts-expect-error ignore
188
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
189
+ onClick={onBack}
190
+ />
191
+ )
192
+ }
193
+ actions={
194
+ <>
195
+ {actions}
196
+ {hasTools && (
197
+ <div role="none" className="px-1 gap-px flex" onClick={(e) => e.stopPropagation()}>
198
+ {expandable && (
199
+ <button
200
+ type="button"
201
+ className="size-fit cursor-pointer leading-none outline-none"
202
+ onClick={() => toggleExpand()}
203
+ >
204
+ <Icon
205
+ data-ref="panelExpand"
206
+ className={cn("fabric-panelAction", "cursor-pointer pointer-events-auto")}
207
+ icon={expanded ? "icon-[mdi--fullscreen-exit]" : "icon-[mdi--fullscreen]"}
208
+ />
209
+ </button>
210
+ )}
211
+ {!expanded && collapsable && (
212
+ <button
213
+ type="button"
214
+ className="size-fit cursor-pointer leading-none outline-none"
215
+ onClick={() => toggleCollapse()}
216
+ >
217
+ <Icon
218
+ data-ref="panelCollapse"
219
+ className={cn("fabric-panelAction", "cursor-pointer pointer-events-auto")}
220
+ icon={collapsed ? "icon-[mdi--plus-box-outline]" : "icon-[mdi--minus-box-outline]"}
221
+ />
222
+ </button>
223
+ )}
224
+ {!expanded && onClose && (
225
+ <button type="button" className="size-fit cursor-pointer leading-none outline-none" onClick={() => onClose()}>
226
+ <Icon
227
+ data-ref="panelClose"
228
+ className={cn("fabric-panelAction", "cursor-pointer pointer-events-auto")}
229
+ icon="icon-[mdi--close]"
230
+ />
231
+ </button>
232
+ )}
233
+ </div>
222
234
  )}
223
- {!expanded && collapsable && (
224
- <Icon
225
- data-ref="panelCollapse"
226
- className={classNames(classes.panelAction, "cursor-pointer")}
227
- icon={collapsed ? CoreIcons.expand : CoreIcons.collapse}
228
- onClick={toggleCollapse}
229
- />
230
- )}
231
- {!expanded && onClose && (
232
- <Icon
233
- data-ref="panelClose"
234
- className={classNames(classes.panelAction, "cursor-pointer")}
235
- icon={CoreIcons.close}
236
- onClick={onClose}
237
- />
238
- )}
239
- </div>
240
- )}
241
- </header>
242
- {(!collapsed || expanded) && (
243
- <div
244
- data-testid="panel-body"
245
- className={classNames(
246
- classes.panelBody,
247
- "area-content grid overflow-hidden",
248
- )}
249
- >
250
- {loading && <Loading />}
235
+ </>
236
+ }
237
+ className={cn(classNames?.titlebar)}
238
+ classNames={classNames}
239
+ />
240
+ <Activity mode={!collapsed || expanded ? "visible" : "hidden"}>
241
+ <div data-ref="panelBody" className={cn("fabric-panelBody", classNames?.body, "area-content grid overflow-hidden")}>
242
+ {loading && <LoadingLine />}
251
243
  {children}
252
244
  </div>
253
- )}
245
+ </Activity>
254
246
  </div>
255
247
  );
256
- };
248
+ }
@@ -21,14 +21,12 @@
21
21
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  */
23
23
 
24
- import classNames from "classnames";
25
- import { Children, cloneElement, useCallback, useState } from "react";
26
- import {
27
- useEffectDebugger,
28
- useMemoDebugger,
29
- } from "../../hooks/useEffectDebugger";
30
- import { type ChildrenProp } from "../../types";
31
- import classes from "./Panel.module.css";
24
+ import { cn } from "@react-fabric/utilities";
25
+ import { Children, cloneElement, isValidElement, useState } from "react";
26
+ import { useEffectDebugger, useMemoDebugger } from "../../hooks/useEffectDebugger";
27
+ import type { ChildrenProp } from "../../types";
28
+ import { cloneChildren } from "../../utils";
29
+ import type { PanelProps } from "./Panel";
32
30
 
33
31
  export interface PanelGroupProps extends ChildrenProp {
34
32
  /**
@@ -38,20 +36,36 @@ export interface PanelGroupProps extends ChildrenProp {
38
36
  /**
39
37
  * active change callback
40
38
  */
41
- onActiveChange?: (panelId: string) => void;
39
+ onActiveChange?: (panelId: string | number) => void;
42
40
  }
43
41
 
44
- export const PanelGroup = ({
45
- children,
46
- activePanel,
47
- onActiveChange,
48
- }: PanelGroupProps) => {
49
- const [expandedPanel, setExpandedPanel] = useState<string>();
42
+ /**
43
+ * A component that groups multiple panels together, allowing for one panel to be expanded at a time.
44
+ * This component allows you to manage a group of panels where only one can be expanded at a time.
45
+ * It accepts an `activePanel` prop to control which panel is currently expanded,
46
+ * and an `onActiveChange` callback that is triggered when the active panel changes.
47
+ * It uses the `Panel` component to render each individual panel within the group.
48
+ *
49
+ * @example
50
+ * ```jsx
51
+ * <PanelGroup
52
+ * activePanel="panel1"
53
+ * onActiveChange={(panelId) => console.log(`Active panel changed to: ${panelId}`)}
54
+ * >
55
+ * <Panel panelId="panel1" title="Panel 1">Content for Panel 1</Panel>
56
+ * <Panel panelId="panel2" title="Panel 2">Content for Panel 2</Panel>
57
+ * <Panel panelId="panel3" title="Panel 3">Content for Panel 3</Panel>
58
+ * </PanelGroup>
59
+ * ```
60
+ */
61
+ export function PanelGroup({ children, activePanel, onActiveChange }: PanelGroupProps) {
62
+ const [expandedPanel, setExpandedPanel] = useState<string | number>();
50
63
 
51
64
  const panels = useMemoDebugger(
52
65
  () =>
66
+ // eslint-disable-next-line @eslint-react/no-children-to-array
53
67
  Children.toArray(children).map(
54
- (child: AnyObject, index: number) => child.props.panelId || index,
68
+ (child, index: number) => (isValidElement<{ panelId: string }>(child) ? child.props?.panelId : "") || index,
55
69
  ),
56
70
  [children],
57
71
  "PanelGroup children",
@@ -65,35 +79,27 @@ export const PanelGroup = ({
65
79
  "PanelGroup setActive",
66
80
  );
67
81
 
68
- const changeExpanded = useCallback(
69
- (collapsed: boolean, id: string, handler?: AnyObject) => {
70
- if (!collapsed) {
71
- setExpandedPanel(id);
72
- onActiveChange?.(id);
73
- }
74
- handler?.(collapsed);
75
- return id !== expandedPanel;
76
- },
77
- [onActiveChange, expandedPanel],
78
- );
82
+ const changeExpanded = (collapsed: boolean, id: string | number, handler?: (args: boolean) => void) => {
83
+ if (!collapsed) {
84
+ setExpandedPanel(id);
85
+ onActiveChange?.(id);
86
+ }
87
+ handler?.(collapsed);
88
+ return id !== expandedPanel;
89
+ };
79
90
 
80
91
  return (
81
- <div
82
- data-ref="panelGroup"
83
- className={classNames(
84
- classes.panelGroup,
85
- "flex flex-col overflow-auto area-content p-px",
86
- )}
87
- >
88
- {Children.toArray(children).map((child: AnyObject, index: number) =>
89
- cloneElement(child, {
90
- panelId: child.props.panelId || index,
92
+ <div data-ref="panelGroup" className={cn("fabric-panelGroup", "flex flex-col overflow-auto scroll-thin area-content p-px")}>
93
+ {cloneChildren(children)?.map((child, index: number) => {
94
+ const childEl = child as React.ReactElement<PanelProps>;
95
+ const id = childEl.props.panelId || index;
96
+ return cloneElement(childEl, {
97
+ panelId: id,
91
98
  collapsable: true,
92
- onCollapse: (b: boolean, id: string) =>
93
- changeExpanded(b, id, child.props.onCollapse),
94
- collapsed: expandedPanel !== (child.props.panelId || index),
95
- }),
96
- )}
99
+ onCollapse: (b: boolean) => changeExpanded(b, id, childEl.props.onCollapse),
100
+ collapsed: expandedPanel !== (childEl.props.panelId || index),
101
+ });
102
+ })}
97
103
  </div>
98
104
  );
99
- };
105
+ }
@@ -21,18 +21,9 @@
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 {
25
- Children,
26
- cloneElement,
27
- type MouseEvent,
28
- useCallback,
29
- useEffect,
30
- useMemo,
31
- useRef,
32
- useState,
33
- useTransition,
34
- } from "react";
35
- import { type ChildrenProp, type CssProp } from "../../types";
24
+ import { Children, cloneElement, isValidElement, useEffect, useMemo, useRef, useState, useTransition } from "react";
25
+ import type { ChildrenProp, CssProp } from "../../types";
26
+ import type { PanelProps } from "./Panel";
36
27
 
37
28
  export interface PanelStackProps extends CssProp, ChildrenProp {
38
29
  /**
@@ -49,14 +40,33 @@ export interface PanelStackProps extends CssProp, ChildrenProp {
49
40
  onBack?: (panelId: string, nextPanelId: string) => boolean | undefined;
50
41
  }
51
42
 
52
- export const PanelStack = ({
53
- active,
54
- children,
55
- className,
56
- onPanelChange,
57
- onBack,
58
- ...rest
59
- }: PanelStackProps) => {
43
+ /**
44
+ * A component that manages a stack of panels, allowing navigation between them.
45
+ * This component allows you to manage a stack of panels where you can navigate between them.
46
+ * It accepts an `active` prop to control which panel is currently active,
47
+ * an `onPanelChange` callback that is triggered when the active panel changes,
48
+ * and an `onBack` callback to handle navigation to the previous panel in the history.
49
+ * It uses the `Panel` component to render each individual panel within the stack.
50
+ * The component maintains a history of panels to allow back navigation,
51
+ * and it updates the active panel based on user interactions.
52
+ *
53
+ * @example
54
+ * ```jsx
55
+ * <PanelStack
56
+ * active="panel1"
57
+ * onPanelChange={(panelId) => console.log(`Active panel changed to: ${panelId}`)}
58
+ * onBack={(currentPanel, nextPanel) => {
59
+ * console.log(`Navigating back from ${currentPanel} to ${nextPanel}`);
60
+ * return true; // return false to prevent navigation
61
+ * }}
62
+ * >
63
+ * <Panel panelId="panel1" title="Panel 1">Content for Panel 1</Panel>
64
+ * <Panel panelId="panel2" title="Panel 2">Content for Panel 2</Panel>
65
+ * <Panel panelId="panel3" title="Panel 3">Content for Panel 3</Panel>
66
+ * </PanelStack>
67
+ * ```
68
+ */
69
+ export function PanelStack({ children, className, onPanelChange, onBack, ...rest }: PanelStackProps) {
60
70
  const stackRef = useRef<HTMLDivElement>(null);
61
71
  const [history, setHistory] = useState<string[]>([]);
62
72
  const [, startTransition] = useTransition();
@@ -64,10 +74,16 @@ export const PanelStack = ({
64
74
  const panels = useMemo(
65
75
  () =>
66
76
  new Map(
67
- Children.toArray(children).map(
68
- (child: AnyObject) =>
69
- child.props && [child.props.panelId ?? "root", child],
70
- ),
77
+ // eslint-disable-next-line @eslint-react/no-children-to-array
78
+ Children.toArray(children)
79
+ // @ts-expect-error ignore
80
+ .map<[idx: string | number, React.ReactElement<PanelProps>]>((child) => {
81
+ if (isValidElement(child)) {
82
+ const childEl = child as React.ReactElement<PanelProps>;
83
+ return [childEl.props.panelId ?? "root", childEl];
84
+ }
85
+ })
86
+ .filter(Boolean),
71
87
  ),
72
88
  [children],
73
89
  );
@@ -75,59 +91,44 @@ export const PanelStack = ({
75
91
  useEffect(() => {
76
92
  startTransition(() => {
77
93
  onPanelChange?.(history[0] ?? "root");
78
- stackRef.current?.dispatchEvent(
79
- new Event("updatePopper", { bubbles: true }),
80
- );
94
+ stackRef.current?.dispatchEvent(new Event("updatePopper", { bubbles: true }));
81
95
  });
82
96
  }, [onPanelChange, history]);
83
97
 
84
- const goBack = useCallback(() => {
85
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-boolean-literal-compare
98
+ const goBack = () => {
86
99
  if (onBack?.(history[0], history[1] ?? "root") !== false) {
87
100
  setHistory(history.slice(1));
88
101
  }
89
- }, [history, onBack]);
102
+ };
90
103
 
91
- const currentPanel = useMemo<AnyObject>(
92
- () => panels.get(history[0]) ?? panels.values().next().value,
93
- [history, panels],
94
- );
104
+ const currentPanel = useMemo(() => panels.get(history[0]) ?? panels.values().next().value, [history, panels]);
95
105
 
96
- const checkMenuClick = useCallback(
97
- (e: MouseEvent) => {
98
- const panelKey = (e.target as HTMLElement)?.dataset?.panel;
99
- if (panelKey) {
100
- if (panelKey === "back") {
101
- goBack();
102
- } else if (panelKey === "root") {
103
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-boolean-literal-compare
104
- if (onBack?.(history[0], "root") !== false) {
105
- setHistory([]);
106
- }
107
- } else if (panels.has(panelKey)) {
108
- setHistory([panelKey, ...history]);
106
+ const checkMenuClick = (e: React.MouseEvent) => {
107
+ const panelKey = (e.target as HTMLElement)?.dataset?.panel;
108
+ if (panelKey) {
109
+ if (panelKey === "back") {
110
+ goBack();
111
+ } else if (panelKey === "root") {
112
+ if (onBack?.(history[0], "root") !== false) {
113
+ setHistory([]);
109
114
  }
110
- e.stopPropagation();
111
- e.preventDefault();
112
- return false;
115
+ } else if (panels.has(panelKey)) {
116
+ setHistory([panelKey, ...history]);
113
117
  }
114
- return true;
115
- },
116
- [goBack, history, panels, onBack],
117
- );
118
+ e.stopPropagation();
119
+ e.preventDefault();
120
+ return false;
121
+ }
122
+ return true;
123
+ };
118
124
 
119
125
  return (
120
- <div
121
- {...rest}
122
- role="none"
123
- ref={stackRef}
124
- className={className}
125
- onClickCapture={checkMenuClick}
126
- >
126
+ <div {...rest} role="none" ref={stackRef} className={className} onClickCapture={checkMenuClick}>
127
127
  {currentPanel &&
128
128
  cloneElement(currentPanel, {
129
+ // @ts-expect-error ignore
129
130
  onBack: history.length > 0 ? goBack : undefined,
130
131
  })}
131
132
  </div>
132
133
  );
133
- };
134
+ }