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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
  2. package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
  3. package/css/components/_animations.css +52 -0
  4. package/css/components/_avatar.css +89 -0
  5. package/css/components/_button.css +218 -0
  6. package/css/components/_buttonGroup.css +62 -0
  7. package/css/components/_callout.css +32 -0
  8. package/css/components/_card.css +167 -0
  9. package/css/components/_chip.css +125 -0
  10. package/css/components/_collapsable.css +32 -0
  11. package/{src/overlays/message/Message.module.css → css/components/_divider.css} +11 -10
  12. package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +3 -2
  13. package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +15 -9
  14. package/css/components/_media.css +102 -0
  15. package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
  16. package/{src/components/meter/Meter.module.css → css/components/_meter.css} +15 -20
  17. package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +9 -9
  18. package/{src/components/panel/Panel.module.css → css/components/_panel.css} +19 -19
  19. package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
  20. package/css/components/_sonner.css +431 -0
  21. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +125 -85
  22. package/css/components/_titlebar.css +48 -0
  23. package/css/components/index.css +47 -0
  24. package/css/core/_aside.css +176 -0
  25. package/css/core/_content.css +31 -0
  26. package/css/core/_errorboundary.css +55 -0
  27. package/css/core/_responsive.css +45 -0
  28. package/css/core/_typography.css +69 -0
  29. package/css/core/_viewport.css +33 -0
  30. package/{src/hooks/useClientService.tsx → css/core/index.css} +7 -7
  31. package/css/reset/_gradients.css +36 -33
  32. package/css/reset/_reset.css +206 -300
  33. package/css/reset/_text.css +31 -61
  34. package/css/reset/_theme.css +467 -81
  35. package/css/reset/index.css +23 -21
  36. package/css/styles.css +30 -23
  37. package/css/theme/_colors.css +445 -0
  38. package/css/theme/_utilities.css +528 -0
  39. package/css/theme/_variants.css +128 -0
  40. package/css/theme/index.css +55 -0
  41. package/dist/cjs/components/actionLabel/ActionLabel.js +25 -12
  42. package/dist/cjs/{overlays → components}/alert/Alert.js +76 -53
  43. package/dist/cjs/components/animations/Indicator.js +72 -0
  44. package/dist/cjs/components/animations/Loader.js +77 -0
  45. package/dist/cjs/components/animations/LoadingBars.js +37 -0
  46. package/dist/cjs/components/animations/LoadingLine.js +59 -0
  47. package/dist/cjs/components/animations/LoadingSpinner.js +37 -0
  48. package/dist/cjs/components/animations/Skeleton.js +88 -0
  49. package/dist/cjs/components/avatar/Avatar.js +41 -20
  50. package/dist/cjs/components/avatar/AvatarGroup.js +37 -16
  51. package/dist/cjs/components/badge/Badge.js +90 -68
  52. package/dist/cjs/components/button/Button.js +198 -136
  53. package/dist/cjs/components/button/ButtonGroup.js +86 -21
  54. package/dist/cjs/components/button/ConfirmButton.js +55 -41
  55. package/dist/cjs/components/button/ToggleButtonGroup.js +84 -32
  56. package/dist/cjs/components/callout/Callout.js +56 -25
  57. package/dist/cjs/components/card/Card.js +90 -42
  58. package/dist/cjs/components/card/CardCover.js +38 -27
  59. package/dist/cjs/components/card/FlipContent.js +47 -0
  60. package/dist/cjs/components/chip/Chip.js +80 -37
  61. package/dist/cjs/components/collapsable/Collapsable.js +62 -31
  62. package/dist/cjs/components/divider/Divider.js +58 -24
  63. package/dist/cjs/components/dropdown/Dropdown.js +92 -45
  64. package/dist/cjs/components/dropdown/DropdownTool.js +6 -7
  65. package/dist/cjs/components/effect/GlassEffect.js +259 -0
  66. package/dist/cjs/components/effect/MatteEffect.js +127 -0
  67. package/dist/cjs/components/effect/StyleEffect.js +43 -0
  68. package/dist/cjs/components/empty/EmptyContent.js +37 -49
  69. package/dist/cjs/components/flyout/Flyout.js +170 -0
  70. package/dist/cjs/components/hotkey/HotKey.js +42 -0
  71. package/dist/cjs/components/icon/Icon.js +81 -80
  72. package/dist/cjs/components/media/Media.js +154 -77
  73. package/dist/cjs/components/menu/ContextMenu.js +45 -20
  74. package/dist/cjs/components/menu/Menu.js +98 -38
  75. package/dist/cjs/components/menu/MenuItem.js +102 -74
  76. package/dist/cjs/components/meter/Meter.js +35 -12
  77. package/dist/cjs/components/modal/Modal.js +152 -0
  78. package/dist/cjs/components/navigator/Navigator.js +81 -36
  79. package/dist/cjs/components/panel/Panel.js +115 -60
  80. package/dist/cjs/components/panel/PanelGroup.js +42 -16
  81. package/dist/cjs/components/panel/PanelStack.js +47 -16
  82. package/dist/cjs/components/pillbox/Pillbox.js +118 -0
  83. package/dist/cjs/components/progress/ProgressBar.js +30 -14
  84. package/dist/cjs/components/progress/ProgressCircle.js +27 -11
  85. package/dist/cjs/components/tabpanel/Tab.js +53 -37
  86. package/dist/cjs/components/tabpanel/TabPanel.js +74 -28
  87. package/dist/cjs/components/titlebar/Titlebar.js +52 -0
  88. package/dist/cjs/components/tooltip/Tooltip.js +180 -0
  89. package/dist/cjs/context/Global.js +159 -80
  90. package/dist/cjs/context/ModalManager.js +60 -0
  91. package/dist/cjs/context/context.js +43 -0
  92. package/dist/cjs/core/areaToggle/AreaToggle.js +41 -0
  93. package/dist/cjs/core/aside/Aside.js +178 -83
  94. package/dist/cjs/core/boundary/ErrorBoundary.js +37 -34
  95. package/dist/cjs/core/boundary/ErrorIcon.js +32 -19
  96. package/dist/cjs/core/content/Content.js +26 -37
  97. package/dist/cjs/core/headfoot/HeadFoot.js +133 -35
  98. package/dist/cjs/core/layout/Layout.js +28 -0
  99. package/dist/cjs/core/responsive/Responsive.js +62 -26
  100. package/dist/cjs/core/theme/ThemeProvider.js +35 -41
  101. package/dist/cjs/core/viewport/Viewport.js +26 -22
  102. package/dist/cjs/hooks/useClientService.js +39 -18
  103. package/dist/cjs/hooks/useContextMenu.js +103 -0
  104. package/dist/cjs/hooks/useControlledValue.js +13 -7
  105. package/dist/cjs/hooks/useDebounce.js +37 -21
  106. package/dist/cjs/hooks/useEffectDebugger.js +79 -60
  107. package/dist/cjs/hooks/useIsDark.js +34 -26
  108. package/dist/cjs/hooks/useIsRtl.js +13 -3
  109. package/dist/cjs/hooks/useNavigator.js +12 -9
  110. package/dist/cjs/hooks/useNotificationService.js +199 -0
  111. package/dist/cjs/hooks/useOverlayService.js +82 -41
  112. package/dist/cjs/hooks/usePropState.js +41 -0
  113. package/dist/cjs/hooks/usePropToggle.js +32 -26
  114. package/dist/cjs/hooks/useResize.js +47 -38
  115. package/dist/cjs/hooks/useResizeObserver.js +26 -7
  116. package/dist/cjs/hooks/useStorage.js +29 -16
  117. package/dist/cjs/i18n/index.js +25 -23
  118. package/dist/cjs/index.js +142 -94
  119. package/dist/cjs/typography/Abbr.js +43 -20
  120. package/dist/cjs/typography/Anchor.js +39 -0
  121. package/dist/cjs/typography/Copy.js +28 -28
  122. package/dist/cjs/typography/Kbd.js +43 -0
  123. package/dist/cjs/typography/Mark.js +34 -17
  124. package/dist/cjs/typography/Text.js +36 -54
  125. package/dist/cjs/typography/Title.js +17 -40
  126. package/dist/cjs/utils/calculateDimensions.js +38 -23
  127. package/dist/cjs/utils/cloneElement.js +64 -0
  128. package/dist/cjs/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  129. package/dist/cjs/utils/getColor.js +42 -36
  130. package/dist/cjs/utils/getIconProps.js +63 -0
  131. package/dist/cjs/utils/getTooltipProps.js +66 -0
  132. package/dist/cjs/utils/nodeCheck.js +4 -4
  133. package/dist/esm/components/actionLabel/ActionLabel.js +25 -12
  134. package/dist/esm/{overlays → components}/alert/Alert.js +73 -50
  135. package/dist/esm/components/animations/Indicator.js +72 -0
  136. package/dist/esm/components/animations/Loader.js +77 -0
  137. package/dist/esm/components/animations/LoadingBars.js +37 -0
  138. package/dist/esm/components/animations/LoadingLine.js +59 -0
  139. package/dist/esm/components/animations/LoadingSpinner.js +37 -0
  140. package/dist/esm/components/animations/Skeleton.js +88 -0
  141. package/dist/esm/components/avatar/Avatar.js +42 -21
  142. package/dist/esm/components/avatar/AvatarGroup.js +37 -16
  143. package/dist/esm/components/badge/Badge.js +93 -70
  144. package/dist/esm/components/button/Button.js +199 -137
  145. package/dist/esm/components/button/ButtonGroup.js +87 -22
  146. package/dist/esm/components/button/ConfirmButton.js +58 -44
  147. package/dist/esm/components/button/ToggleButtonGroup.js +86 -34
  148. package/dist/esm/components/callout/Callout.js +56 -25
  149. package/dist/esm/components/card/Card.js +92 -44
  150. package/dist/esm/components/card/CardCover.js +38 -27
  151. package/dist/esm/components/card/FlipContent.js +47 -0
  152. package/dist/esm/components/chip/Chip.js +81 -38
  153. package/dist/esm/components/collapsable/Collapsable.js +63 -32
  154. package/dist/esm/components/divider/Divider.js +59 -25
  155. package/dist/esm/components/dropdown/Dropdown.js +95 -48
  156. package/dist/esm/components/dropdown/DropdownTool.js +6 -7
  157. package/dist/esm/components/effect/GlassEffect.js +259 -0
  158. package/dist/esm/components/effect/MatteEffect.js +127 -0
  159. package/dist/esm/components/effect/StyleEffect.js +43 -0
  160. package/dist/esm/components/empty/EmptyContent.js +38 -50
  161. package/dist/esm/components/flyout/Flyout.js +170 -0
  162. package/dist/esm/components/hotkey/HotKey.js +42 -0
  163. package/dist/esm/components/icon/Icon.js +83 -82
  164. package/dist/esm/components/media/Media.js +156 -79
  165. package/dist/esm/components/menu/ContextMenu.js +46 -21
  166. package/dist/esm/components/menu/Menu.js +101 -41
  167. package/dist/esm/components/menu/MenuItem.js +98 -70
  168. package/dist/esm/components/meter/Meter.js +36 -13
  169. package/dist/esm/components/modal/Modal.js +152 -0
  170. package/dist/esm/components/navigator/Navigator.js +81 -36
  171. package/dist/esm/components/panel/Panel.js +117 -62
  172. package/dist/esm/components/panel/PanelGroup.js +43 -17
  173. package/dist/esm/components/panel/PanelStack.js +48 -17
  174. package/dist/esm/components/pillbox/Pillbox.js +118 -0
  175. package/dist/esm/components/progress/ProgressBar.js +31 -15
  176. package/dist/esm/components/progress/ProgressCircle.js +28 -12
  177. package/dist/esm/components/tabpanel/Tab.js +54 -38
  178. package/dist/esm/components/tabpanel/TabPanel.js +75 -29
  179. package/dist/esm/components/titlebar/Titlebar.js +52 -0
  180. package/dist/esm/components/tooltip/Tooltip.js +180 -0
  181. package/dist/esm/context/Global.js +161 -78
  182. package/dist/esm/context/ModalManager.js +60 -0
  183. package/dist/esm/context/context.js +40 -0
  184. package/dist/esm/core/areaToggle/AreaToggle.js +41 -0
  185. package/dist/esm/core/aside/Aside.js +179 -84
  186. package/dist/esm/core/boundary/ErrorBoundary.js +38 -35
  187. package/dist/esm/core/boundary/ErrorIcon.js +32 -19
  188. package/dist/esm/core/content/Content.js +26 -37
  189. package/dist/esm/core/headfoot/HeadFoot.js +134 -36
  190. package/dist/esm/core/layout/Layout.js +28 -0
  191. package/dist/esm/core/responsive/Responsive.js +62 -26
  192. package/dist/esm/core/theme/ThemeProvider.js +36 -42
  193. package/dist/esm/core/viewport/Viewport.js +26 -22
  194. package/dist/esm/hooks/useClientService.js +39 -18
  195. package/dist/esm/hooks/useContextMenu.js +103 -0
  196. package/dist/esm/hooks/useControlledValue.js +14 -8
  197. package/dist/esm/hooks/useDebounce.js +37 -21
  198. package/dist/esm/hooks/useEffectDebugger.js +81 -62
  199. package/dist/esm/hooks/useIsDark.js +34 -26
  200. package/dist/esm/hooks/useIsRtl.js +13 -3
  201. package/dist/esm/hooks/useNavigator.js +13 -10
  202. package/dist/esm/hooks/useNotificationService.js +199 -0
  203. package/dist/esm/hooks/useOverlayService.js +83 -42
  204. package/dist/esm/hooks/usePropState.js +40 -0
  205. package/dist/esm/hooks/usePropToggle.js +33 -27
  206. package/dist/esm/hooks/useResize.js +48 -39
  207. package/dist/esm/hooks/useResizeObserver.js +27 -8
  208. package/dist/esm/hooks/useStorage.js +30 -17
  209. package/dist/esm/i18n/index.js +23 -21
  210. package/dist/esm/index.js +87 -44
  211. package/dist/esm/typography/Abbr.js +45 -22
  212. package/dist/esm/typography/Anchor.js +39 -0
  213. package/dist/esm/typography/Copy.js +28 -28
  214. package/dist/esm/typography/Kbd.js +43 -0
  215. package/dist/esm/typography/Mark.js +35 -18
  216. package/dist/esm/typography/Text.js +39 -57
  217. package/dist/esm/typography/Title.js +17 -40
  218. package/dist/esm/utils/calculateDimensions.js +38 -23
  219. package/dist/esm/utils/cloneElement.js +64 -0
  220. package/dist/esm/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
  221. package/dist/esm/utils/getColor.js +43 -34
  222. package/dist/esm/utils/getIconProps.js +63 -0
  223. package/dist/esm/utils/getTooltipProps.js +66 -0
  224. package/dist/esm/utils/nodeCheck.js +4 -4
  225. package/dist/types/components/actionLabel/ActionLabel.d.ts +20 -7
  226. package/dist/types/components/alert/Alert.d.ts +74 -0
  227. package/dist/types/components/animations/Indicator.d.ts +57 -0
  228. package/dist/types/components/animations/Loader.d.ts +65 -0
  229. package/dist/types/components/animations/LoadingBars.d.ts +61 -0
  230. package/dist/types/components/animations/LoadingLine.d.ts +43 -0
  231. package/dist/types/components/animations/LoadingSpinner.d.ts +61 -0
  232. package/dist/types/components/animations/Skeleton.d.ts +61 -0
  233. package/dist/types/components/avatar/Avatar.d.ts +70 -19
  234. package/dist/types/components/avatar/AvatarGroup.d.ts +51 -14
  235. package/dist/types/components/badge/Badge.d.ts +64 -14
  236. package/dist/types/components/button/Button.d.ts +72 -55
  237. package/dist/types/components/button/ButtonGroup.d.ts +86 -24
  238. package/dist/types/components/button/ConfirmButton.d.ts +21 -7
  239. package/dist/types/components/button/ToggleButtonGroup.d.ts +88 -44
  240. package/dist/types/components/callout/Callout.d.ts +58 -7
  241. package/dist/types/components/card/Card.d.ts +66 -25
  242. package/dist/types/components/card/CardCover.d.ts +52 -7
  243. package/dist/types/components/card/FlipContent.d.ts +50 -0
  244. package/dist/types/components/chip/Chip.d.ts +72 -20
  245. package/dist/types/components/collapsable/Collapsable.d.ts +55 -15
  246. package/dist/types/components/divider/Divider.d.ts +25 -8
  247. package/dist/types/components/dropdown/Dropdown.d.ts +42 -9
  248. package/dist/types/components/dropdown/DropdownTool.d.ts +22 -4
  249. package/dist/types/components/effect/GlassEffect.d.ts +5 -0
  250. package/dist/types/components/effect/MatteEffect.d.ts +40 -0
  251. package/dist/types/components/effect/StyleEffect.d.ts +27 -0
  252. package/dist/types/components/empty/EmptyContent.d.ts +53 -9
  253. package/dist/types/components/flyout/Flyout.d.ts +60 -0
  254. package/dist/types/components/hotkey/HotKey.d.ts +41 -0
  255. package/dist/types/components/icon/Icon.d.ts +74 -24
  256. package/dist/types/components/media/Media.d.ts +72 -4
  257. package/dist/types/components/menu/ContextMenu.d.ts +22 -5
  258. package/dist/types/components/menu/Menu.d.ts +26 -2
  259. package/dist/types/components/menu/MenuItem.d.ts +19 -4
  260. package/dist/types/components/menu/types.d.ts +23 -14
  261. package/dist/types/components/meter/Meter.d.ts +23 -3
  262. package/dist/types/components/modal/Modal.d.ts +52 -0
  263. package/dist/types/components/navigator/Navigator.d.ts +30 -4
  264. package/dist/types/components/panel/Panel.d.ts +43 -23
  265. package/dist/types/components/panel/PanelGroup.d.ts +22 -3
  266. package/dist/types/components/panel/PanelStack.d.ts +28 -2
  267. package/dist/types/components/pillbox/Pillbox.d.ts +95 -0
  268. package/dist/types/components/progress/ProgressBar.d.ts +19 -4
  269. package/dist/types/components/progress/ProgressCircle.d.ts +18 -4
  270. package/dist/types/components/tabpanel/Tab.d.ts +42 -10
  271. package/dist/types/components/tabpanel/TabPanel.d.ts +47 -7
  272. package/dist/types/components/titlebar/Titlebar.d.ts +54 -0
  273. package/dist/types/components/tooltip/Tooltip.d.ts +76 -0
  274. package/dist/types/context/Global.d.ts +39 -69
  275. package/dist/types/context/ModalManager.d.ts +30 -0
  276. package/dist/types/context/context.d.ts +107 -0
  277. package/dist/types/core/areaToggle/AreaToggle.d.ts +33 -0
  278. package/dist/types/core/aside/Aside.d.ts +75 -20
  279. package/dist/types/core/boundary/ErrorBoundary.d.ts +43 -4
  280. package/dist/types/core/boundary/ErrorIcon.d.ts +38 -1
  281. package/dist/types/core/content/Content.d.ts +38 -6
  282. package/dist/types/core/headfoot/HeadFoot.d.ts +48 -14
  283. package/dist/types/core/layout/Layout.d.ts +38 -0
  284. package/dist/types/core/responsive/Responsive.d.ts +45 -15
  285. package/dist/types/core/theme/ThemeProvider.d.ts +35 -11
  286. package/dist/types/core/viewport/Viewport.d.ts +27 -3
  287. package/dist/types/hooks/useClientService.d.ts +43 -1
  288. package/dist/types/hooks/useContextMenu.d.ts +10 -0
  289. package/dist/types/hooks/useControlledValue.d.ts +28 -4
  290. package/dist/types/hooks/useDebounce.d.ts +38 -2
  291. package/dist/types/hooks/useEffectDebugger.d.ts +73 -4
  292. package/dist/types/hooks/useIsDark.d.ts +6 -0
  293. package/dist/types/hooks/useIsRtl.d.ts +35 -1
  294. package/dist/types/hooks/useNavigator.d.ts +37 -2
  295. package/dist/types/hooks/useNotificationService.d.ts +60 -0
  296. package/dist/types/hooks/useOverlayService.d.ts +28 -8
  297. package/dist/types/hooks/usePropState.d.ts +26 -0
  298. package/dist/types/hooks/usePropToggle.d.ts +41 -7
  299. package/dist/types/hooks/useResize.d.ts +46 -4
  300. package/dist/types/hooks/useResizeObserver.d.ts +45 -3
  301. package/dist/types/hooks/useStorage.d.ts +32 -2
  302. package/dist/types/i18n/index.d.ts +27 -3
  303. package/dist/types/index.d.ts +106 -18
  304. package/dist/types/types/colors.d.ts +29 -0
  305. package/dist/types/types/index.d.ts +216 -76
  306. package/dist/types/typography/Abbr.d.ts +51 -6
  307. package/dist/types/typography/Anchor.d.ts +41 -0
  308. package/dist/types/typography/Copy.d.ts +36 -2
  309. package/dist/types/typography/Kbd.d.ts +40 -0
  310. package/dist/types/typography/Mark.d.ts +44 -7
  311. package/dist/types/typography/Text.d.ts +40 -24
  312. package/dist/types/typography/Title.d.ts +37 -26
  313. package/dist/types/typography/types.d.ts +32 -0
  314. package/dist/types/utils/calculateDimensions.d.ts +50 -6
  315. package/dist/types/utils/cloneElement.d.ts +41 -0
  316. package/dist/types/utils/getBadgeProps.d.ts +16 -0
  317. package/dist/types/utils/getColor.d.ts +43 -4
  318. package/dist/types/utils/getIconProps.d.ts +45 -0
  319. package/dist/types/utils/getTooltipProps.d.ts +47 -0
  320. package/dist/types/utils/index.d.ts +28 -0
  321. package/dist/types/utils/nodeCheck.d.ts +1 -2
  322. package/package.json +29 -21
  323. package/src/components/actionLabel/ActionLabel.tsx +28 -39
  324. package/src/components/alert/Alert.tsx +261 -0
  325. package/src/components/animations/Indicator.tsx +76 -0
  326. package/src/components/animations/Loader.tsx +89 -0
  327. package/src/components/animations/LoadingBars.tsx +70 -0
  328. package/src/components/animations/LoadingLine.tsx +51 -0
  329. package/src/components/animations/LoadingSpinner.tsx +70 -0
  330. package/src/components/animations/Skeleton.tsx +100 -0
  331. package/src/components/avatar/Avatar.tsx +89 -70
  332. package/src/components/avatar/AvatarGroup.tsx +65 -74
  333. package/src/components/badge/Badge.tsx +141 -108
  334. package/src/components/button/Button.tsx +223 -238
  335. package/src/components/button/ButtonGroup.tsx +117 -77
  336. package/src/components/button/ConfirmButton.tsx +60 -90
  337. package/src/components/button/ToggleButtonGroup.tsx +134 -120
  338. package/src/components/callout/Callout.tsx +81 -59
  339. package/src/components/card/Card.tsx +131 -113
  340. package/src/components/card/CardCover.tsx +61 -61
  341. package/src/components/card/FlipContent.tsx +78 -0
  342. package/src/components/chip/Chip.tsx +139 -99
  343. package/src/components/collapsable/Collapsable.tsx +79 -77
  344. package/src/components/divider/Divider.tsx +74 -53
  345. package/src/components/dropdown/Dropdown.tsx +109 -106
  346. package/src/components/dropdown/DropdownTool.tsx +29 -12
  347. package/src/components/effect/GlassEffect.tsx +221 -0
  348. package/src/components/effect/MatteEffect.tsx +99 -0
  349. package/src/components/effect/StyleEffect.tsx +36 -0
  350. package/src/components/empty/EmptyContent.tsx +60 -99
  351. package/src/components/flyout/Flyout.tsx +257 -0
  352. package/src/components/hotkey/HotKey.tsx +57 -0
  353. package/src/components/icon/Icon.tsx +131 -130
  354. package/src/components/media/Media.tsx +184 -154
  355. package/src/components/menu/ContextMenu.tsx +56 -39
  356. package/src/components/menu/Menu.tsx +121 -84
  357. package/src/components/menu/MenuItem.tsx +87 -69
  358. package/src/components/menu/types.ts +23 -28
  359. package/src/components/meter/Meter.tsx +34 -17
  360. package/src/components/modal/Modal.tsx +226 -0
  361. package/src/components/navigator/Navigator.tsx +93 -38
  362. package/src/components/panel/Panel.tsx +123 -131
  363. package/src/components/panel/PanelGroup.tsx +49 -43
  364. package/src/components/panel/PanelStack.tsx +63 -62
  365. package/src/components/pillbox/Pillbox.tsx +208 -0
  366. package/src/components/progress/ProgressBar.tsx +33 -33
  367. package/src/components/progress/ProgressCircle.tsx +29 -37
  368. package/src/components/tabpanel/Tab.tsx +84 -73
  369. package/src/components/tabpanel/TabPanel.tsx +102 -51
  370. package/src/components/titlebar/Titlebar.tsx +115 -0
  371. package/src/components/tooltip/Tooltip.tsx +255 -0
  372. package/src/context/Global.tsx +148 -148
  373. package/src/context/ModalManager.tsx +68 -0
  374. package/src/context/context.ts +111 -0
  375. package/src/core/areaToggle/AreaToggle.tsx +45 -0
  376. package/src/core/aside/Aside.tsx +200 -155
  377. package/src/core/boundary/ErrorBoundary.tsx +50 -68
  378. package/src/core/boundary/ErrorIcon.tsx +34 -32
  379. package/src/core/content/Content.tsx +41 -50
  380. package/src/core/headfoot/HeadFoot.tsx +162 -81
  381. package/src/core/layout/Layout.tsx +54 -0
  382. package/src/core/responsive/Responsive.tsx +91 -98
  383. package/src/core/theme/ThemeProvider.tsx +45 -56
  384. package/src/core/viewport/Viewport.tsx +25 -27
  385. package/src/hooks/useClientService.ts +47 -0
  386. package/src/hooks/useContextMenu.tsx +131 -0
  387. package/src/hooks/useControlledValue.ts +47 -0
  388. package/src/hooks/useDebounce.ts +41 -24
  389. package/src/hooks/useEffectDebugger.ts +105 -94
  390. package/src/hooks/useIsDark.ts +10 -24
  391. package/src/hooks/useIsRtl.ts +32 -20
  392. package/src/hooks/useNavigator.tsx +41 -26
  393. package/src/hooks/useNotificationService.tsx +239 -0
  394. package/src/hooks/useOverlayService.tsx +67 -20
  395. package/src/hooks/usePropState.ts +52 -0
  396. package/src/hooks/usePropToggle.ts +54 -47
  397. package/src/hooks/useResize.ts +69 -45
  398. package/src/hooks/useResizeObserver.ts +59 -34
  399. package/src/hooks/useStorage.ts +40 -48
  400. package/src/i18n/index.ts +24 -25
  401. package/src/index.ts +115 -44
  402. package/src/types/colors.ts +49 -0
  403. package/src/types/global.d.ts +40 -17
  404. package/src/types/index.ts +243 -155
  405. package/src/typography/Abbr.tsx +62 -59
  406. package/src/typography/Anchor.tsx +63 -0
  407. package/src/typography/Copy.tsx +39 -29
  408. package/src/typography/Kbd.tsx +50 -0
  409. package/src/typography/Mark.tsx +56 -51
  410. package/src/typography/Text.tsx +57 -128
  411. package/src/typography/Title.tsx +36 -108
  412. package/src/typography/types.ts +27 -17
  413. package/src/utils/calculateDimensions.ts +50 -40
  414. package/src/utils/cloneElement.ts +61 -0
  415. package/src/{core/content/Content.module.css → utils/getBadgeProps.ts} +20 -15
  416. package/src/utils/getColor.ts +42 -36
  417. package/src/utils/getIconProps.ts +58 -0
  418. package/src/utils/getTooltipProps.ts +59 -0
  419. package/src/utils/index.ts +23 -17
  420. package/src/utils/nodeCheck.ts +4 -8
  421. package/css/flags.rect.css +0 -1607
  422. package/css/flags.wavy.css +0 -1606
  423. package/css/index.js +0 -250
  424. package/css/tailwind/colors.ts +0 -158
  425. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  426. package/dist/cjs/components/animations/Animations.js +0 -142
  427. package/dist/cjs/components/animations/Animations.module.css +0 -1
  428. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  429. package/dist/cjs/components/badge/Badge.module.css +0 -1
  430. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +0 -71
  431. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  432. package/dist/cjs/components/button/Button.module.css +0 -1
  433. package/dist/cjs/components/card/Card.module.css +0 -1
  434. package/dist/cjs/components/chip/Chip.module.css +0 -1
  435. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  436. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  437. package/dist/cjs/components/icon/Icon.module.css +0 -1
  438. package/dist/cjs/components/media/Media.module.css +0 -1
  439. package/dist/cjs/components/menu/Menu.module.css +0 -1
  440. package/dist/cjs/components/meter/Meter.module.css +0 -1
  441. package/dist/cjs/components/panel/Panel.module.css +0 -1
  442. package/dist/cjs/components/progress/Progress.module.css +0 -1
  443. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  444. package/dist/cjs/context/NotificationCenter.js +0 -254
  445. package/dist/cjs/core/aside/Aside.module.css +0 -1
  446. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  447. package/dist/cjs/core/content/Content.module.css +0 -1
  448. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  449. package/dist/cjs/core/page/Page.js +0 -66
  450. package/dist/cjs/core/page/Page.module.css +0 -1
  451. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  452. package/dist/cjs/core/section/Section.module.css +0 -1
  453. package/dist/cjs/core/theme/Theme.module.css +0 -1
  454. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  455. package/dist/cjs/hotkeys/HotKey.js +0 -47
  456. package/dist/cjs/hotkeys/HotKeyLabel.js +0 -52
  457. package/dist/cjs/hotkeys/HotKeyWrapper.js +0 -98
  458. package/dist/cjs/hotkeys/commons.js +0 -56
  459. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  460. package/dist/cjs/overlays/flyout/Flyout.js +0 -152
  461. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  462. package/dist/cjs/overlays/message/Message.js +0 -84
  463. package/dist/cjs/overlays/message/Message.module.css +0 -1
  464. package/dist/cjs/overlays/modal/Modal.js +0 -132
  465. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  466. package/dist/cjs/overlays/toast/Toast.js +0 -166
  467. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  468. package/dist/cjs/overlays/tooltip/Tooltip.js +0 -133
  469. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  470. package/dist/cjs/types/icons.js +0 -200
  471. package/dist/cjs/typography/Link.js +0 -55
  472. package/dist/cjs/typography/Typography.module.css +0 -1
  473. package/dist/cjs/typography/types.js +0 -42
  474. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  475. package/dist/esm/components/animations/Animations.js +0 -138
  476. package/dist/esm/components/animations/Animations.module.css +0 -1
  477. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  478. package/dist/esm/components/badge/Badge.module.css +0 -1
  479. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +0 -71
  480. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  481. package/dist/esm/components/button/Button.module.css +0 -1
  482. package/dist/esm/components/card/Card.module.css +0 -1
  483. package/dist/esm/components/chip/Chip.module.css +0 -1
  484. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  485. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  486. package/dist/esm/components/icon/Icon.module.css +0 -1
  487. package/dist/esm/components/media/Media.module.css +0 -1
  488. package/dist/esm/components/menu/Menu.module.css +0 -1
  489. package/dist/esm/components/meter/Meter.module.css +0 -1
  490. package/dist/esm/components/panel/Panel.module.css +0 -1
  491. package/dist/esm/components/progress/Progress.module.css +0 -1
  492. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  493. package/dist/esm/context/NotificationCenter.js +0 -254
  494. package/dist/esm/core/aside/Aside.module.css +0 -1
  495. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  496. package/dist/esm/core/content/Content.module.css +0 -1
  497. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  498. package/dist/esm/core/page/Page.js +0 -66
  499. package/dist/esm/core/page/Page.module.css +0 -1
  500. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  501. package/dist/esm/core/section/Section.module.css +0 -1
  502. package/dist/esm/core/theme/Theme.module.css +0 -1
  503. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  504. package/dist/esm/hotkeys/HotKey.js +0 -47
  505. package/dist/esm/hotkeys/HotKeyLabel.js +0 -52
  506. package/dist/esm/hotkeys/HotKeyWrapper.js +0 -96
  507. package/dist/esm/hotkeys/commons.js +0 -56
  508. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  509. package/dist/esm/overlays/flyout/Flyout.js +0 -152
  510. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  511. package/dist/esm/overlays/message/Message.js +0 -84
  512. package/dist/esm/overlays/message/Message.module.css +0 -1
  513. package/dist/esm/overlays/modal/Modal.js +0 -132
  514. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  515. package/dist/esm/overlays/toast/Toast.js +0 -166
  516. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  517. package/dist/esm/overlays/tooltip/Tooltip.js +0 -132
  518. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  519. package/dist/esm/types/icons.js +0 -202
  520. package/dist/esm/typography/Link.js +0 -55
  521. package/dist/esm/typography/Typography.module.css +0 -1
  522. package/dist/esm/typography/types.js +0 -41
  523. package/dist/types/components/animations/Animations.d.ts +0 -23
  524. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +0 -17
  525. package/dist/types/components/index.d.ts +0 -33
  526. package/dist/types/context/NotificationCenter.d.ts +0 -11
  527. package/dist/types/core/index.d.ts +0 -9
  528. package/dist/types/core/page/Page.d.ts +0 -23
  529. package/dist/types/core/section/Section.d.ts +0 -7
  530. package/dist/types/hotkeys/HotKey.d.ts +0 -2
  531. package/dist/types/hotkeys/HotKeyLabel.d.ts +0 -2
  532. package/dist/types/hotkeys/HotKeyWrapper.d.ts +0 -11
  533. package/dist/types/hotkeys/commons.d.ts +0 -28
  534. package/dist/types/overlays/alert/Alert.d.ts +0 -41
  535. package/dist/types/overlays/flyout/Flyout.d.ts +0 -57
  536. package/dist/types/overlays/index.d.ts +0 -6
  537. package/dist/types/overlays/message/Message.d.ts +0 -21
  538. package/dist/types/overlays/modal/Modal.d.ts +0 -53
  539. package/dist/types/overlays/toast/Toast.d.ts +0 -33
  540. package/dist/types/overlays/tooltip/Tooltip.d.ts +0 -18
  541. package/dist/types/types/icons.d.ts +0 -197
  542. package/dist/types/typography/Link.d.ts +0 -25
  543. package/dist/types/typography/index.d.ts +0 -6
  544. package/src/components/animations/Animations.module.css +0 -253
  545. package/src/components/animations/Animations.tsx +0 -196
  546. package/src/components/avatar/Avatar.module.css +0 -90
  547. package/src/components/badge/Badge.module.css +0 -165
  548. package/src/components/breadcrumbs/Breadcrumbs.module.css +0 -189
  549. package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -109
  550. package/src/components/button/Button.module.css +0 -375
  551. package/src/components/card/Card.module.css +0 -152
  552. package/src/components/chip/Chip.module.css +0 -118
  553. package/src/components/collapsable/Collapsable.module.css +0 -30
  554. package/src/components/icon/Icon.module.css +0 -71
  555. package/src/components/index.ts +0 -62
  556. package/src/components/media/Media.module.css +0 -112
  557. package/src/context/NotificationCenter.tsx +0 -223
  558. package/src/core/aside/Aside.module.css +0 -231
  559. package/src/core/boundary/ErrorBoundary.module.css +0 -65
  560. package/src/core/headfoot/HeadFoot.module.css +0 -38
  561. package/src/core/index.ts +0 -32
  562. package/src/core/page/Page.module.css +0 -46
  563. package/src/core/page/Page.tsx +0 -101
  564. package/src/core/responsive/Responsive.module.css +0 -85
  565. package/src/core/section/Section.module.css +0 -28
  566. package/src/core/section/Section.tsx +0 -54
  567. package/src/core/theme/Theme.module.css +0 -30
  568. package/src/core/viewport/Viewport.module.css +0 -32
  569. package/src/hooks/useControlledValue.tsx +0 -43
  570. package/src/hotkeys/HotKey.tsx +0 -39
  571. package/src/hotkeys/HotKeyLabel.tsx +0 -61
  572. package/src/hotkeys/HotKeyWrapper.tsx +0 -137
  573. package/src/hotkeys/commons.ts +0 -74
  574. package/src/overlays/alert/Alert.tsx +0 -252
  575. package/src/overlays/flyout/Flyout.tsx +0 -283
  576. package/src/overlays/index.ts +0 -29
  577. package/src/overlays/message/Message.tsx +0 -107
  578. package/src/overlays/modal/Modal.tsx +0 -244
  579. package/src/overlays/toast/Toast.module.css +0 -37
  580. package/src/overlays/toast/Toast.tsx +0 -216
  581. package/src/overlays/tooltip/Tooltip.module.css +0 -53
  582. package/src/overlays/tooltip/Tooltip.tsx +0 -200
  583. package/src/types/icons.ts +0 -426
  584. package/src/typography/Link.tsx +0 -113
  585. package/src/typography/Typography.module.css +0 -68
  586. package/src/typography/index.ts +0 -29
  587. /package/dist/cjs/i18n/{ar.json.js → ar/core.json.js} +0 -0
  588. /package/dist/cjs/i18n/{en.json.js → en/core.json.js} +0 -0
  589. /package/dist/esm/i18n/{ar.json.js → ar/core.json.js} +0 -0
  590. /package/dist/esm/i18n/{en.json.js → en/core.json.js} +0 -0
  591. /package/src/i18n/{ar.json → ar/core.json} +0 -0
  592. /package/src/i18n/{en.json → en/core.json} +0 -0
@@ -1,78 +1,65 @@
1
- /*
1
+ /**
2
2
  * React Fabric
3
- * @version: 1.0.0
4
- *
5
- *
6
- * The MIT License (MIT)
7
- * Copyright (c) 2024 Adarsh Pastakia
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
8
6
  *
9
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
10
- * and associated documentation files (the "Software"), to deal in the Software without restriction,
11
- * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
12
- * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
13
- * subject to the following conditions:
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
14
13
  *
15
- * The above copyright notice and this permission notice shall be included in all copies or substantial
16
- * portions of the Software.
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
17
16
  *
18
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
- * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
22
24
  */
23
25
 
24
- import classNames from "classnames";
25
- import {
26
- useCallback,
27
- useEffect,
28
- useMemo,
29
- useRef,
30
- useState,
31
- type ReactNode,
32
- } from "react";
33
- import { Loading } from "../../components/animations/Animations";
26
+ import { cn } from "@react-fabric/utilities";
27
+ import { Activity, useEffect, useMemo, useRef, useState } from "react";
28
+ import { StyleEffect } from "../../components/effect/StyleEffect";
34
29
  import { Icon } from "../../components/icon/Icon";
30
+ import type { TitlebarProps } from "../../components/titlebar/Titlebar";
31
+ import { Titlebar } from "../../components/titlebar/Titlebar";
32
+ import { useGlobals } from "../../context/context";
35
33
  import { useLayoutEffectDebugger } from "../../hooks/useEffectDebugger";
34
+ import { usePropState } from "../../hooks/usePropState";
36
35
  import { usePropToggle } from "../../hooks/usePropToggle";
37
36
  import { useResize } from "../../hooks/useResize";
38
- import {
39
- type ChildrenProp,
40
- type CollapseProps,
41
- type CssProp,
42
- type Elements,
43
- type IconProps,
44
- type TestProps,
45
- } from "../../types";
46
- import { CoreIcons } from "../../types/icons";
37
+ import type { ChildrenProp, CollapseProps, CssPropWithMap, TestProps } from "../../types";
38
+ import { getIconProps } from "../../utils";
47
39
  import { ErrorBoundary } from "../boundary/ErrorBoundary";
48
- import classes from "./Aside.module.css";
49
40
 
50
41
  export interface AsideProps
51
- extends IconProps,
42
+ extends
52
43
  ChildrenProp,
53
44
  CollapseProps,
54
- CssProp,
45
+ CssPropWithMap<{
46
+ root?: string;
47
+ titlebar?: string;
48
+ body?: string;
49
+ title?: string;
50
+ icon?: string;
51
+ actions?: string;
52
+ }>,
55
53
  TestProps {
56
- /**
57
- * page title
58
- */
59
- title?: ReactNode;
60
54
  /**
61
55
  * align inline-end
62
56
  */
63
57
  align?: "start" | "end";
58
+
64
59
  /**
65
- * header actions
66
- */
67
- actions?: Elements<JSX.Element>;
68
- /**
69
- * header class
70
- */
71
- headerClassName?: string;
72
- /**
73
- * header class
60
+ * margin (uses tailwind spacing calculation, ie. 2 = 0.5rem)
74
61
  */
75
- bodyClassName?: string;
62
+ margin?: number;
76
63
 
77
64
  /**
78
65
  * show loading indicator
@@ -85,12 +72,15 @@ export interface AsideProps
85
72
  /**
86
73
  * allow flyout with collapsed
87
74
  */
88
- flyout?: boolean;
75
+ enableFlyout?: boolean;
89
76
  /**
90
77
  * event handler when shown
91
78
  */
92
79
  onFlyout?: () => void;
93
80
 
81
+ id?: string;
82
+ hideCollapseHandle?: boolean;
83
+
94
84
  /**
95
85
  * fixed width
96
86
  */
@@ -103,25 +93,59 @@ export interface AsideProps
103
93
  * min width
104
94
  */
105
95
  minWidth?: number | string;
96
+ /**
97
+ * Resize event
98
+ */
99
+ onResize?: (width: number) => void;
106
100
  }
107
101
 
108
102
  /**
109
- * Side panel
103
+ * A sidebar component that can be collapsed, resized, and has a flyout feature.
104
+ * It supports a title, icon, actions, and loading state.
105
+ * It can be aligned to the start or end of the page.
106
+ *
107
+ * @example
108
+ * ```jsx
109
+ * <Aside
110
+ * title="Sidebar Title"
111
+ * icon=icon-[mdi--menu]
112
+ * rtlFlip={true}
113
+ * className="custom-aside"
114
+ * bodyClassName="custom-aside-body"
115
+ * headerClassName="custom-aside-header"
116
+ * resizeable={true}
117
+ * flyout={true}
118
+ * onFlyout={() => console.log("Flyout triggered")}
119
+ * collapsed={false}
120
+ * collapsable={true}
121
+ * onCollapse={() => console.log("Collapsed toggled")}
122
+ * actions={<button>Action</button>}
123
+ * loading={false}
124
+ * align="start"
125
+ * width="20rem"
126
+ * minWidth="2rem"
127
+ * maxWidth="30vw"
128
+ * data-testid="aside-test"
129
+ * data-test-value="aside-value"
130
+ * >
131
+ * <Content>This is the content of the aside.</Content>
132
+ * </Aside>
133
+ * ```
110
134
  */
111
- export const Aside = ({
135
+ export function Aside({
112
136
  children,
113
137
  title,
114
138
  icon,
115
- iconBg,
116
- iconColor,
117
- rtlFlip,
139
+ id,
140
+ margin,
141
+ hideCollapseHandle,
118
142
  className,
119
- bodyClassName,
120
- headerClassName,
143
+ classNames,
121
144
  resizeable,
122
- flyout,
145
+ enableFlyout,
123
146
  onFlyout,
124
- collapsed,
147
+ onResize,
148
+ collapsed: _collapsed,
125
149
  collapsable,
126
150
  onCollapse,
127
151
  actions,
@@ -132,47 +156,47 @@ export const Aside = ({
132
156
  maxWidth = "30vw",
133
157
  "data-testid": testId,
134
158
  "data-test-value": testValue,
135
- }: AsideProps) => {
159
+ }: AsideProps & TitlebarProps) {
136
160
  const elementRef = useRef<HTMLDivElement>(null);
137
- const [width, setWidth] = useState(wd);
161
+ const [width, setWidth] = usePropState(wd);
138
162
  const [peek, setPeek] = useState(false);
163
+ const { registerArea, unregisterArea } = useGlobals();
139
164
 
140
- const [isCollapsed, toggleCollapse] = usePropToggle(collapsed, onCollapse);
165
+ const [collapsed, onToggle] = usePropToggle(_collapsed, onCollapse);
141
166
 
142
- useEffect(() => {
143
- setWidth(wd);
144
- }, [wd]);
145
-
146
- const handleResize = useRef(({ x }: { x: number }) => {
167
+ const handleResizeRef = useRef(({ x }: { x: number }) => {
147
168
  if (elementRef.current != null) {
148
- setWidth(elementRef.current.offsetWidth + x);
169
+ if (x !== 0) setWidth(elementRef.current.offsetWidth + x);
149
170
  }
150
171
  });
151
- const resizeHandleProps = useResize(handleResize.current, {
172
+ const { ref, isResizing, onMouseDown } = useResize(handleResizeRef.current, {
152
173
  isReverse: align === "end",
174
+ onEnd() {
175
+ const width = (ref.current?.parentElement as HTMLElement)?.offsetWidth;
176
+ setWidth(width);
177
+ onResize?.(width ?? 0);
178
+ },
153
179
  });
154
180
 
155
- const tryPeek = useCallback(() => {
156
- if (isCollapsed) {
157
- if (flyout) {
158
- setPeek(!peek);
159
- !peek && onFlyout?.();
181
+ const tryPeek = (force?: boolean) => {
182
+ if (collapsed) {
183
+ if (enableFlyout) {
184
+ setPeek(force ?? !peek);
185
+ if (force ?? !peek) onFlyout?.();
160
186
  } else {
161
- void toggleCollapse();
187
+ void onToggle(force);
162
188
  }
163
189
  }
164
- }, [peek, flyout, isCollapsed, onFlyout, toggleCollapse]);
190
+ };
165
191
 
166
192
  useLayoutEffectDebugger(
167
193
  () => {
168
- if (peek) {
194
+ if (!isResizing && peek) {
169
195
  const handler = (e: MouseEvent) => {
170
196
  if (
171
- (e.target as HTMLElement).closest(`[data-ref="asideBody"]`) ==
172
- null &&
173
- (e.target as HTMLElement).closest(
174
- `[data-ref="asidePlaceholder"]`,
175
- ) == null
197
+ (e.target as HTMLElement).closest(`[data-dismiss="true"]`) !== null ||
198
+ ((e.target as HTMLElement).closest(`[data-ref="aside-container"]`) === null &&
199
+ (e.target as HTMLElement).closest(`[data-ref="aside-placeholder"]`) === null)
176
200
  ) {
177
201
  setPeek(false);
178
202
  }
@@ -182,10 +206,20 @@ export const Aside = ({
182
206
  return () => document.removeEventListener("mouseup", handler);
183
207
  }
184
208
  },
185
- [peek],
209
+ [peek, isResizing],
186
210
  "Aside peek",
187
211
  );
188
212
 
213
+ useEffect(() => {
214
+ if (id) {
215
+ registerArea(id, (open) => {
216
+ tryPeek(open);
217
+ });
218
+ return () => unregisterArea(id);
219
+ }
220
+ // eslint-disable-next-line @eslint-react/exhaustive-deps
221
+ }, [id]);
222
+
189
223
  const widthStyles = useMemo(
190
224
  () => ({
191
225
  width,
@@ -197,88 +231,99 @@ export const Aside = ({
197
231
 
198
232
  return (
199
233
  <aside
200
- className={classNames(classes.aside, className, "overflow-hidden grid")}
234
+ className={cn("fabric-aside", className, "grid relative min-h-0 z-2", collapsed && (enableFlyout ? "w-fit" : "w-0"))}
201
235
  data-align={align}
202
- data-flyout={peek}
236
+ data-peek={peek}
237
+ data-flyout={enableFlyout}
203
238
  data-loading={loading}
204
- data-collapsed={isCollapsed}
205
- style={isCollapsed ? undefined : widthStyles}
239
+ data-collapsed={collapsed}
206
240
  data-testid={testId}
207
241
  data-test-value={testValue}
242
+ data-ref="aside"
243
+ style={
244
+ {
245
+ "--aside-margin": `calc(var(--spacing) * ${margin ?? 0})`,
246
+ } as React.CSSProperties
247
+ }
208
248
  >
209
- <header
210
- className={classNames(
211
- classes.asideHeader,
212
- headerClassName,
213
- "grid area-head items-center",
214
- )}
215
- data-testid="aside-header"
216
- >
217
- {title && (
249
+ {collapsed && enableFlyout && (
250
+ <div
251
+ role="none"
252
+ onClick={() => tryPeek()}
253
+ data-ref="aside-placeholder"
254
+ className={cn("fabric-asidePlaceholder", classNames?.root, classNames?.body, "overflow-hidden")}
255
+ >
256
+ <StyleEffect />
257
+ {icon && <Icon className={cn("fabric-asideIcon", classNames?.icon, "p-1 text-lg select-none pointer-events-none")} {...getIconProps(icon)} />}
258
+ <div data-ref="aside-title" className={cn("fabric-asideTitle", classNames?.title, "truncate py-0.5 px-1 select-none pointer-events-none")}>
259
+ {title}
260
+ </div>
218
261
  <div
219
- className={classNames(
220
- classes.asideTitle,
221
- "truncate py-0.5 px-1 select-none pointer-events-none",
222
- )}
262
+ role="none"
263
+ data-dismiss="true"
264
+ className="area-[pin] p-2 hover:bg-primary-500/10 cursor-pointer flex items-center justify-center"
265
+ onMouseDown={(e) => e.stopPropagation()}
266
+ onClick={() => onToggle()}
223
267
  >
224
- {title}
268
+ <Icon icon="icon-[mdi--pin-outline]" className="rotate-30" />
269
+ </div>
270
+ </div>
271
+ )}
272
+ <div data-ref="aside-container" className={cn("fabric-asideContainer", classNames?.root, "overflow-hidden grid")} ref={elementRef} style={widthStyles}>
273
+ <StyleEffect />
274
+ <Titlebar title={title} icon={icon} actions={actions} className={classNames?.titlebar} />
275
+ <Activity mode={peek || !collapsed ? "visible" : "hidden"}>
276
+ <ErrorBoundary>{children}</ErrorBoundary>
277
+ </Activity>
278
+
279
+ {enableFlyout && !hideCollapseHandle && (
280
+ <div
281
+ role="none"
282
+ data-dismiss="true"
283
+ className="area-[pin] p-2 hover:bg-primary-500/10 cursor-pointer flex items-center justify-center bg-tint-500/10"
284
+ onMouseDown={(e) => e.stopPropagation()}
285
+ onClick={() => onToggle()}
286
+ >
287
+ {!collapsed ? <Icon icon="icon-[mdi--pin]" /> : <Icon icon="icon-[mdi--pin-outline]" className="rotate-30" />}
225
288
  </div>
226
289
  )}
227
- {collapsable && (
228
- <Icon
229
- aria-label={isCollapsed ? "expand" : "collapse"}
230
- className={classNames(classes.asideCollapse, "p-2 select-none")}
231
- icon={CoreIcons.chevronLeft}
232
- rtlFlip
233
- onClick={toggleCollapse}
234
- data-ref="asideToggle"
235
- />
236
- )}
237
- {icon && (
238
- <Icon
239
- icon={icon}
240
- bg={iconBg}
241
- color={iconColor}
242
- rtlFlip={rtlFlip}
243
- className={classNames(
244
- classes.asideIcon,
245
- "p-1 text-lg select-none pointer-events-none",
246
- )}
247
- />
248
- )}
249
- {actions && <div className={classes.asideActions}>{actions}</div>}
250
- </header>
251
- {loading && <Loading />}
252
- {isCollapsed && (
290
+
253
291
  <div
292
+ ref={ref}
254
293
  role="none"
255
- onClick={tryPeek}
256
- data-ref="asidePlaceholder"
257
- className={classes.asidePlaceholder}
294
+ data-ref="resize-handle"
295
+ onMouseDown={onMouseDown}
296
+ className={cn(
297
+ "fabric-asideResizer",
298
+ resizeable && "before:absolute before:top-1/2 before:-translate-y-1/2 before:content-['⋮'] before:leading-0",
299
+ "after:absolute after:transform-[height] after:border-solid after:border-s-2 after:h-0 after:m-auto after:inset-y-0 after:border-s-primary-500",
300
+ resizeable && "hover:after:duration-500 hover:after:h-full",
301
+ align === "start" ? "before:-inset-e-px" : "before:-inset-s-px",
302
+ isResizing && "after:h-full",
303
+ resizeable ? "w-1 cursor-col-resize bg-tint-50 border-x border-tint-300/50 -mx-px" : "w-0 border-0 pointer-events-none",
304
+ )}
258
305
  />
259
- )}
260
- <section
261
- ref={elementRef}
262
- data-ref="asideBody"
263
- className={classNames(
264
- classes.asideBody,
265
- bodyClassName,
266
- "overflow-hidden grid",
267
- )}
268
- style={isCollapsed ? widthStyles : undefined}
269
- data-testid="aside-body"
270
- >
271
- <ErrorBoundary>{children}</ErrorBoundary>
272
- </section>
273
- {resizeable && (
306
+ </div>
307
+ {collapsable && !enableFlyout && !hideCollapseHandle && (
274
308
  <div
275
- {...resizeHandleProps}
276
- className={classNames(
277
- classes.asideResizer,
278
- "before:absolute before:inset-0 before:w-1 before:top-1/2 before:-translate-y-1/2 before:transition-all",
309
+ role="none"
310
+ className={cn(
311
+ "absolute z-1 h-16 w-2 py-6 leading-0 m-auto inset-y-0",
312
+ "bg-dimmed text-dimmed outline outline-tint-200/50 rounded-sm cursor-pointer pointer-events-auto",
313
+ align === "start" ? "rounded-s-none -inset-e-2" : "rounded-e-none -inset-s-2",
314
+ !collapsed && "opacity-70 hover:opacity-100 hover:bg-default hover:outline-default",
279
315
  )}
280
- />
316
+ onMouseDown={(e) => e.stopPropagation()}
317
+ onClick={() => onToggle()}
318
+ >
319
+ <i
320
+ className={
321
+ "-ms-1 inline-block rtl:-scale-100 " +
322
+ ((collapsed && align === "start") || (!collapsed && align === "end") ? "icon-[mdi--chevron-right]" : "icon-[mdi--chevron-left]")
323
+ }
324
+ />
325
+ </div>
281
326
  )}
282
327
  </aside>
283
328
  );
284
- };
329
+ }
@@ -1,37 +1,39 @@
1
- /*
1
+ /**
2
2
  * React Fabric
3
- * @version: 1.0.0
4
- *
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ * @copyright 2024 Adarsh Pastakia
5
6
  *
6
- * The MIT License (MIT)
7
- * Copyright (c) 2024 Adarsh Pastakia
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
8
13
  *
9
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
10
- * and associated documentation files (the "Software"), to deal in the Software without restriction,
11
- * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
12
- * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
13
- * subject to the following conditions:
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
14
16
  *
15
- * The above copyright notice and this permission notice shall be included in all copies or substantial
16
- * portions of the Software.
17
- *
18
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
- * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
22
24
  */
23
25
 
24
- import { useLogger } from "@react-fabric/utilities";
25
- import classNames from "classnames";
26
- import { Component } from "react";
26
+ import { Component, useState } from "react";
27
27
  import { useTranslation } from "react-i18next";
28
28
  import { Fragment } from "react/jsx-runtime";
29
- import { useMemoDebugger } from "../../hooks/useEffectDebugger";
30
- import { usePropToggle } from "../../hooks/usePropToggle";
31
- import { type ChildrenProp } from "../../types";
32
- import classes from "./ErrorBoundary.module.css";
29
+ import { useGlobals } from "../../context/context";
30
+ import type { ChildrenProp } from "../../types";
33
31
  import { ErrorIcon } from "./ErrorIcon";
34
- import { useGlobals } from "../../context/Global";
32
+
33
+ interface ErrorComponentProps {
34
+ error?: string;
35
+ errorElement?: React.ComponentType<{ error?: string }>;
36
+ }
35
37
 
36
38
  const DefaultError = ({ error }: { error?: string }) => {
37
39
  const { t } = useTranslation("core");
@@ -43,45 +45,31 @@ const DefaultError = ({ error }: { error?: string }) => {
43
45
  );
44
46
  };
45
47
 
46
- const ErrorMessage = ({ error, errorElement }: KeyValue) => {
48
+ const ErrorMessage = ({ error, errorElement }: ErrorComponentProps) => {
47
49
  const { errorElement: globalError } = useGlobals();
48
- const EE = useMemoDebugger(
49
- () => errorElement ?? globalError ?? DefaultError,
50
- [],
51
- "ErrorBoundary element",
52
- );
50
+ const EE = errorElement ?? globalError ?? DefaultError;
53
51
  return (
54
52
  <Fragment>
55
53
  <ErrorIcon />
56
- <div className={classNames(classes.boundaryMessage, "p-2")}>
54
+ <div className="fabric-boundaryMessage p-2">
57
55
  <EE error={error} />
58
56
  </div>
59
57
  </Fragment>
60
58
  );
61
59
  };
62
60
 
63
- const ErrorStack = ({ error, stack }: KeyValue) => {
64
- const [show, toggleShow] = usePropToggle(false);
65
- useLogger().error(error, {}, stack);
61
+ const ErrorStack = ({ error, stack }: { error?: string; stack: string }) => {
62
+ const [show, setShow] = useState(false);
63
+ console.error(error, {}, stack);
66
64
  return (
67
- <div className={classNames(classes.boundaryDetail, "overflow-hidden grid")}>
68
- <div
69
- className={classNames(
70
- classes.boundaryLink,
71
- "px-2 py-1 text-xs text-end",
72
- )}
73
- >
74
- <span role="link" tabIndex={0} className="link" onClick={toggleShow}>
65
+ <div className="fabric-boundaryDetail overflow-hidden grid">
66
+ <div className="fabric-boundaryLink px-2 py-1 text-xs text-end">
67
+ <span role="link" tabIndex={0} className="link" onClick={() => setShow(!show)} onKeyDown={() => setShow(!show)}>
75
68
  {show ? "Hide Detail" : "Show Detail"}
76
69
  </span>
77
70
  </div>
78
71
  {show && (
79
- <div
80
- className={classNames(
81
- classes.boundaryStack,
82
- "overflow-auto p-2 text-xs border-t",
83
- )}
84
- >
72
+ <div className="fabric-boundaryStack overflow-auto p-2 text-xs border-t">
85
73
  <pre className="whitespace-pre-wrap">{stack}</pre>
86
74
  </div>
87
75
  )}
@@ -90,7 +78,15 @@ const ErrorStack = ({ error, stack }: KeyValue) => {
90
78
  };
91
79
 
92
80
  /**
93
- * An error boundary wrapper higher-order component designed to provide consistent error display across the application will trap runtime errors
81
+ * Catches JavaScript errors in the child tree, logs them, and displays a fallback UI.
82
+ * It can be used to wrap any component tree to prevent the entire application from crashing due to errors in a specific part of the UI.
83
+ *
84
+ * @example
85
+ * ```tsx
86
+ * <ErrorBoundary errorElement={CustomErrorComponent}>
87
+ * <MyComponent />
88
+ * </ErrorBoundary>
89
+ * ```
94
90
  */
95
91
  export class ErrorBoundary extends Component<
96
92
  {
@@ -105,7 +101,7 @@ export class ErrorBoundary extends Component<
105
101
  return { hasError: true, error: error.message, stack: error.stack };
106
102
  }
107
103
 
108
- constructor(props: AnyObject) {
104
+ constructor(props: ErrorComponentProps & ChildrenProp) {
109
105
  super(props);
110
106
  this.state = { hasError: false };
111
107
  }
@@ -120,23 +116,9 @@ export class ErrorBoundary extends Component<
120
116
  const { errorElement: E } = this.props;
121
117
  // You can render any custom fallback UI
122
118
  return (
123
- <div
124
- className={classNames(
125
- classes.errorBoundary,
126
- "grid grid-rows-1 overflow-hidden p-0.5 rounded-capped",
127
- )}
128
- >
129
- <div
130
- className={classNames(
131
- classes.boundaryContent,
132
- "overflow-hidden grid rounded-capped",
133
- )}
134
- >
135
- <ErrorMessage error={this.state.error} errorElement={E} />
136
- {env === "development" && (
137
- <ErrorStack error={this.state.error} stack={this.state.stack} />
138
- )}
139
- </div>
119
+ <div className="fabric-errorBoundary grid overflow-hidden rounded-capped">
120
+ <ErrorMessage error={this.state.error} errorElement={E} />
121
+ {env === "development" && <ErrorStack error={this.state.error} stack={this.state.stack as string} />}
140
122
  </div>
141
123
  );
142
124
  }