@react-fabric/core 1.0.0-beta.5 → 1.0.0-beta.51

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 (373) 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/{src/components/animations/Animations.module.css → css/components/_animations.css} +9 -9
  4. package/{src/components/avatar/Avatar.module.css → css/components/_avatar.css} +11 -11
  5. package/{src/components/badge/Badge.module.css → css/components/_badge.css} +19 -17
  6. package/{src/components/breadcrumbs/Breadcrumbs.module.css → css/components/_breadcrumbs.css} +49 -44
  7. package/{src/components/button/Button.module.css → css/components/_button.css} +69 -79
  8. package/{src/components/card/Card.module.css → css/components/_card.css} +50 -28
  9. package/{src/components/chip/Chip.module.css → css/components/_chip.css} +14 -10
  10. package/{src/components/collapsable/Collapsable.module.css → css/components/_collapsable.css} +3 -3
  11. package/css/components/_divider.css +38 -0
  12. package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +2 -2
  13. package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +6 -6
  14. package/{src/components/icon/Icon.module.css → css/components/_icon.css} +8 -5
  15. package/{src/components/media/Media.module.css → css/components/_media.css} +17 -17
  16. package/{src/components/menu/Menu.module.css → css/components/_menu.css} +19 -20
  17. package/{src/overlays/message/Message.module.css → css/components/_message.css} +2 -2
  18. package/{src/components/meter/Meter.module.css → css/components/_meter.css} +10 -10
  19. package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +6 -6
  20. package/{src/components/panel/Panel.module.css → css/components/_panel.css} +17 -17
  21. package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
  22. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +73 -84
  23. package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
  24. package/css/components/_tooltip.css +29 -0
  25. package/{src/core/content/Content.module.css → css/components/index.css} +25 -18
  26. package/{src/core/aside/Aside.module.css → css/core/_aside.css} +56 -42
  27. package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
  28. package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
  29. package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
  30. package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
  31. package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
  32. package/css/core/_section.css +28 -0
  33. package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
  34. package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
  35. package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
  36. package/css/core/index.css +33 -0
  37. package/css/reset/_gradients.css +8 -8
  38. package/css/reset/_reset.css +42 -224
  39. package/css/reset/_text.css +14 -29
  40. package/css/reset/_theme.css +331 -52
  41. package/css/reset/index.css +4 -4
  42. package/css/styles.css +7 -6
  43. package/css/theme/_colors.css +320 -0
  44. package/css/theme/_utilities.css +530 -0
  45. package/css/theme/index.css +45 -0
  46. package/dist/cjs/components/actionLabel/ActionLabel.js +3 -3
  47. package/dist/cjs/components/animations/Animations.js +29 -18
  48. package/dist/cjs/components/avatar/Avatar.js +10 -13
  49. package/dist/cjs/components/avatar/AvatarGroup.js +3 -3
  50. package/dist/cjs/components/badge/Badge.js +5 -5
  51. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +10 -8
  52. package/dist/cjs/components/button/Button.js +18 -14
  53. package/dist/cjs/components/button/ButtonGroup.js +4 -3
  54. package/dist/cjs/components/button/ConfirmButton.js +10 -3
  55. package/dist/cjs/components/button/ToggleButtonGroup.js +3 -3
  56. package/dist/cjs/components/callout/Callout.js +16 -4
  57. package/dist/cjs/components/card/Card.js +14 -10
  58. package/dist/cjs/components/card/CardCover.js +10 -5
  59. package/dist/cjs/components/card/FlipContent.js +35 -0
  60. package/dist/cjs/components/chip/Chip.js +11 -7
  61. package/dist/cjs/components/collapsable/Collapsable.js +6 -6
  62. package/dist/cjs/components/divider/Divider.js +11 -7
  63. package/dist/cjs/components/dropdown/Dropdown.js +6 -9
  64. package/dist/cjs/components/dropdown/DropdownTool.js +4 -3
  65. package/dist/cjs/components/empty/EmptyContent.js +8 -5
  66. package/dist/cjs/components/icon/Icon.js +17 -15
  67. package/dist/cjs/components/media/Media.js +116 -75
  68. package/dist/cjs/components/menu/ContextMenu.js +30 -10
  69. package/dist/cjs/components/menu/Menu.js +44 -21
  70. package/dist/cjs/components/menu/MenuItem.js +30 -16
  71. package/dist/cjs/components/meter/Meter.js +2 -3
  72. package/dist/cjs/components/navigator/Navigator.js +26 -13
  73. package/dist/cjs/components/panel/Panel.js +10 -9
  74. package/dist/cjs/components/panel/PanelGroup.js +1 -2
  75. package/dist/cjs/components/progress/ProgressBar.js +10 -9
  76. package/dist/cjs/components/progress/ProgressCircle.js +9 -7
  77. package/dist/cjs/components/tabpanel/Tab.js +58 -38
  78. package/dist/cjs/components/tabpanel/TabPanel.js +20 -16
  79. package/dist/cjs/context/Global.js +3 -0
  80. package/dist/cjs/context/NotificationCenter.js +3 -3
  81. package/dist/cjs/core/aside/Aside.js +11 -10
  82. package/dist/cjs/core/boundary/ErrorBoundary.js +6 -7
  83. package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
  84. package/dist/cjs/core/content/Content.js +9 -7
  85. package/dist/cjs/core/headfoot/HeadFoot.js +2 -20
  86. package/dist/cjs/core/page/Page.js +16 -30
  87. package/dist/cjs/core/responsive/Responsive.js +5 -5
  88. package/dist/cjs/core/section/Section.js +1 -2
  89. package/dist/cjs/core/theme/ThemeProvider.js +11 -9
  90. package/dist/cjs/core/viewport/Viewport.js +4 -2
  91. package/dist/cjs/hooks/useDebounce.js +1 -1
  92. package/dist/cjs/hooks/useEffectDebugger.js +2 -2
  93. package/dist/cjs/hooks/useNavigator.js +6 -4
  94. package/dist/cjs/hooks/useResizeObserver.js +1 -1
  95. package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
  96. package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
  97. package/dist/cjs/index.js +8 -2
  98. package/dist/cjs/overlays/alert/Alert.js +20 -14
  99. package/dist/cjs/overlays/flyout/Flyout.js +49 -60
  100. package/dist/cjs/overlays/message/Message.js +6 -3
  101. package/dist/cjs/overlays/modal/Modal.js +16 -12
  102. package/dist/cjs/overlays/toast/Toast.js +17 -9
  103. package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
  104. package/dist/cjs/types/icons.js +6 -1
  105. package/dist/cjs/typography/Abbr.js +4 -5
  106. package/dist/cjs/typography/{Link.js → Anchor.js} +5 -4
  107. package/dist/cjs/typography/Mark.js +2 -3
  108. package/dist/cjs/typography/Text.js +3 -4
  109. package/dist/cjs/typography/Title.js +3 -3
  110. package/dist/cjs/utils/cloneElement.js +47 -0
  111. package/dist/cjs/utils/getColor.js +1 -18
  112. package/dist/esm/components/actionLabel/ActionLabel.js +3 -3
  113. package/dist/esm/components/animations/Animations.js +30 -19
  114. package/dist/esm/components/avatar/Avatar.js +11 -14
  115. package/dist/esm/components/avatar/AvatarGroup.js +3 -3
  116. package/dist/esm/components/badge/Badge.js +5 -5
  117. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +10 -8
  118. package/dist/esm/components/button/Button.js +18 -14
  119. package/dist/esm/components/button/ButtonGroup.js +5 -4
  120. package/dist/esm/components/button/ConfirmButton.js +10 -3
  121. package/dist/esm/components/button/ToggleButtonGroup.js +4 -4
  122. package/dist/esm/components/callout/Callout.js +16 -4
  123. package/dist/esm/components/card/Card.js +15 -11
  124. package/dist/esm/components/card/CardCover.js +10 -5
  125. package/dist/esm/components/card/FlipContent.js +35 -0
  126. package/dist/esm/components/chip/Chip.js +12 -8
  127. package/dist/esm/components/collapsable/Collapsable.js +6 -6
  128. package/dist/esm/components/divider/Divider.js +12 -8
  129. package/dist/esm/components/dropdown/Dropdown.js +6 -9
  130. package/dist/esm/components/dropdown/DropdownTool.js +4 -3
  131. package/dist/esm/components/empty/EmptyContent.js +8 -5
  132. package/dist/esm/components/icon/Icon.js +17 -15
  133. package/dist/esm/components/media/Media.js +117 -76
  134. package/dist/esm/components/menu/ContextMenu.js +32 -12
  135. package/dist/esm/components/menu/Menu.js +46 -23
  136. package/dist/esm/components/menu/MenuItem.js +24 -10
  137. package/dist/esm/components/meter/Meter.js +2 -3
  138. package/dist/esm/components/navigator/Navigator.js +26 -13
  139. package/dist/esm/components/panel/Panel.js +10 -9
  140. package/dist/esm/components/panel/PanelGroup.js +1 -2
  141. package/dist/esm/components/progress/ProgressBar.js +10 -9
  142. package/dist/esm/components/progress/ProgressCircle.js +9 -7
  143. package/dist/esm/components/tabpanel/Tab.js +59 -39
  144. package/dist/esm/components/tabpanel/TabPanel.js +20 -16
  145. package/dist/esm/context/Global.js +3 -0
  146. package/dist/esm/context/NotificationCenter.js +3 -3
  147. package/dist/esm/core/aside/Aside.js +11 -10
  148. package/dist/esm/core/boundary/ErrorBoundary.js +6 -7
  149. package/dist/esm/core/boundary/ErrorIcon.js +1 -2
  150. package/dist/esm/core/content/Content.js +9 -7
  151. package/dist/esm/core/headfoot/HeadFoot.js +2 -20
  152. package/dist/esm/core/page/Page.js +16 -30
  153. package/dist/esm/core/responsive/Responsive.js +5 -5
  154. package/dist/esm/core/section/Section.js +1 -2
  155. package/dist/esm/core/theme/ThemeProvider.js +11 -9
  156. package/dist/esm/core/viewport/Viewport.js +4 -2
  157. package/dist/esm/hooks/useDebounce.js +1 -1
  158. package/dist/esm/hooks/useEffectDebugger.js +2 -2
  159. package/dist/esm/hooks/useNavigator.js +7 -5
  160. package/dist/esm/hooks/useResizeObserver.js +1 -1
  161. package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
  162. package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
  163. package/dist/esm/index.js +4 -1
  164. package/dist/esm/overlays/alert/Alert.js +21 -15
  165. package/dist/esm/overlays/flyout/Flyout.js +52 -63
  166. package/dist/esm/overlays/message/Message.js +7 -4
  167. package/dist/esm/overlays/modal/Modal.js +17 -13
  168. package/dist/esm/overlays/toast/Toast.js +18 -10
  169. package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
  170. package/dist/esm/types/icons.js +6 -1
  171. package/dist/esm/typography/Abbr.js +4 -5
  172. package/dist/esm/typography/{Link.js → Anchor.js} +6 -5
  173. package/dist/esm/typography/Mark.js +2 -3
  174. package/dist/esm/typography/Text.js +4 -5
  175. package/dist/esm/typography/Title.js +4 -4
  176. package/dist/esm/utils/cloneElement.js +47 -0
  177. package/dist/esm/utils/getColor.js +2 -16
  178. package/dist/types/components/actionLabel/ActionLabel.d.ts +2 -2
  179. package/dist/types/components/animations/Animations.d.ts +5 -5
  180. package/dist/types/components/avatar/Avatar.d.ts +3 -3
  181. package/dist/types/components/badge/Badge.d.ts +5 -1
  182. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +2 -2
  183. package/dist/types/components/button/Button.d.ts +7 -5
  184. package/dist/types/components/button/ButtonGroup.d.ts +2 -2
  185. package/dist/types/components/button/ConfirmButton.d.ts +6 -1
  186. package/dist/types/components/callout/Callout.d.ts +4 -3
  187. package/dist/types/components/card/Card.d.ts +8 -4
  188. package/dist/types/components/card/FlipContent.d.ts +7 -0
  189. package/dist/types/components/chip/Chip.d.ts +3 -3
  190. package/dist/types/components/collapsable/Collapsable.d.ts +7 -3
  191. package/dist/types/components/divider/Divider.d.ts +11 -7
  192. package/dist/types/components/dropdown/DropdownTool.d.ts +2 -1
  193. package/dist/types/components/empty/EmptyContent.d.ts +6 -2
  194. package/dist/types/components/icon/Icon.d.ts +5 -4
  195. package/dist/types/components/index.d.ts +2 -1
  196. package/dist/types/components/media/Media.d.ts +2 -2
  197. package/dist/types/components/menu/ContextMenu.d.ts +2 -1
  198. package/dist/types/components/menu/MenuItem.d.ts +1 -1
  199. package/dist/types/components/menu/types.d.ts +3 -2
  200. package/dist/types/components/navigator/Navigator.d.ts +7 -4
  201. package/dist/types/components/panel/Panel.d.ts +0 -1
  202. package/dist/types/components/progress/ProgressBar.d.ts +3 -3
  203. package/dist/types/components/progress/ProgressCircle.d.ts +3 -3
  204. package/dist/types/components/tabpanel/Tab.d.ts +5 -5
  205. package/dist/types/components/tabpanel/TabPanel.d.ts +10 -1
  206. package/dist/types/core/boundary/ErrorBoundary.d.ts +1 -1
  207. package/dist/types/core/content/Content.d.ts +3 -2
  208. package/dist/types/core/headfoot/HeadFoot.d.ts +1 -9
  209. package/dist/types/core/page/Page.d.ts +3 -3
  210. package/dist/types/core/responsive/Responsive.d.ts +6 -2
  211. package/dist/types/core/theme/ThemeProvider.d.ts +4 -4
  212. package/dist/types/hooks/useOverlayService.d.ts +3 -5
  213. package/dist/types/hooks/useResize.d.ts +1 -1
  214. package/dist/types/hooks/useResizeObserver.d.ts +1 -1
  215. package/dist/types/index.d.ts +3 -0
  216. package/dist/types/overlays/alert/Alert.d.ts +2 -3
  217. package/dist/types/overlays/flyout/Flyout.d.ts +3 -2
  218. package/dist/types/overlays/message/Message.d.ts +2 -3
  219. package/dist/types/overlays/modal/Modal.d.ts +12 -3
  220. package/dist/types/overlays/toast/Toast.d.ts +2 -3
  221. package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
  222. package/dist/types/types/icons.d.ts +6 -1
  223. package/dist/types/types/index.d.ts +26 -6
  224. package/dist/types/typography/Abbr.d.ts +6 -3
  225. package/dist/types/typography/Anchor.d.ts +25 -0
  226. package/dist/types/typography/Mark.d.ts +2 -3
  227. package/dist/types/typography/index.d.ts +1 -1
  228. package/dist/types/utils/cloneElement.d.ts +2 -0
  229. package/dist/types/utils/getColor.d.ts +1 -4
  230. package/dist/types/utils/index.d.ts +1 -0
  231. package/package.json +11 -13
  232. package/src/components/actionLabel/ActionLabel.tsx +15 -6
  233. package/src/components/animations/Animations.tsx +29 -23
  234. package/src/components/avatar/Avatar.tsx +74 -88
  235. package/src/components/avatar/AvatarGroup.tsx +4 -4
  236. package/src/components/badge/Badge.tsx +11 -7
  237. package/src/components/breadcrumbs/Breadcrumbs.tsx +13 -9
  238. package/src/components/button/Button.tsx +27 -22
  239. package/src/components/button/ButtonGroup.tsx +7 -7
  240. package/src/components/button/ConfirmButton.tsx +19 -6
  241. package/src/components/button/ToggleButtonGroup.tsx +5 -5
  242. package/src/components/callout/Callout.tsx +28 -12
  243. package/src/components/card/Card.tsx +30 -15
  244. package/src/components/card/CardCover.tsx +11 -6
  245. package/src/components/card/FlipContent.tsx +69 -0
  246. package/src/components/chip/Chip.tsx +19 -13
  247. package/src/components/collapsable/Collapsable.tsx +12 -7
  248. package/src/components/divider/Divider.tsx +23 -16
  249. package/src/components/dropdown/Dropdown.tsx +6 -11
  250. package/src/components/dropdown/DropdownTool.tsx +5 -3
  251. package/src/components/empty/EmptyContent.tsx +21 -6
  252. package/src/components/icon/Icon.tsx +58 -67
  253. package/src/components/index.ts +2 -1
  254. package/src/components/media/Media.tsx +141 -106
  255. package/src/components/menu/ContextMenu.tsx +36 -11
  256. package/src/components/menu/Menu.tsx +56 -30
  257. package/src/components/menu/MenuItem.tsx +19 -9
  258. package/src/components/menu/types.ts +3 -2
  259. package/src/components/meter/Meter.tsx +2 -3
  260. package/src/components/navigator/Navigator.tsx +36 -7
  261. package/src/components/panel/Panel.tsx +10 -9
  262. package/src/components/panel/PanelGroup.tsx +1 -2
  263. package/src/components/progress/ProgressBar.tsx +13 -14
  264. package/src/components/progress/ProgressCircle.tsx +10 -13
  265. package/src/components/tabpanel/Tab.tsx +81 -64
  266. package/src/components/tabpanel/TabPanel.tsx +34 -12
  267. package/src/context/Global.tsx +4 -0
  268. package/src/context/NotificationCenter.tsx +3 -3
  269. package/src/core/aside/Aside.tsx +11 -10
  270. package/src/core/boundary/ErrorBoundary.tsx +8 -7
  271. package/src/core/boundary/ErrorIcon.tsx +1 -2
  272. package/src/core/content/Content.tsx +17 -12
  273. package/src/core/headfoot/HeadFoot.tsx +2 -35
  274. package/src/core/page/Page.tsx +18 -5
  275. package/src/core/responsive/Responsive.tsx +14 -7
  276. package/src/core/section/Section.tsx +1 -2
  277. package/src/core/theme/ThemeProvider.tsx +14 -13
  278. package/src/core/viewport/Viewport.tsx +1 -2
  279. package/src/hooks/useDebounce.ts +1 -1
  280. package/src/hooks/useEffectDebugger.ts +1 -2
  281. package/src/hooks/useNavigator.tsx +10 -5
  282. package/src/hooks/useOverlayService.tsx +12 -6
  283. package/src/hooks/useResize.ts +1 -1
  284. package/src/hooks/useResizeObserver.ts +13 -9
  285. package/src/hotkeys/HotKeyLabel.tsx +1 -1
  286. package/src/hotkeys/HotKeyWrapper.tsx +3 -1
  287. package/src/index.ts +4 -0
  288. package/src/overlays/alert/Alert.tsx +28 -32
  289. package/src/overlays/flyout/Flyout.tsx +71 -84
  290. package/src/overlays/message/Message.tsx +10 -7
  291. package/src/overlays/modal/Modal.tsx +37 -15
  292. package/src/overlays/toast/Toast.tsx +18 -27
  293. package/src/overlays/tooltip/Tooltip.tsx +43 -18
  294. package/src/types/icons.ts +13 -2
  295. package/src/types/index.ts +268 -27
  296. package/src/typography/Abbr.tsx +16 -10
  297. package/src/typography/{Link.tsx → Anchor.tsx} +8 -13
  298. package/src/typography/Mark.tsx +4 -9
  299. package/src/typography/Text.tsx +4 -12
  300. package/src/typography/Title.tsx +2 -6
  301. package/src/typography/index.ts +1 -1
  302. package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
  303. package/src/utils/getColor.ts +1 -17
  304. package/src/utils/index.ts +1 -0
  305. package/css/index.js +0 -250
  306. package/css/tailwind/colors.ts +0 -158
  307. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  308. package/dist/cjs/components/animations/Animations.module.css +0 -1
  309. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  310. package/dist/cjs/components/badge/Badge.module.css +0 -1
  311. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  312. package/dist/cjs/components/button/Button.module.css +0 -1
  313. package/dist/cjs/components/card/Card.module.css +0 -1
  314. package/dist/cjs/components/chip/Chip.module.css +0 -1
  315. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  316. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  317. package/dist/cjs/components/icon/Icon.module.css +0 -1
  318. package/dist/cjs/components/media/Media.module.css +0 -1
  319. package/dist/cjs/components/menu/Menu.module.css +0 -1
  320. package/dist/cjs/components/meter/Meter.module.css +0 -1
  321. package/dist/cjs/components/panel/Panel.module.css +0 -1
  322. package/dist/cjs/components/progress/Progress.module.css +0 -1
  323. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  324. package/dist/cjs/core/aside/Aside.module.css +0 -1
  325. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  326. package/dist/cjs/core/content/Content.module.css +0 -1
  327. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  328. package/dist/cjs/core/page/Page.module.css +0 -1
  329. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  330. package/dist/cjs/core/section/Section.module.css +0 -1
  331. package/dist/cjs/core/theme/Theme.module.css +0 -1
  332. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  333. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  334. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  335. package/dist/cjs/overlays/message/Message.module.css +0 -1
  336. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  337. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  338. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  339. package/dist/cjs/typography/Typography.module.css +0 -1
  340. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  341. package/dist/esm/components/animations/Animations.module.css +0 -1
  342. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  343. package/dist/esm/components/badge/Badge.module.css +0 -1
  344. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  345. package/dist/esm/components/button/Button.module.css +0 -1
  346. package/dist/esm/components/card/Card.module.css +0 -1
  347. package/dist/esm/components/chip/Chip.module.css +0 -1
  348. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  349. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  350. package/dist/esm/components/icon/Icon.module.css +0 -1
  351. package/dist/esm/components/media/Media.module.css +0 -1
  352. package/dist/esm/components/menu/Menu.module.css +0 -1
  353. package/dist/esm/components/meter/Meter.module.css +0 -1
  354. package/dist/esm/components/panel/Panel.module.css +0 -1
  355. package/dist/esm/components/progress/Progress.module.css +0 -1
  356. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  357. package/dist/esm/core/aside/Aside.module.css +0 -1
  358. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  359. package/dist/esm/core/content/Content.module.css +0 -1
  360. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  361. package/dist/esm/core/page/Page.module.css +0 -1
  362. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  363. package/dist/esm/core/section/Section.module.css +0 -1
  364. package/dist/esm/core/theme/Theme.module.css +0 -1
  365. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  366. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  367. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  368. package/dist/esm/overlays/message/Message.module.css +0 -1
  369. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  370. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  371. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  372. package/dist/esm/typography/Typography.module.css +0 -1
  373. package/dist/types/typography/Link.d.ts +0 -25
@@ -24,7 +24,14 @@
24
24
  import { isString } from "@react-fabric/utilities";
25
25
  import classNames from "classnames";
26
26
  import { isValidElement } from "react";
27
- import { type ChildrenProp, type CssProp, type TestProps } from "../../types";
27
+ import {
28
+ type ChildrenProp,
29
+ type ColorType,
30
+ type CssProp,
31
+ type PaletteType,
32
+ type TestProps,
33
+ } from "../../types";
34
+ import { getColor } from "../../utils";
28
35
  import { Icon } from "../icon/Icon";
29
36
 
30
37
  export interface EmptyContentProps
@@ -47,6 +54,10 @@ export interface EmptyContentProps
47
54
  * empty icon
48
55
  */
49
56
  icon?: string | React.ReactElement;
57
+ /**
58
+ * icon color
59
+ */
60
+ iconColor?: ColorType | PaletteType;
50
61
  }
51
62
 
52
63
  const SizeMap: KeyValue = {
@@ -101,6 +112,7 @@ export const EmptyContent = ({
101
112
  icon,
102
113
  className,
103
114
  size,
115
+ iconColor,
104
116
  ...test
105
117
  }: EmptyContentProps) => {
106
118
  return (
@@ -116,25 +128,28 @@ export const EmptyContent = ({
116
128
  }
117
129
  {...test}
118
130
  >
119
- <div className="leading-none" style={{ fontSize: "4em" }}>
131
+ <div
132
+ className="leading-none"
133
+ style={{ fontSize: "4em", color: getColor(iconColor ?? "tint-700") }}
134
+ >
120
135
  {isString(icon) && <Icon icon={icon} />}
121
136
  {isValidElement(icon) && icon}
122
137
  {!icon && <DefaultIcon />}
123
138
  </div>
124
139
  {title && (
125
- <p
140
+ <div
126
141
  className="font-medium text-center text-dimmed"
127
142
  style={{ fontSize: "1.5em" }}
128
143
  >
129
144
  {title}
130
- </p>
145
+ </div>
131
146
  )}
132
- <p
147
+ <div
133
148
  className="font-medium text-center text-muted"
134
149
  style={{ fontSize: "0.875em" }}
135
150
  >
136
151
  {message}
137
- </p>
152
+ </div>
138
153
  <div className="flex gap-1 pt-6">{children}</div>
139
154
  </div>
140
155
  );
@@ -23,8 +23,9 @@
23
23
 
24
24
  import { isString, isSvgPath } from "@react-fabric/utilities";
25
25
  import classNames from "classnames";
26
- import { useMemoDebugger } from "../../hooks/useEffectDebugger";
26
+ import { useMemo } from "react";
27
27
  import {
28
+ type PaletteType,
28
29
  type AriaProps,
29
30
  type ColorType,
30
31
  type CssProp,
@@ -32,8 +33,7 @@ import {
32
33
  type SizeType,
33
34
  type TestProps,
34
35
  } from "../../types";
35
- import { getBgClass, getColor, getColorClass } from "../../utils";
36
- import classes from "./Icon.module.css";
36
+ import { getColor } from "../../utils";
37
37
 
38
38
  export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
39
39
  /**
@@ -43,11 +43,11 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
43
43
  /**
44
44
  * background color (CSS color / tailwind color)
45
45
  */
46
- bg?: ColorType | string;
46
+ bg?: ColorType | PaletteType | string;
47
47
  /**
48
48
  * icon color (CSS color / tailwind color)
49
49
  */
50
- color?: ColorType | string;
50
+ color?: ColorType | PaletteType | string;
51
51
  /**
52
52
  * flip icon in rtl
53
53
  */
@@ -68,6 +68,7 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
68
68
  * apply animation
69
69
  */
70
70
  animate?: "spin" | "pulse" | "bounce";
71
+ disabled?: boolean;
71
72
  /**
72
73
  * click handler
73
74
  */
@@ -95,92 +96,82 @@ export const Icon = ({
95
96
  rtlFlip,
96
97
  animate,
97
98
  rounded,
99
+ disabled,
98
100
  viewBox = "0 0 24 24",
99
101
  className,
100
102
  onClick,
101
103
  ...rest
102
104
  }: IconProps) => {
103
105
  /** ***************** style map *******************/
104
- const styles = useMemoDebugger(
105
- () => {
106
- const s: KeyValue = {};
107
- if (bg) {
108
- s.backgroundColor = getColor(bg);
109
- }
110
- if (color) {
111
- s.color = getColor(color);
112
- }
113
- if (size && !(size in SizeMap)) {
114
- s.fontSize = size;
115
- }
116
- if (size && size in SizeMap) {
117
- s.fontSize = SizeMap[size];
118
- }
119
- return s;
120
- },
121
- [bg, color, size],
122
- "Icon styles",
123
- );
106
+ const styles = useMemo(() => {
107
+ const s: KeyValue = {};
108
+ if (bg) {
109
+ s.backgroundColor = getColor(bg);
110
+ }
111
+ if (color) {
112
+ s.color = getColor(color);
113
+ }
114
+ if (size && !(size in SizeMap)) {
115
+ s.fontSize = size;
116
+ }
117
+ if (size && size in SizeMap) {
118
+ s.fontSize = SizeMap[size];
119
+ }
120
+ return s;
121
+ }, [bg, color, size]);
124
122
 
125
123
  /** ***************** check if icon is svg path *******************/
126
- const isSvg = useMemoDebugger(
127
- () => {
128
- return isSvgPath(icon);
129
- },
130
- [icon],
131
- "Icon isSvg",
132
- );
124
+ const isSvg = useMemo(() => {
125
+ return isSvgPath(icon);
126
+ }, [icon]);
133
127
 
134
128
  /** ***************** render icon *******************/
135
- const iconEl = useMemoDebugger(
136
- () => {
137
- if (!isString(icon)) {
138
- throw Error("Invalid icon expected string");
139
- }
140
- return isSvg ? (
141
- <svg viewBox={viewBox}>
142
- <path fill="currentColor" d={icon.toString()} />
143
- </svg>
144
- ) : icon?.toString().length <= 4 ? (
145
- <svg role="img">
146
- <text
147
- x="50%"
148
- y="50%"
149
- dy=".1em"
150
- dominantBaseline="middle"
151
- textAnchor="middle"
152
- style={{ fontSize: SvgTextSize[icon.length] ?? "1em" }}
153
- >
154
- {icon}
155
- </text>
156
- </svg>
157
- ) : (
158
- <i className={`${icon}`} />
159
- );
160
- },
161
- [icon, isSvg, viewBox],
162
- "Icon el",
163
- );
129
+ const iconEl = useMemo(() => {
130
+ if (!isString(icon)) {
131
+ throw Error("Invalid icon expected string");
132
+ }
133
+ return isSvg ? (
134
+ <svg viewBox={viewBox}>
135
+ <path fill="currentColor" d={icon.toString()} />
136
+ </svg>
137
+ ) : icon?.toString().length <= 4 ? (
138
+ <svg role="img">
139
+ <text
140
+ x="50%"
141
+ y="50%"
142
+ dy=".1em"
143
+ dominantBaseline="middle"
144
+ textAnchor="middle"
145
+ style={{ fontSize: SvgTextSize[icon.length] }}
146
+ >
147
+ {icon}
148
+ </text>
149
+ </svg>
150
+ ) : (
151
+ <i className={`${icon}`} />
152
+ );
153
+ }, [icon, isSvg, viewBox]);
164
154
 
165
155
  return (
166
156
  <dfn
167
- {...rest}
157
+ data-ref="icon"
168
158
  ref={ref}
159
+ {...rest}
169
160
  role="presentation"
170
161
  className={classNames(
171
- classes.icon,
172
- className,
173
- "select-none overflow-hidden inline-block box-content leading-none not-italic text-center",
174
- bg && getBgClass(bg),
175
- color && getColorClass(color),
162
+ "fabric-icon",
163
+ "select-none overflow-hidden box-content leading-none not-italic text-center",
176
164
  !rounded && "rounded",
177
165
  rounded && "rounded-full",
178
166
  animate && `animate-${animate}`,
167
+ !!onClick && disabled && "opacity-30 pointer-events-none",
168
+ className,
179
169
  )}
180
170
  onClick={onClick}
181
171
  data-flip={rtlFlip}
182
172
  style={styles}
183
173
  data-clickable={!!onClick}
174
+ data-inner-clickable={!!onClick}
184
175
  >
185
176
  {iconEl}
186
177
  </dfn>
@@ -26,8 +26,8 @@ export {
26
26
  AnimationBars,
27
27
  AnimationIndicator,
28
28
  AnimationSpinner,
29
- Skeleton,
30
29
  Loading,
30
+ Skeleton,
31
31
  } from "./animations/Animations";
32
32
  export { Avatar } from "./avatar/Avatar";
33
33
  export { AvatarGroup } from "./avatar/AvatarGroup";
@@ -40,6 +40,7 @@ export { ToggleButtonGroup } from "./button/ToggleButtonGroup";
40
40
  export { Callout } from "./callout/Callout";
41
41
  export { Card } from "./card/Card";
42
42
  export { CardCover } from "./card/CardCover";
43
+ export { FlipContent, type FlipContentRef } from "./card/FlipContent";
43
44
  export { Chip } from "./chip/Chip";
44
45
  export { Collapsable } from "./collapsable/Collapsable";
45
46
  export { Divider } from "./divider/Divider";
@@ -23,13 +23,13 @@
23
23
 
24
24
  import { getImageColorset } from "@react-fabric/utilities";
25
25
  import classNames from "classnames";
26
- import { useMemo, useRef, useState } from "react";
27
- import { type AriaProps, type CssProp } from "../../types";
26
+ import { Fragment, useEffect, useRef, useState } from "react";
27
+ import { type AriaProps, type CssProp, type TestProps } from "../../types";
28
28
  import { CoreIcons } from "../../types/icons";
29
29
  import { Button } from "../button/Button";
30
- import classes from "./Media.module.css";
30
+ import { Icon } from "../icon/Icon";
31
31
 
32
- export interface BaseProps extends CssProp, AriaProps {
32
+ export interface BaseProps extends CssProp, TestProps, AriaProps {
33
33
  /**
34
34
  * media source
35
35
  */
@@ -44,6 +44,12 @@ export interface BaseProps extends CssProp, AriaProps {
44
44
  fit?: "cover" | "contain" | "fill";
45
45
  }
46
46
 
47
+ const cover = {
48
+ fill: "object-fill",
49
+ cover: "object-cover",
50
+ contain: "object-contain",
51
+ };
52
+
47
53
  export interface ImageProps extends BaseProps {
48
54
  /**
49
55
  * image alt text
@@ -65,6 +71,17 @@ export interface VideoProps extends BaseProps {
65
71
  playOnHover?: boolean;
66
72
  }
67
73
 
74
+ const loadIndicator = (
75
+ <div
76
+ className={classNames(
77
+ "fabric-mediaPlaceholder",
78
+ "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-4xl text-gray animate-pulse",
79
+ )}
80
+ >
81
+ ●●●
82
+ </div>
83
+ );
84
+
68
85
  export const Image = ({
69
86
  src,
70
87
  alt,
@@ -74,47 +91,50 @@ export const Image = ({
74
91
  ...aria
75
92
  }: ImageProps) => {
76
93
  const [colorSet, setColorSet] = useState("light");
77
- const loadIndicator = useMemo(
78
- () => (
79
- <div
80
- className={classNames(
81
- classes.mediaPlaceholder,
82
- "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-4xl text-gray animate-pulse",
83
- )}
84
- >
85
- ●●●
86
- </div>
87
- ),
88
- [src],
89
- );
94
+ const [loaded, setLoaded] = useState(false);
95
+ const [errored, setErrored] = useState(false);
96
+ useEffect(() => {
97
+ setLoaded(false);
98
+ setErrored(false);
99
+ }, [src]);
90
100
  return (
91
101
  <div
92
102
  data-ref="image"
93
103
  className={classNames(
94
- classes.mediaContainer,
95
- "relative overflow-hidden bg-gray inline-block",
96
- reel && classes.mediaReel,
104
+ "fabric-mediaContainer",
105
+ "relative overflow-hidden inline-block",
106
+ reel && "fabric-mediaReel",
97
107
  className,
98
108
  )}
99
109
  data-colorset={colorSet}
100
110
  {...aria}
101
111
  >
102
- {loadIndicator}
103
- <img
104
- alt={alt ?? src}
105
- src={src}
106
- loading="lazy"
107
- crossOrigin="anonymous"
108
- className={classNames(
109
- classes.media,
110
- "pointer-events-none w-full h-full",
111
- fit && `object-${fit}`,
112
- )}
113
- onLoad={(e) => {
114
- e.currentTarget.previousElementSibling?.remove();
115
- setColorSet(getImageColorset(e.currentTarget));
116
- }}
117
- />
112
+ {!loaded && !errored && loadIndicator}
113
+ {!errored && (
114
+ <img
115
+ alt={alt ?? src}
116
+ src={src}
117
+ loading="lazy"
118
+ crossOrigin="anonymous"
119
+ className={classNames(
120
+ "fabric-media",
121
+ "pointer-events-none w-full h-full",
122
+ cover[fit],
123
+ )}
124
+ onLoad={(e) => {
125
+ setLoaded(true);
126
+ setColorSet(getImageColorset(e.currentTarget));
127
+ }}
128
+ onError={() => setErrored(true)}
129
+ />
130
+ )}
131
+ {errored && (
132
+ <Icon
133
+ size="2rem"
134
+ className="absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
135
+ icon={CoreIcons.mediaImageBroken}
136
+ />
137
+ )}
118
138
  </div>
119
139
  );
120
140
  };
@@ -130,17 +150,27 @@ export const Video = ({
130
150
  ...aria
131
151
  }: VideoProps) => {
132
152
  const videoRef = useRef<HTMLVideoElement>(null);
153
+ const [loaded, setLoaded] = useState(false);
154
+ const [errored, setErrored] = useState(false);
155
+ useEffect(() => {
156
+ setLoaded(false);
157
+ setErrored(false);
158
+ }, [src]);
133
159
 
134
160
  const [state, setState] = useState(true);
135
161
  const [volume, setVolume] = useState(false);
136
162
 
163
+ useEffect(() => {
164
+ setErrored(false);
165
+ }, [src]);
166
+
137
167
  return (
138
168
  <div
139
169
  data-ref="video"
140
170
  className={classNames(
141
- classes.mediaContainer,
142
- "relative overflow-hidden bg-gray inline-block",
143
- reel && classes.mediaReel,
171
+ "fabric-mediaContainer",
172
+ "relative overflow-hidden inline-block",
173
+ reel && "fabric-mediaReel",
144
174
  className,
145
175
  )}
146
176
  onMouseEnter={() => {
@@ -151,74 +181,79 @@ export const Video = ({
151
181
  }}
152
182
  {...aria}
153
183
  >
154
- <div
155
- className={classNames(
156
- classes.mediaPlaceholder,
157
- "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-5xl animate-pulse",
158
- )}
159
- >
160
- ●●●
161
- </div>
162
- <video
163
- loop
164
- ref={videoRef}
165
- controls={false}
166
- poster={poster}
167
- autoPlay={autoPlay}
168
- className={classNames(
169
- classes.media,
170
- "pointer-events-none w-full h-full",
171
- fit && `object-${fit}`,
172
- )}
173
- onPlay={() => setState(true)}
174
- onPause={() => setState(false)}
175
- onVolumeChange={(e) => setVolume(!!e.currentTarget.volume)}
176
- onLoadedData={(e) => {
177
- e.currentTarget.volume = 0;
178
- e.currentTarget.previousElementSibling?.remove();
179
- }}
180
- >
181
- <source src={src} />
182
- <track kind="captions" />
183
- </video>
184
- <div
185
- data-inner-clickable
186
- className={classNames(
187
- classes.mediaControls,
188
- "absolute bottom-6 end-6 rounded-full flex flex-col",
189
- )}
190
- >
191
- <Button
192
- rounded
193
- variant="link"
194
- className={classes.mediaControlPlaceholder}
195
- icon={CoreIcons.ellipsis}
196
- aria-label="controls"
197
- />
198
- <Button
199
- rounded
200
- variant="link"
201
- aria-label="controls"
202
- className={classes.mediaControlAction}
203
- onClick={() => {
204
- videoRef.current &&
205
- (videoRef.current.volume = videoRef.current.volume ? 0 : 1);
206
- }}
207
- icon={volume ? CoreIcons.volumeOn : CoreIcons.volumeOff}
208
- />
209
- <Button
210
- rounded
211
- variant="link"
212
- aria-label="controls"
213
- className={classes.mediaControlAction}
214
- onClick={() => {
215
- videoRef.current?.paused
216
- ? videoRef.current?.play()
217
- : videoRef.current?.pause();
218
- }}
219
- icon={state ? CoreIcons.pause : CoreIcons.play}
184
+ {!loaded && !errored && loadIndicator}
185
+ {!errored && (
186
+ <Fragment>
187
+ <video
188
+ loop
189
+ ref={videoRef}
190
+ controls={false}
191
+ poster={poster}
192
+ autoPlay={autoPlay}
193
+ className={classNames(
194
+ "fabric-media",
195
+ "pointer-events-none w-full h-full",
196
+ fit && `object-${fit}`,
197
+ )}
198
+ onPlay={() => setState(true)}
199
+ onPause={() => setState(false)}
200
+ onVolumeChange={(e) => setVolume(!!e.currentTarget.volume)}
201
+ onLoadedData={(e) => {
202
+ e.currentTarget.volume = 0;
203
+ setLoaded(true);
204
+ }}
205
+ onError={() => setErrored(true)}
206
+ >
207
+ <source src={src} />
208
+ <track kind="captions" />
209
+ </video>
210
+ <div
211
+ data-inner-clickable
212
+ className={classNames(
213
+ "fabric-mediaControls",
214
+ "absolute bottom-6 end-6 rounded-full flex flex-col",
215
+ )}
216
+ >
217
+ <Button
218
+ rounded
219
+ variant="link"
220
+ className={"fabric-mediaControlPlaceholder"}
221
+ icon={CoreIcons.ellipsis}
222
+ aria-label="controls"
223
+ />
224
+ <Button
225
+ rounded
226
+ variant="link"
227
+ aria-label="controls"
228
+ className={"fabric-mediaControlAction"}
229
+ onClick={() => {
230
+ videoRef.current &&
231
+ (videoRef.current.volume = videoRef.current.volume ? 0 : 1);
232
+ }}
233
+ icon={volume ? CoreIcons.volumeOn : CoreIcons.volumeOff}
234
+ />
235
+ <Button
236
+ rounded
237
+ variant="link"
238
+ aria-label="controls"
239
+ className={"fabric-mediaControlAction"}
240
+ onClick={() => {
241
+ videoRef.current?.paused
242
+ ? videoRef.current?.play()
243
+ : videoRef.current?.pause();
244
+ }}
245
+ icon={state ? CoreIcons.pause : CoreIcons.play}
246
+ />
247
+ </div>
248
+ </Fragment>
249
+ )}
250
+ {errored && (
251
+ <Icon
252
+ size="2rem"
253
+ className="absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
254
+ icon={CoreIcons.mediaVideoBroken}
220
255
  />
221
- </div>
256
+ )}
222
257
  </div>
223
258
  );
224
259
  };
@@ -29,30 +29,41 @@ import {
29
29
  useClick,
30
30
  useDismiss,
31
31
  useFloating,
32
+ useFloatingNodeId,
32
33
  useInteractions,
33
34
  } from "@floating-ui/react";
34
- import { cloneElement, useRef, useState } from "react";
35
+ import { cloneElement, useEffect, useRef, useState } from "react";
35
36
  import { type ChildrenProp } from "../../types";
36
37
  import { type Menu } from "./Menu";
37
38
 
38
39
  export interface ContextMenuProps extends ChildrenProp {
39
40
  menu: React.ReactElement<typeof Menu>;
41
+
42
+ disabled?: boolean;
40
43
  }
41
44
 
42
- export const ContextMenu = ({ children, menu }: ContextMenuProps) => {
45
+ export const ContextMenu = ({ children, menu, disabled }: ContextMenuProps) => {
43
46
  const [isOpen, setIsOpen] = useState(false);
47
+ const nodeId = useFloatingNodeId();
44
48
 
45
49
  const { refs, floatingStyles, context } = useFloating({
46
50
  open: isOpen,
47
- onOpenChange: setIsOpen,
51
+ nodeId,
52
+ onOpenChange: (open, evt, reason) => {
53
+ const target = evt?.target as HTMLElement;
54
+ if (!target?.closest(".menu-list")) setIsOpen(open);
55
+ },
48
56
  strategy: "fixed",
49
57
  placement: "bottom-start",
50
58
  whileElementsMounted: autoUpdate,
51
59
  middleware: [offset(8), flip()],
52
60
  });
53
61
 
54
- const click = useClick(context, {});
55
- const dismiss = useDismiss(context, {});
62
+ const click = useClick(context, {
63
+ toggle: true,
64
+ ignoreMouse: true,
65
+ });
66
+ const dismiss = useDismiss(context, { bubbles: true });
56
67
 
57
68
  const { getFloatingProps } = useInteractions([dismiss, click]);
58
69
 
@@ -78,10 +89,19 @@ export const ContextMenu = ({ children, menu }: ContextMenuProps) => {
78
89
  return false;
79
90
  });
80
91
 
81
- const wrapperRef = useRef((el: HTMLElement) => {
82
- el?.parentElement?.removeEventListener("contextmenu", handleClick.current);
83
- el?.parentElement?.addEventListener("contextmenu", handleClick.current);
84
- });
92
+ const wrapperRef = useRef<HTMLDivElement>(null);
93
+ useEffect(() => {
94
+ const el = wrapperRef.current;
95
+ if (el && !disabled) {
96
+ el?.parentElement?.addEventListener("contextmenu", handleClick.current);
97
+ return () => {
98
+ el?.parentElement?.removeEventListener(
99
+ "contextmenu",
100
+ handleClick.current,
101
+ );
102
+ };
103
+ }
104
+ }, [disabled]);
85
105
 
86
106
  const tryClosing = useRef((e: React.MouseEvent) => {
87
107
  if ((e.target as HTMLElement)?.closest("[data-dropdown-dismiss='true']"))
@@ -91,12 +111,17 @@ export const ContextMenu = ({ children, menu }: ContextMenuProps) => {
91
111
  return (
92
112
  <div
93
113
  className="contents"
94
- ref={wrapperRef.current as AnyObject}
114
+ ref={wrapperRef}
95
115
  onMouseUpCapture={tryClosing.current}
96
116
  >
97
117
  {children}
98
118
  {isOpen && (
99
- <FloatingPortal>
119
+ <FloatingPortal
120
+ root={
121
+ refs.domReference.current?.closest<HTMLElement>(".theme-base") ??
122
+ undefined
123
+ }
124
+ >
100
125
  {cloneElement(menu as AnyObject, {
101
126
  ...getFloatingProps(),
102
127
  style: {