@react-fabric/core 1.0.0-beta.6 → 1.0.0-beta.60

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 (425) 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} +52 -47
  7. package/{src/components/button/Button.module.css → css/components/_button.css} +77 -83
  8. package/{src/components/card/Card.module.css → css/components/_card.css} +54 -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} +11 -8
  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} +21 -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} +8 -8
  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/css/components/_stepper.css +86 -0
  23. package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +130 -85
  24. package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
  25. package/css/components/_tooltip.css +29 -0
  26. package/{src/core/content/Content.module.css → css/components/index.css} +26 -18
  27. package/{src/core/aside/Aside.module.css → css/core/_aside.css} +60 -48
  28. package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
  29. package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
  30. package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
  31. package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
  32. package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
  33. package/css/core/_section.css +28 -0
  34. package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
  35. package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
  36. package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
  37. package/css/core/index.css +33 -0
  38. package/css/reset/_gradients.css +8 -8
  39. package/css/reset/_reset.css +56 -224
  40. package/css/reset/_text.css +14 -29
  41. package/css/reset/_theme.css +331 -52
  42. package/css/reset/index.css +4 -4
  43. package/css/styles.css +7 -6
  44. package/css/theme/_colors.css +320 -0
  45. package/css/theme/_utilities.css +541 -0
  46. package/css/theme/index.css +45 -0
  47. package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
  48. package/dist/cjs/components/animations/Animations.js +110 -23
  49. package/dist/cjs/components/avatar/Avatar.js +46 -13
  50. package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
  51. package/dist/cjs/components/badge/Badge.js +36 -15
  52. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +40 -9
  53. package/dist/cjs/components/button/Button.js +50 -28
  54. package/dist/cjs/components/button/ButtonGroup.js +30 -3
  55. package/dist/cjs/components/button/ConfirmButton.js +28 -2
  56. package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
  57. package/dist/cjs/components/callout/Callout.js +44 -4
  58. package/dist/cjs/components/card/Card.js +60 -18
  59. package/dist/cjs/components/card/CardCover.js +36 -5
  60. package/dist/cjs/components/card/FlipContent.js +56 -0
  61. package/dist/cjs/components/chip/Chip.js +40 -20
  62. package/dist/cjs/components/collapsable/Collapsable.js +30 -5
  63. package/dist/cjs/components/divider/Divider.js +30 -7
  64. package/dist/cjs/components/dropdown/Dropdown.js +48 -9
  65. package/dist/cjs/components/dropdown/DropdownTool.js +1 -1
  66. package/dist/cjs/components/empty/EmptyContent.js +37 -7
  67. package/dist/cjs/components/icon/Icon.js +76 -13
  68. package/dist/cjs/components/media/Media.js +172 -75
  69. package/dist/cjs/components/menu/ContextMenu.js +19 -0
  70. package/dist/cjs/components/menu/Menu.js +76 -21
  71. package/dist/cjs/components/menu/MenuItem.js +54 -26
  72. package/dist/cjs/components/meter/Meter.js +26 -3
  73. package/dist/cjs/components/navigator/Navigator.js +48 -15
  74. package/dist/cjs/components/panel/Panel.js +53 -22
  75. package/dist/cjs/components/panel/PanelGroup.js +25 -2
  76. package/dist/cjs/components/panel/PanelStack.js +31 -2
  77. package/dist/cjs/components/progress/ProgressBar.js +31 -9
  78. package/dist/cjs/components/progress/ProgressCircle.js +29 -7
  79. package/dist/cjs/components/tabpanel/Tab.js +39 -15
  80. package/dist/cjs/components/tabpanel/TabPanel.js +56 -16
  81. package/dist/cjs/context/Global.js +28 -1
  82. package/dist/cjs/context/NotificationCenter.js +3 -3
  83. package/dist/cjs/core/aside/Aside.js +48 -22
  84. package/dist/cjs/core/boundary/ErrorBoundary.js +25 -8
  85. package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
  86. package/dist/cjs/core/content/Content.js +7 -3
  87. package/dist/cjs/core/headfoot/HeadFoot.js +48 -22
  88. package/dist/cjs/core/page/Page.js +40 -39
  89. package/dist/cjs/core/responsive/Responsive.js +59 -6
  90. package/dist/cjs/core/section/Section.js +12 -29
  91. package/dist/cjs/core/theme/ThemeProvider.js +32 -10
  92. package/dist/cjs/core/viewport/Viewport.js +18 -2
  93. package/dist/cjs/hooks/useControlledValue.js +12 -0
  94. package/dist/cjs/hooks/useDebounce.js +14 -1
  95. package/dist/cjs/hooks/useEffectDebugger.js +54 -2
  96. package/dist/cjs/hooks/useIsDark.js +8 -0
  97. package/dist/cjs/hooks/useIsRtl.js +12 -0
  98. package/dist/cjs/hooks/useNavigator.js +6 -4
  99. package/dist/cjs/hooks/useOverlayService.js +24 -0
  100. package/dist/cjs/hooks/usePropToggle.js +16 -5
  101. package/dist/cjs/hooks/useResize.js +18 -0
  102. package/dist/cjs/hooks/useResizeObserver.js +20 -1
  103. package/dist/cjs/hooks/useStepper.js +75 -0
  104. package/dist/cjs/hooks/useStorage.js +39 -0
  105. package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
  106. package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
  107. package/dist/cjs/index.js +11 -2
  108. package/dist/cjs/overlays/alert/Alert.js +23 -15
  109. package/dist/cjs/overlays/flyout/Flyout.js +48 -64
  110. package/dist/cjs/overlays/message/Message.js +8 -3
  111. package/dist/cjs/overlays/modal/Modal.js +17 -20
  112. package/dist/cjs/overlays/toast/Toast.js +20 -10
  113. package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
  114. package/dist/cjs/types/icons.js +17 -4
  115. package/dist/cjs/typography/Abbr.js +35 -7
  116. package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
  117. package/dist/cjs/typography/Mark.js +25 -5
  118. package/dist/cjs/typography/Text.js +30 -5
  119. package/dist/cjs/typography/Title.js +19 -4
  120. package/dist/cjs/utils/cloneElement.js +47 -0
  121. package/dist/cjs/utils/getColor.js +1 -18
  122. package/dist/esm/components/actionLabel/ActionLabel.js +26 -8
  123. package/dist/esm/components/animations/Animations.js +111 -24
  124. package/dist/esm/components/avatar/Avatar.js +46 -13
  125. package/dist/esm/components/avatar/AvatarGroup.js +22 -4
  126. package/dist/esm/components/badge/Badge.js +38 -17
  127. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +40 -9
  128. package/dist/esm/components/button/Button.js +52 -30
  129. package/dist/esm/components/button/ButtonGroup.js +31 -4
  130. package/dist/esm/components/button/ConfirmButton.js +28 -2
  131. package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
  132. package/dist/esm/components/callout/Callout.js +44 -4
  133. package/dist/esm/components/card/Card.js +61 -19
  134. package/dist/esm/components/card/CardCover.js +36 -5
  135. package/dist/esm/components/card/FlipContent.js +56 -0
  136. package/dist/esm/components/chip/Chip.js +42 -22
  137. package/dist/esm/components/collapsable/Collapsable.js +30 -5
  138. package/dist/esm/components/divider/Divider.js +31 -8
  139. package/dist/esm/components/dropdown/Dropdown.js +48 -9
  140. package/dist/esm/components/dropdown/DropdownTool.js +1 -1
  141. package/dist/esm/components/empty/EmptyContent.js +37 -7
  142. package/dist/esm/components/icon/Icon.js +78 -16
  143. package/dist/esm/components/media/Media.js +173 -76
  144. package/dist/esm/components/menu/ContextMenu.js +19 -0
  145. package/dist/esm/components/menu/Menu.js +78 -23
  146. package/dist/esm/components/menu/MenuItem.js +49 -21
  147. package/dist/esm/components/meter/Meter.js +26 -3
  148. package/dist/esm/components/navigator/Navigator.js +48 -15
  149. package/dist/esm/components/panel/Panel.js +54 -23
  150. package/dist/esm/components/panel/PanelGroup.js +25 -2
  151. package/dist/esm/components/panel/PanelStack.js +31 -2
  152. package/dist/esm/components/progress/ProgressBar.js +31 -9
  153. package/dist/esm/components/progress/ProgressCircle.js +29 -7
  154. package/dist/esm/components/tabpanel/Tab.js +40 -16
  155. package/dist/esm/components/tabpanel/TabPanel.js +56 -16
  156. package/dist/esm/context/Global.js +28 -1
  157. package/dist/esm/context/NotificationCenter.js +3 -3
  158. package/dist/esm/core/aside/Aside.js +49 -23
  159. package/dist/esm/core/boundary/ErrorBoundary.js +25 -8
  160. package/dist/esm/core/boundary/ErrorIcon.js +1 -2
  161. package/dist/esm/core/content/Content.js +7 -3
  162. package/dist/esm/core/headfoot/HeadFoot.js +48 -22
  163. package/dist/esm/core/page/Page.js +41 -40
  164. package/dist/esm/core/responsive/Responsive.js +59 -6
  165. package/dist/esm/core/section/Section.js +12 -29
  166. package/dist/esm/core/theme/ThemeProvider.js +32 -10
  167. package/dist/esm/core/viewport/Viewport.js +18 -2
  168. package/dist/esm/hooks/useControlledValue.js +12 -0
  169. package/dist/esm/hooks/useDebounce.js +14 -1
  170. package/dist/esm/hooks/useEffectDebugger.js +54 -2
  171. package/dist/esm/hooks/useIsDark.js +8 -0
  172. package/dist/esm/hooks/useIsRtl.js +12 -0
  173. package/dist/esm/hooks/useNavigator.js +7 -5
  174. package/dist/esm/hooks/useOverlayService.js +24 -0
  175. package/dist/esm/hooks/usePropToggle.js +16 -5
  176. package/dist/esm/hooks/useResize.js +18 -0
  177. package/dist/esm/hooks/useResizeObserver.js +20 -1
  178. package/dist/esm/hooks/useStepper.js +75 -0
  179. package/dist/esm/hooks/useStorage.js +39 -0
  180. package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
  181. package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
  182. package/dist/esm/index.js +6 -2
  183. package/dist/esm/overlays/alert/Alert.js +24 -16
  184. package/dist/esm/overlays/flyout/Flyout.js +52 -68
  185. package/dist/esm/overlays/message/Message.js +9 -4
  186. package/dist/esm/overlays/modal/Modal.js +19 -22
  187. package/dist/esm/overlays/toast/Toast.js +21 -11
  188. package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
  189. package/dist/esm/types/icons.js +17 -4
  190. package/dist/esm/typography/Abbr.js +35 -7
  191. package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
  192. package/dist/esm/typography/Mark.js +25 -5
  193. package/dist/esm/typography/Text.js +31 -6
  194. package/dist/esm/typography/Title.js +20 -5
  195. package/dist/esm/utils/cloneElement.js +47 -0
  196. package/dist/esm/utils/getColor.js +2 -16
  197. package/dist/types/components/actionLabel/ActionLabel.d.ts +21 -2
  198. package/dist/types/components/animations/Animations.d.ts +84 -5
  199. package/dist/types/components/avatar/Avatar.d.ts +34 -6
  200. package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
  201. package/dist/types/components/badge/Badge.d.ts +37 -3
  202. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
  203. package/dist/types/components/button/Button.d.ts +39 -7
  204. package/dist/types/components/button/ButtonGroup.d.ts +28 -3
  205. package/dist/types/components/button/ConfirmButton.d.ts +23 -3
  206. package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
  207. package/dist/types/components/callout/Callout.d.ts +29 -3
  208. package/dist/types/components/card/Card.d.ts +44 -4
  209. package/dist/types/components/card/CardCover.d.ts +25 -0
  210. package/dist/types/components/card/FlipContent.d.ts +28 -0
  211. package/dist/types/components/chip/Chip.d.ts +34 -5
  212. package/dist/types/components/collapsable/Collapsable.d.ts +28 -2
  213. package/dist/types/components/divider/Divider.d.ts +30 -7
  214. package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
  215. package/dist/types/components/dropdown/DropdownTool.d.ts +25 -0
  216. package/dist/types/components/empty/EmptyContent.d.ts +32 -3
  217. package/dist/types/components/icon/Icon.d.ts +40 -8
  218. package/dist/types/components/index.d.ts +3 -2
  219. package/dist/types/components/media/Media.d.ts +54 -0
  220. package/dist/types/components/menu/ContextMenu.d.ts +19 -1
  221. package/dist/types/components/menu/Menu.d.ts +29 -0
  222. package/dist/types/components/menu/MenuItem.d.ts +22 -2
  223. package/dist/types/components/menu/types.d.ts +9 -3
  224. package/dist/types/components/meter/Meter.d.ts +24 -0
  225. package/dist/types/components/navigator/Navigator.d.ts +29 -4
  226. package/dist/types/components/panel/Panel.d.ts +43 -4
  227. package/dist/types/components/panel/PanelGroup.d.ts +24 -0
  228. package/dist/types/components/panel/PanelStack.d.ts +31 -0
  229. package/dist/types/components/progress/ProgressBar.d.ts +23 -3
  230. package/dist/types/components/progress/ProgressCircle.d.ts +22 -3
  231. package/dist/types/components/tabpanel/Tab.d.ts +38 -4
  232. package/dist/types/components/tabpanel/TabPanel.d.ts +51 -2
  233. package/dist/types/context/Global.d.ts +24 -1
  234. package/dist/types/core/aside/Aside.d.ts +45 -6
  235. package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
  236. package/dist/types/core/content/Content.d.ts +6 -1
  237. package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
  238. package/dist/types/core/page/Page.d.ts +32 -4
  239. package/dist/types/core/responsive/Responsive.d.ts +58 -3
  240. package/dist/types/core/section/Section.d.ts +18 -3
  241. package/dist/types/core/theme/ThemeProvider.d.ts +25 -5
  242. package/dist/types/core/viewport/Viewport.d.ts +15 -1
  243. package/dist/types/hooks/useControlledValue.d.ts +13 -2
  244. package/dist/types/hooks/useDebounce.d.ts +12 -0
  245. package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
  246. package/dist/types/hooks/useIsDark.d.ts +8 -0
  247. package/dist/types/hooks/useIsRtl.d.ts +12 -0
  248. package/dist/types/hooks/useNavigator.d.ts +18 -1
  249. package/dist/types/hooks/useOverlayService.d.ts +28 -9
  250. package/dist/types/hooks/usePropToggle.d.ts +16 -5
  251. package/dist/types/hooks/useResize.d.ts +19 -1
  252. package/dist/types/hooks/useResizeObserver.d.ts +20 -1
  253. package/dist/types/hooks/useStepper.d.ts +14 -0
  254. package/dist/types/hooks/useStorage.d.ts +38 -0
  255. package/dist/types/index.d.ts +4 -0
  256. package/dist/types/overlays/alert/Alert.d.ts +16 -5
  257. package/dist/types/overlays/flyout/Flyout.d.ts +9 -4
  258. package/dist/types/overlays/message/Message.d.ts +16 -5
  259. package/dist/types/overlays/modal/Modal.d.ts +13 -4
  260. package/dist/types/overlays/toast/Toast.d.ts +16 -5
  261. package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
  262. package/dist/types/types/icons.d.ts +17 -3
  263. package/dist/types/types/index.d.ts +20 -22
  264. package/dist/types/typography/Abbr.d.ts +34 -4
  265. package/dist/types/typography/Anchor.d.ts +42 -0
  266. package/dist/types/typography/Copy.d.ts +15 -0
  267. package/dist/types/typography/Mark.d.ts +22 -4
  268. package/dist/types/typography/Text.d.ts +27 -1
  269. package/dist/types/typography/Title.d.ts +16 -1
  270. package/dist/types/typography/index.d.ts +1 -1
  271. package/dist/types/utils/cloneElement.d.ts +1 -0
  272. package/dist/types/utils/getColor.d.ts +1 -4
  273. package/dist/types/utils/index.d.ts +1 -0
  274. package/package.json +14 -16
  275. package/src/components/actionLabel/ActionLabel.tsx +26 -8
  276. package/src/components/animations/Animations.tsx +115 -36
  277. package/src/components/avatar/Avatar.tsx +51 -15
  278. package/src/components/avatar/AvatarGroup.tsx +23 -5
  279. package/src/components/badge/Badge.tsx +50 -22
  280. package/src/components/breadcrumbs/Breadcrumbs.tsx +43 -10
  281. package/src/components/button/Button.tsx +74 -42
  282. package/src/components/button/ButtonGroup.tsx +33 -7
  283. package/src/components/button/ConfirmButton.tsx +31 -3
  284. package/src/components/button/ToggleButtonGroup.tsx +74 -47
  285. package/src/components/callout/Callout.tsx +55 -12
  286. package/src/components/card/Card.tsx +84 -25
  287. package/src/components/card/CardCover.tsx +36 -6
  288. package/src/components/card/FlipContent.tsx +90 -0
  289. package/src/components/chip/Chip.tsx +53 -25
  290. package/src/components/collapsable/Collapsable.tsx +33 -8
  291. package/src/components/divider/Divider.tsx +42 -16
  292. package/src/components/dropdown/Dropdown.tsx +47 -12
  293. package/src/components/dropdown/DropdownTool.tsx +27 -2
  294. package/src/components/empty/EmptyContent.tsx +49 -8
  295. package/src/components/icon/Icon.tsx +96 -18
  296. package/src/components/index.ts +3 -2
  297. package/src/components/media/Media.tsx +193 -104
  298. package/src/components/menu/ContextMenu.tsx +19 -0
  299. package/src/components/menu/Menu.tsx +87 -30
  300. package/src/components/menu/MenuItem.tsx +44 -19
  301. package/src/components/menu/types.ts +9 -8
  302. package/src/components/meter/Meter.tsx +27 -4
  303. package/src/components/navigator/Navigator.tsx +58 -9
  304. package/src/components/panel/Panel.tsx +53 -21
  305. package/src/components/panel/PanelGroup.tsx +25 -2
  306. package/src/components/panel/PanelStack.tsx +33 -2
  307. package/src/components/progress/ProgressBar.tsx +33 -14
  308. package/src/components/progress/ProgressCircle.tsx +29 -13
  309. package/src/components/tabpanel/Tab.tsx +47 -24
  310. package/src/components/tabpanel/TabPanel.tsx +79 -13
  311. package/src/context/Global.tsx +28 -1
  312. package/src/context/NotificationCenter.tsx +3 -3
  313. package/src/core/aside/Aside.tsx +56 -34
  314. package/src/core/boundary/ErrorBoundary.tsx +26 -8
  315. package/src/core/boundary/ErrorIcon.tsx +1 -2
  316. package/src/core/content/Content.tsx +7 -3
  317. package/src/core/headfoot/HeadFoot.tsx +44 -37
  318. package/src/core/page/Page.tsx +42 -20
  319. package/src/core/responsive/Responsive.tsx +66 -8
  320. package/src/core/section/Section.tsx +26 -4
  321. package/src/core/theme/ThemeProvider.tsx +35 -14
  322. package/src/core/viewport/Viewport.tsx +16 -3
  323. package/src/hooks/useControlledValue.tsx +12 -0
  324. package/src/hooks/useDebounce.ts +13 -1
  325. package/src/hooks/useEffectDebugger.ts +50 -2
  326. package/src/hooks/useIsDark.ts +8 -0
  327. package/src/hooks/useIsRtl.ts +12 -0
  328. package/src/hooks/useNavigator.tsx +28 -5
  329. package/src/hooks/useOverlayService.tsx +33 -8
  330. package/src/hooks/usePropToggle.ts +16 -5
  331. package/src/hooks/useResize.ts +19 -1
  332. package/src/hooks/useResizeObserver.ts +32 -9
  333. package/src/hooks/useStepper.tsx +68 -0
  334. package/src/hooks/useStorage.ts +38 -0
  335. package/src/hotkeys/HotKeyLabel.tsx +1 -1
  336. package/src/hotkeys/HotKeyWrapper.tsx +3 -1
  337. package/src/index.ts +5 -0
  338. package/src/overlays/alert/Alert.tsx +50 -34
  339. package/src/overlays/flyout/Flyout.tsx +73 -97
  340. package/src/overlays/message/Message.tsx +28 -9
  341. package/src/overlays/modal/Modal.tsx +36 -30
  342. package/src/overlays/toast/Toast.tsx +42 -30
  343. package/src/overlays/tooltip/Tooltip.tsx +43 -18
  344. package/src/types/global.d.ts +8 -0
  345. package/src/types/icons.ts +32 -6
  346. package/src/types/index.ts +261 -45
  347. package/src/typography/Abbr.tsx +45 -11
  348. package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
  349. package/src/typography/Copy.tsx +15 -0
  350. package/src/typography/Mark.tsx +25 -10
  351. package/src/typography/Text.tsx +31 -13
  352. package/src/typography/Title.tsx +18 -7
  353. package/src/typography/index.ts +1 -1
  354. package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
  355. package/src/utils/getColor.ts +1 -17
  356. package/src/utils/index.ts +1 -0
  357. package/css/index.js +0 -250
  358. package/css/tailwind/colors.ts +0 -158
  359. package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
  360. package/dist/cjs/components/animations/Animations.module.css +0 -1
  361. package/dist/cjs/components/avatar/Avatar.module.css +0 -1
  362. package/dist/cjs/components/badge/Badge.module.css +0 -1
  363. package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  364. package/dist/cjs/components/button/Button.module.css +0 -1
  365. package/dist/cjs/components/card/Card.module.css +0 -1
  366. package/dist/cjs/components/chip/Chip.module.css +0 -1
  367. package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
  368. package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
  369. package/dist/cjs/components/icon/Icon.module.css +0 -1
  370. package/dist/cjs/components/media/Media.module.css +0 -1
  371. package/dist/cjs/components/menu/Menu.module.css +0 -1
  372. package/dist/cjs/components/meter/Meter.module.css +0 -1
  373. package/dist/cjs/components/panel/Panel.module.css +0 -1
  374. package/dist/cjs/components/progress/Progress.module.css +0 -1
  375. package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
  376. package/dist/cjs/core/aside/Aside.module.css +0 -1
  377. package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
  378. package/dist/cjs/core/content/Content.module.css +0 -1
  379. package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
  380. package/dist/cjs/core/page/Page.module.css +0 -1
  381. package/dist/cjs/core/responsive/Responsive.module.css +0 -1
  382. package/dist/cjs/core/section/Section.module.css +0 -1
  383. package/dist/cjs/core/theme/Theme.module.css +0 -1
  384. package/dist/cjs/core/viewport/Viewport.module.css +0 -1
  385. package/dist/cjs/overlays/alert/Alert.module.css +0 -1
  386. package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
  387. package/dist/cjs/overlays/message/Message.module.css +0 -1
  388. package/dist/cjs/overlays/modal/Modal.module.css +0 -1
  389. package/dist/cjs/overlays/toast/Toast.module.css +0 -1
  390. package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
  391. package/dist/cjs/typography/Typography.module.css +0 -1
  392. package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
  393. package/dist/esm/components/animations/Animations.module.css +0 -1
  394. package/dist/esm/components/avatar/Avatar.module.css +0 -1
  395. package/dist/esm/components/badge/Badge.module.css +0 -1
  396. package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
  397. package/dist/esm/components/button/Button.module.css +0 -1
  398. package/dist/esm/components/card/Card.module.css +0 -1
  399. package/dist/esm/components/chip/Chip.module.css +0 -1
  400. package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
  401. package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
  402. package/dist/esm/components/icon/Icon.module.css +0 -1
  403. package/dist/esm/components/media/Media.module.css +0 -1
  404. package/dist/esm/components/menu/Menu.module.css +0 -1
  405. package/dist/esm/components/meter/Meter.module.css +0 -1
  406. package/dist/esm/components/panel/Panel.module.css +0 -1
  407. package/dist/esm/components/progress/Progress.module.css +0 -1
  408. package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
  409. package/dist/esm/core/aside/Aside.module.css +0 -1
  410. package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
  411. package/dist/esm/core/content/Content.module.css +0 -1
  412. package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
  413. package/dist/esm/core/page/Page.module.css +0 -1
  414. package/dist/esm/core/responsive/Responsive.module.css +0 -1
  415. package/dist/esm/core/section/Section.module.css +0 -1
  416. package/dist/esm/core/theme/Theme.module.css +0 -1
  417. package/dist/esm/core/viewport/Viewport.module.css +0 -1
  418. package/dist/esm/overlays/alert/Alert.module.css +0 -1
  419. package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
  420. package/dist/esm/overlays/message/Message.module.css +0 -1
  421. package/dist/esm/overlays/modal/Modal.module.css +0 -1
  422. package/dist/esm/overlays/toast/Toast.module.css +0 -1
  423. package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
  424. package/dist/esm/typography/Typography.module.css +0 -1
  425. package/dist/types/typography/Link.d.ts +0 -25
@@ -1,17 +1,30 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
5
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
6
  var utilities = require('@react-fabric/utilities');
6
7
  var classNames = require('classnames');
7
8
  var react = require('react');
8
- var getColor = require('../../utils/getColor.js');
9
- var Icon_module = require('./Icon.module.css');
10
9
  var jsxRuntime = require('react/jsx-runtime');
10
+ var getColor = require('../../utils/getColor.js');
11
11
 
12
- var _excluded = ["ref", "icon", "bg", "color", "size", "rtlFlip", "animate", "rounded", "viewBox", "className", "onClick"];
12
+ var _excluded = ["ref", "icon", "iconSrc", "bg", "color", "size", "rtlFlip", "animate", "rounded", "disabled", "viewBox", "className", "onClick"];
13
13
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ var getIconProps = function getIconProps(props) {
16
+ if (typeof props === "string") {
17
+ return {
18
+ icon: props
19
+ };
20
+ }
21
+ if ( /*#__PURE__*/react.isValidElement(props)) {
22
+ return {
23
+ icon: props
24
+ };
25
+ }
26
+ return props;
27
+ };
15
28
  var SvgTextSize = ["", ".875em", ".525em", ".35em", ".25em"];
16
29
  var SizeMap = {
17
30
  xs: "0.625rem",
@@ -22,11 +35,38 @@ var SizeMap = {
22
35
  };
23
36
 
24
37
  /**
25
- * An icon is a display component for svg icon path / image
38
+ * A versatile icon component that supports SVG paths, webfont icons, and text icons.
39
+ * It can be styled with background color, icon color, size, and animations.
40
+ * It also supports RTL flipping and rounded corners.
41
+ * The component can be used as a standalone icon or as part of other components.
42
+ * It accepts various properties to customize its appearance and behavior.
43
+ * These include `bg`, `color`, `size`, `rtlFlip`, `animate`, and `rounded`.
44
+ *
45
+ * @param {IconProps} props - The properties for the Icon component.
46
+ * @returns {JSX.Element} The rendered Icon component.
47
+ *
48
+ * @example
49
+ * ```jsx
50
+ * <Icon
51
+ * icon="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"
52
+ * bg="bg-blue-500"
53
+ * color="text-white"
54
+ * size="lg"
55
+ * rtlFlip={true}
56
+ * animate="spin"
57
+ * rounded={true}
58
+ * onClick={() => console.log("Icon clicked")}
59
+ * />
60
+ * // Renders an icon with a SVG path, blue background, white text color,
61
+ * // large size, RTL flip, spin animation, rounded corners, and a click handler.
62
+ * ```
63
+ *
64
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-icon--docs} for more details.
26
65
  */
27
66
  var Icon = function Icon(_ref) {
28
67
  var ref = _ref.ref,
29
68
  icon = _ref.icon,
69
+ iconSrc = _ref.iconSrc,
30
70
  bg = _ref.bg,
31
71
  color = _ref.color,
32
72
  _ref$size = _ref.size,
@@ -34,11 +74,20 @@ var Icon = function Icon(_ref) {
34
74
  rtlFlip = _ref.rtlFlip,
35
75
  animate = _ref.animate,
36
76
  rounded = _ref.rounded,
77
+ disabled = _ref.disabled,
37
78
  _ref$viewBox = _ref.viewBox,
38
79
  viewBox = _ref$viewBox === void 0 ? "0 0 24 24" : _ref$viewBox,
39
80
  className = _ref.className,
40
- onClick = _ref.onClick,
81
+ _onClick = _ref.onClick,
41
82
  rest = _objectWithoutProperties(_ref, _excluded);
83
+ var _useState = react.useState(false),
84
+ _useState2 = _slicedToArray(_useState, 2),
85
+ imageFailed = _useState2[0],
86
+ setImageFailed = _useState2[1];
87
+ react.useEffect(function () {
88
+ setImageFailed(false);
89
+ }, [iconSrc]);
90
+
42
91
  /** ***************** style map *******************/
43
92
  var styles = react.useMemo(function () {
44
93
  var s = {};
@@ -64,7 +113,7 @@ var Icon = function Icon(_ref) {
64
113
 
65
114
  /** ***************** render icon *******************/
66
115
  var iconEl = react.useMemo(function () {
67
- var _SvgTextSize$icon$len;
116
+ if ( /*#__PURE__*/react.isValidElement(icon)) return icon;
68
117
  if (!utilities.isString(icon)) {
69
118
  throw Error("Invalid icon expected string");
70
119
  }
@@ -83,7 +132,7 @@ var Icon = function Icon(_ref) {
83
132
  dominantBaseline: "middle",
84
133
  textAnchor: "middle",
85
134
  style: {
86
- fontSize: (_SvgTextSize$icon$len = SvgTextSize[icon.length]) !== null && _SvgTextSize$icon$len !== void 0 ? _SvgTextSize$icon$len : "1em"
135
+ fontSize: SvgTextSize[icon.length]
87
136
  },
88
137
  children: icon
89
138
  })
@@ -91,16 +140,30 @@ var Icon = function Icon(_ref) {
91
140
  className: "".concat(icon)
92
141
  });
93
142
  }, [icon, isSvg, viewBox]);
94
- return /*#__PURE__*/jsxRuntime.jsx("dfn", _objectSpread(_objectSpread({}, rest), {}, {
95
- ref: ref,
143
+ return /*#__PURE__*/jsxRuntime.jsxs("dfn", _objectSpread(_objectSpread({
144
+ "data-ref": "icon",
145
+ ref: ref
146
+ }, rest), {}, {
96
147
  role: "presentation",
97
- className: classNames(Icon_module.icon, className, "select-none overflow-hidden inline-block box-content leading-none not-italic text-center", bg && getColor.getBgClass(bg), color && getColor.getColorClass(color), !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate)),
98
- onClick: onClick,
148
+ className: classNames("fabric-icon", "select-none overflow-hidden box-content leading-none not-italic text-center", !rounded && "rounded", rounded && "rounded-full", animate && "animate-".concat(animate), !!_onClick && disabled && "opacity-30 pointer-events-none", className),
149
+ onClick: function onClick(e) {
150
+ _onClick && e.stopPropagation();
151
+ _onClick && e.preventDefault();
152
+ _onClick === null || _onClick === void 0 || _onClick(e);
153
+ },
99
154
  "data-flip": rtlFlip,
100
155
  style: styles,
101
- "data-clickable": !!onClick,
102
- children: iconEl
156
+ "data-clickable": !!_onClick,
157
+ "data-inner-clickable": !!_onClick,
158
+ children: [iconSrc && !imageFailed && /*#__PURE__*/jsxRuntime.jsx("img", {
159
+ src: iconSrc,
160
+ alt: "fallback icon",
161
+ onError: function onError() {
162
+ return setImageFailed(true);
163
+ }
164
+ }), (!iconSrc || imageFailed) && iconEl]
103
165
  }));
104
166
  };
105
167
 
106
168
  exports.Icon = Icon;
169
+ exports.getIconProps = getIconProps;
@@ -8,13 +8,47 @@ var classNames = require('classnames');
8
8
  var react = require('react');
9
9
  var icons = require('../../types/icons.js');
10
10
  var Button = require('../button/Button.js');
11
- var Media_module = require('./Media.module.css');
11
+ var Icon = require('../icon/Icon.js');
12
12
  var jsxRuntime = require('react/jsx-runtime');
13
13
 
14
14
  var _excluded = ["src", "alt", "reel", "fit", "className"],
15
15
  _excluded2 = ["src", "poster", "reel", "autoPlay", "playOnHover", "fit", "className"];
16
16
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
17
17
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
+ var cover = {
19
+ fill: "object-fill",
20
+ cover: "object-cover",
21
+ contain: "object-contain"
22
+ };
23
+ var loadIndicator = /*#__PURE__*/jsxRuntime.jsx("div", {
24
+ className: classNames("fabric-mediaPlaceholder", "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-4xl text-gray animate-pulse"),
25
+ children: "\u25CF\u25CF\u25CF"
26
+ });
27
+
28
+ /**
29
+ * Component for displaying images with optional reel decoration.
30
+ * A versatile media component that supports images and videos with various display options.
31
+ * It can display images with a reel decoration, handle loading states, and show error icons if the media fails to load.
32
+ * This component is useful for displaying images in a visually appealing way, with support for lazy loading and error handling.
33
+ * It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
34
+ *
35
+ * @param {ImageProps | VideoProps} props - The properties for the Media component.
36
+ * @returns {JSX.Element} The rendered Media component.
37
+ *
38
+ * @example
39
+ * ```jsx
40
+ * <Image
41
+ * src="image.jpg"
42
+ * alt="Example Image"
43
+ * reel={true}
44
+ * fit="cover"
45
+ * className="custom-class"
46
+ * />
47
+ * // Renders an image with reel decoration, cover fit, and a custom class name.
48
+ * ```
49
+ *
50
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-media--docs} for more details.
51
+ */
18
52
  var Image = function Image(_ref) {
19
53
  var src = _ref.src,
20
54
  alt = _ref.alt,
@@ -27,31 +61,74 @@ var Image = function Image(_ref) {
27
61
  _useState2 = _slicedToArray(_useState, 2),
28
62
  colorSet = _useState2[0],
29
63
  setColorSet = _useState2[1];
30
- var loadIndicator = react.useMemo(function () {
31
- return /*#__PURE__*/jsxRuntime.jsx("div", {
32
- className: classNames(Media_module.mediaPlaceholder, "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-4xl text-gray animate-pulse"),
33
- children: "\u25CF\u25CF\u25CF"
34
- });
64
+ var _useState3 = react.useState(false),
65
+ _useState4 = _slicedToArray(_useState3, 2),
66
+ loaded = _useState4[0],
67
+ setLoaded = _useState4[1];
68
+ var _useState5 = react.useState(false),
69
+ _useState6 = _slicedToArray(_useState5, 2),
70
+ errored = _useState6[0],
71
+ setErrored = _useState6[1];
72
+ react.useEffect(function () {
73
+ setLoaded(false);
74
+ setErrored(false);
35
75
  }, [src]);
36
76
  return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
37
77
  "data-ref": "image",
38
- className: classNames(Media_module.mediaContainer, "relative overflow-hidden bg-gray inline-block", reel && Media_module.mediaReel, className),
78
+ className: classNames("fabric-mediaContainer", "relative overflow-hidden inline-block", reel && "fabric-mediaReel", className),
39
79
  "data-colorset": colorSet
40
80
  }, aria), {}, {
41
- children: [loadIndicator, /*#__PURE__*/jsxRuntime.jsx("img", {
81
+ children: [!loaded && !errored && loadIndicator, !errored && /*#__PURE__*/jsxRuntime.jsx("img", {
42
82
  alt: alt !== null && alt !== void 0 ? alt : src,
43
83
  src: src,
44
84
  loading: "lazy",
45
85
  crossOrigin: "anonymous",
46
- className: classNames(Media_module.media, "pointer-events-none w-full h-full", fit && "object-".concat(fit)),
86
+ className: classNames("fabric-media", "pointer-events-none w-full h-full", cover[fit]),
47
87
  onLoad: function onLoad(e) {
48
- var _e$currentTarget$prev;
49
- (_e$currentTarget$prev = e.currentTarget.previousElementSibling) === null || _e$currentTarget$prev === void 0 || _e$currentTarget$prev.remove();
88
+ setLoaded(true);
50
89
  setColorSet(utilities.getImageColorset(e.currentTarget));
90
+ },
91
+ onError: function onError() {
92
+ return setErrored(true);
51
93
  }
94
+ }), errored && /*#__PURE__*/jsxRuntime.jsx(Icon.Icon, {
95
+ size: "2rem",
96
+ className: "absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",
97
+ icon: icons.CoreIcons.mediaImageBroken
52
98
  })]
53
99
  }));
54
100
  };
101
+
102
+ /**
103
+ * Component for displaying videos with optional controls and reel decoration.
104
+ * A versatile video component that supports autoplay, hover play, and various display options.
105
+ * It can display videos with a reel decoration, handle loading states, and show error icons if the video fails to load.
106
+ * This component is useful for displaying videos in a visually appealing way, with support for controls, autoplay, and error handling.
107
+ * It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
108
+ * It also includes controls for play/pause and volume, enhancing user interaction with the video content.
109
+ * This component is ideal for media-rich applications where video content needs to be displayed with user-friendly controls and visual effects.
110
+ * It supports features like autoplay, play on hover, and custom fit options for the video display.
111
+ * It also includes a reel decoration for a more engaging visual presentation.
112
+ *
113
+ * @param {VideoProps} props - The properties for the Video component.
114
+ * @returns {JSX.Element} The rendered Video component.
115
+ *
116
+ * @example
117
+ * ```jsx
118
+ * <Video
119
+ * src="video.mp4"
120
+ * poster="poster.jpg"
121
+ * reel={true}
122
+ * autoPlay={true}
123
+ * playOnHover={true}
124
+ * fit="cover"
125
+ * className="custom-class"
126
+ * />
127
+ * // Renders a video with reel decoration, autoplay, play on hover, cover fit, and a custom class name.
128
+ * ```
129
+ *
130
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-video--docs} for more details.
131
+ */
55
132
  var Video = function Video(_ref2) {
56
133
  var src = _ref2.src,
57
134
  poster = _ref2.poster,
@@ -63,17 +140,32 @@ var Video = function Video(_ref2) {
63
140
  className = _ref2.className,
64
141
  aria = _objectWithoutProperties(_ref2, _excluded2);
65
142
  var videoRef = react.useRef(null);
66
- var _useState3 = react.useState(true),
67
- _useState4 = _slicedToArray(_useState3, 2),
68
- state = _useState4[0],
69
- setState = _useState4[1];
70
- var _useState5 = react.useState(false),
71
- _useState6 = _slicedToArray(_useState5, 2),
72
- volume = _useState6[0],
73
- setVolume = _useState6[1];
143
+ var _useState7 = react.useState(false),
144
+ _useState8 = _slicedToArray(_useState7, 2),
145
+ loaded = _useState8[0],
146
+ setLoaded = _useState8[1];
147
+ var _useState9 = react.useState(false),
148
+ _useState10 = _slicedToArray(_useState9, 2),
149
+ errored = _useState10[0],
150
+ setErrored = _useState10[1];
151
+ react.useEffect(function () {
152
+ setLoaded(false);
153
+ setErrored(false);
154
+ }, [src]);
155
+ var _useState11 = react.useState(true),
156
+ _useState12 = _slicedToArray(_useState11, 2),
157
+ state = _useState12[0],
158
+ setState = _useState12[1];
159
+ var _useState13 = react.useState(false),
160
+ _useState14 = _slicedToArray(_useState13, 2),
161
+ volume = _useState14[0],
162
+ setVolume = _useState14[1];
163
+ react.useEffect(function () {
164
+ setErrored(false);
165
+ }, [src]);
74
166
  return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
75
167
  "data-ref": "video",
76
- className: classNames(Media_module.mediaContainer, "relative overflow-hidden bg-gray inline-block", reel && Media_module.mediaReel, className),
168
+ className: classNames("fabric-mediaContainer", "relative overflow-hidden inline-block", reel && "fabric-mediaReel", className),
77
169
  onMouseEnter: function onMouseEnter() {
78
170
  var _videoRef$current;
79
171
  playOnHover && ((_videoRef$current = videoRef.current) === null || _videoRef$current === void 0 ? void 0 : _videoRef$current.play());
@@ -83,64 +175,69 @@ var Video = function Video(_ref2) {
83
175
  playOnHover && ((_videoRef$current2 = videoRef.current) === null || _videoRef$current2 === void 0 ? void 0 : _videoRef$current2.pause());
84
176
  }
85
177
  }, aria), {}, {
86
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
87
- className: classNames(Media_module.mediaPlaceholder, "absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-5xl animate-pulse"),
88
- children: "\u25CF\u25CF\u25CF"
89
- }), /*#__PURE__*/jsxRuntime.jsxs("video", {
90
- loop: true,
91
- ref: videoRef,
92
- controls: false,
93
- poster: poster,
94
- autoPlay: autoPlay,
95
- className: classNames(Media_module.media, "pointer-events-none w-full h-full", fit && "object-".concat(fit)),
96
- onPlay: function onPlay() {
97
- return setState(true);
98
- },
99
- onPause: function onPause() {
100
- return setState(false);
101
- },
102
- onVolumeChange: function onVolumeChange(e) {
103
- return setVolume(!!e.currentTarget.volume);
104
- },
105
- onLoadedData: function onLoadedData(e) {
106
- var _e$currentTarget$prev2;
107
- e.currentTarget.volume = 0;
108
- (_e$currentTarget$prev2 = e.currentTarget.previousElementSibling) === null || _e$currentTarget$prev2 === void 0 || _e$currentTarget$prev2.remove();
109
- },
110
- children: [/*#__PURE__*/jsxRuntime.jsx("source", {
111
- src: src
112
- }), /*#__PURE__*/jsxRuntime.jsx("track", {
113
- kind: "captions"
114
- })]
115
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
116
- "data-inner-clickable": true,
117
- className: classNames(Media_module.mediaControls, "absolute bottom-6 end-6 rounded-full flex flex-col"),
118
- children: [/*#__PURE__*/jsxRuntime.jsx(Button.Button, {
119
- rounded: true,
120
- variant: "link",
121
- className: Media_module.mediaControlPlaceholder,
122
- icon: icons.CoreIcons.ellipsis,
123
- "aria-label": "controls"
124
- }), /*#__PURE__*/jsxRuntime.jsx(Button.Button, {
125
- rounded: true,
126
- variant: "link",
127
- "aria-label": "controls",
128
- className: Media_module.mediaControlAction,
129
- onClick: function onClick() {
130
- videoRef.current && (videoRef.current.volume = videoRef.current.volume ? 0 : 1);
178
+ children: [!loaded && !errored && loadIndicator, !errored && /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
179
+ children: [/*#__PURE__*/jsxRuntime.jsxs("video", {
180
+ loop: true,
181
+ ref: videoRef,
182
+ controls: false,
183
+ poster: poster,
184
+ autoPlay: autoPlay,
185
+ className: classNames("fabric-media", "pointer-events-none w-full h-full", fit && "object-".concat(fit)),
186
+ onPlay: function onPlay() {
187
+ return setState(true);
188
+ },
189
+ onPause: function onPause() {
190
+ return setState(false);
191
+ },
192
+ onVolumeChange: function onVolumeChange(e) {
193
+ return setVolume(!!e.currentTarget.volume);
194
+ },
195
+ onLoadedData: function onLoadedData(e) {
196
+ e.currentTarget.volume = 0;
197
+ setLoaded(true);
131
198
  },
132
- icon: volume ? icons.CoreIcons.volumeOn : icons.CoreIcons.volumeOff
133
- }), /*#__PURE__*/jsxRuntime.jsx(Button.Button, {
134
- rounded: true,
135
- variant: "link",
136
- "aria-label": "controls",
137
- className: Media_module.mediaControlAction,
138
- onClick: function onClick() {
139
- var _videoRef$current3, _videoRef$current4, _videoRef$current5;
140
- (_videoRef$current3 = videoRef.current) !== null && _videoRef$current3 !== void 0 && _videoRef$current3.paused ? (_videoRef$current4 = videoRef.current) === null || _videoRef$current4 === void 0 ? void 0 : _videoRef$current4.play() : (_videoRef$current5 = videoRef.current) === null || _videoRef$current5 === void 0 ? void 0 : _videoRef$current5.pause();
199
+ onError: function onError() {
200
+ return setErrored(true);
141
201
  },
142
- icon: state ? icons.CoreIcons.pause : icons.CoreIcons.play
202
+ children: [/*#__PURE__*/jsxRuntime.jsx("source", {
203
+ src: src
204
+ }), /*#__PURE__*/jsxRuntime.jsx("track", {
205
+ kind: "captions"
206
+ })]
207
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
208
+ "data-inner-clickable": true,
209
+ className: classNames("fabric-mediaControls", "absolute bottom-6 end-6 rounded-full flex flex-col"),
210
+ children: [/*#__PURE__*/jsxRuntime.jsx(Button.Button, {
211
+ rounded: true,
212
+ variant: "link",
213
+ className: "fabric-mediaControlPlaceholder",
214
+ icon: icons.CoreIcons.ellipsis,
215
+ "aria-label": "controls"
216
+ }), /*#__PURE__*/jsxRuntime.jsx(Button.Button, {
217
+ rounded: true,
218
+ variant: "link",
219
+ "aria-label": "controls",
220
+ className: "fabric-mediaControlAction",
221
+ onClick: function onClick() {
222
+ videoRef.current && (videoRef.current.volume = videoRef.current.volume ? 0 : 1);
223
+ },
224
+ icon: volume ? icons.CoreIcons.volumeOn : icons.CoreIcons.volumeOff
225
+ }), /*#__PURE__*/jsxRuntime.jsx(Button.Button, {
226
+ rounded: true,
227
+ variant: "link",
228
+ "aria-label": "controls",
229
+ className: "fabric-mediaControlAction",
230
+ onClick: function onClick() {
231
+ var _videoRef$current3, _videoRef$current4, _videoRef$current5;
232
+ (_videoRef$current3 = videoRef.current) !== null && _videoRef$current3 !== void 0 && _videoRef$current3.paused ? (_videoRef$current4 = videoRef.current) === null || _videoRef$current4 === void 0 ? void 0 : _videoRef$current4.play() : (_videoRef$current5 = videoRef.current) === null || _videoRef$current5 === void 0 ? void 0 : _videoRef$current5.pause();
233
+ },
234
+ icon: state ? icons.CoreIcons.pause : icons.CoreIcons.play
235
+ })]
143
236
  })]
237
+ }), errored && /*#__PURE__*/jsxRuntime.jsx(Icon.Icon, {
238
+ size: "2rem",
239
+ className: "absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",
240
+ icon: icons.CoreIcons.mediaVideoBroken
144
241
  })]
145
242
  }));
146
243
  };
@@ -8,6 +8,25 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
 
9
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
10
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ /**
12
+ * A component that provides a context menu that appears on right-click.
13
+ * It uses the Floating UI library to manage the positioning and interactions of the menu.
14
+ * This component is useful for creating custom context menus that can be triggered by right-clicking on elements.
15
+ *
16
+ * @param {ContextMenuProps} props - The properties for the ContextMenu component.
17
+ * @returns {JSX.Element} The rendered ContextMenu component.
18
+ *
19
+ * @example
20
+ * ```jsx
21
+ * <ContextMenu
22
+ * menu={<Menu items={[{ label: "Option 1" }, { label: "Option 2" }]} />}
23
+ * >
24
+ * <div className="context-menu-target">Right-click me!</div>
25
+ * </ContextMenu>
26
+ * ```
27
+ *
28
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs}
29
+ */
11
30
  var ContextMenu = function ContextMenu(_ref) {
12
31
  var _refs$domReference$cu, _refs$domReference$cu2;
13
32
  var children = _ref.children,
@@ -7,12 +7,14 @@ var react = require('@floating-ui/react');
7
7
  var utilities = require('@react-fabric/utilities');
8
8
  var classNames = require('classnames');
9
9
  var react$1 = require('react');
10
+ var HotKeyWrapper = require('../../hotkeys/HotKeyWrapper.js');
10
11
  var icons = require('../../types/icons.js');
12
+ var cloneElement = require('../../utils/cloneElement.js');
11
13
  var nodeCheck = require('../../utils/nodeCheck.js');
12
14
  var MenuItem = require('./MenuItem.js');
13
15
  var jsxRuntime = require('react/jsx-runtime');
14
16
 
15
- var _excluded = ["children", "minimal", "menuClassName", "onClick", "ref"];
17
+ var _excluded = ["children", "minimal", "menuClassName", "onClick", "trigger", "ref"];
16
18
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
17
19
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
18
20
  // FIXME: refactor menu implementation to differentiate between static and floating menus, implement context wrapper for each menu level
@@ -23,6 +25,8 @@ var MenuComponent = function MenuComponent(_ref) {
23
25
  minimal = _ref.minimal,
24
26
  menuClassName = _ref.menuClassName,
25
27
  onClick = _ref.onClick,
28
+ _ref$trigger = _ref.trigger,
29
+ trigger = _ref$trigger === void 0 ? "hover" : _ref$trigger,
26
30
  ref = _ref.ref,
27
31
  rest = _objectWithoutProperties(_ref, _excluded);
28
32
  var _useState = react$1.useState(false),
@@ -44,6 +48,7 @@ var MenuComponent = function MenuComponent(_ref) {
44
48
  open: !isNested || isOpen,
45
49
  onOpenChange: function onOpenChange(open, event, reason) {
46
50
  isNested && setIsOpen(open);
51
+ if (reason === "outside-press" && trigger === "click") tree === null || tree === void 0 || tree.events.emit("close");
47
52
  },
48
53
  placement: isNested ? "right-start" : "bottom-start",
49
54
  middleware: [react.offset({
@@ -56,6 +61,7 @@ var MenuComponent = function MenuComponent(_ref) {
56
61
  refs = _useFloating.refs,
57
62
  context = _useFloating.context;
58
63
  var hover = react.useHover(context, {
64
+ enabled: trigger === "hover",
59
65
  delay: {
60
66
  open: 75
61
67
  },
@@ -64,8 +70,9 @@ var MenuComponent = function MenuComponent(_ref) {
64
70
  })
65
71
  });
66
72
  var click = react.useClick(context, {
67
- toggle: true,
68
- ignoreMouse: true
73
+ event: "mousedown",
74
+ toggle: trigger === "click" || !isNested,
75
+ ignoreMouse: trigger === "hover" && !isNested
69
76
  });
70
77
  var role = react.useRole(context, {
71
78
  role: "menu"
@@ -137,6 +144,16 @@ var MenuComponent = function MenuComponent(_ref) {
137
144
  });
138
145
  }, 100);
139
146
  }, [isOpen]);
147
+ react$1.useEffect(function () {
148
+ if ((!isNested || isOpen) && activeIndex) {
149
+ setTimeout(function () {
150
+ var _elementsRef$current$;
151
+ (_elementsRef$current$ = elementsRef.current[activeIndex]) === null || _elementsRef$current$ === void 0 || _elementsRef$current$.scrollIntoView({
152
+ block: "nearest"
153
+ });
154
+ }, 100);
155
+ }
156
+ }, [isOpen, activeIndex]);
140
157
  return /*#__PURE__*/jsxRuntime.jsxs(react.FloatingNode, {
141
158
  id: nodeId,
142
159
  children: [isNested && /*#__PURE__*/jsxRuntime.jsx(MenuItem.MenuItem, _objectSpread(_objectSpread({}, getReferenceProps(_objectSpread(_objectSpread({}, rest), {}, {
@@ -155,21 +172,21 @@ var MenuComponent = function MenuComponent(_ref) {
155
172
  elementsRef: elementsRef,
156
173
  labelsRef: labelsRef,
157
174
  children: (!isNested || isOpen) && /*#__PURE__*/jsxRuntime.jsxs(Wrapper, _objectSpread(_objectSpread({}, wrapperProps), {}, {
158
- children: [isNested && /*#__PURE__*/jsxRuntime.jsx(react.FloatingOverlay, {}), /*#__PURE__*/jsxRuntime.jsx(react.FloatingFocusManager, {
159
- context: context,
160
- modal: !isNested,
161
- initialFocus: isNested ? -1 : 0,
162
- returnFocus: !isNested,
163
- children: /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
164
- className: classNames(menuClassName, "flex flex-col bg-base p-1 menu-list", isNested && "outline shadow-lg rounded-capped max-h-96 overflow-auto scroll-thin z-[var(--z-popover)]"),
165
- autoFocus: true,
166
- ref: utilities.mergeRefs(isNested ? refs.setFloating : ref)
167
- }, getFloatingProps({
168
- onClick: isNested ? undefined : handleClick
169
- })), {}, {
170
- style: !isNested ? rest.style : floatingStyles,
171
- children: react$1.Children.map(children, function (child, index) {
172
- if (child) {
175
+ children: [isNested && /*#__PURE__*/jsxRuntime.jsx(react.FloatingOverlay, {}), /*#__PURE__*/jsxRuntime.jsx(HotKeyWrapper.HotKeyWrapper, {
176
+ children: /*#__PURE__*/jsxRuntime.jsx(react.FloatingFocusManager, {
177
+ context: context,
178
+ modal: !isNested,
179
+ initialFocus: isNested ? -1 : 0,
180
+ returnFocus: !isNested,
181
+ children: /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread(_objectSpread({
182
+ className: classNames(menuClassName, "flex flex-col bg-base p-1 menu-list", isNested && "outline shadow-lg rounded-capped max-h-96 overflow-auto scroll-thin z-(--z-popover)"),
183
+ autoFocus: true,
184
+ ref: utilities.mergeRefs(isNested ? refs.setFloating : ref)
185
+ }, getFloatingProps({
186
+ onClick: isNested ? undefined : handleClick
187
+ })), {}, {
188
+ style: !isNested ? rest.style : floatingStyles,
189
+ children: cloneElement.cloneChildren(children, function (child, index) {
173
190
  labelsRef.current[index] = child.props.label;
174
191
  return /*#__PURE__*/react$1.cloneElement(child, nodeCheck.nodeCheck(child, MenuItem.MenuItem, Menu, MenuComponent) ? _objectSpread({
175
192
  minimal: !isNested && minimal,
@@ -181,19 +198,57 @@ var MenuComponent = function MenuComponent(_ref) {
181
198
  onClick: child.props.onClick,
182
199
  tabIndex: activeIndex === index ? 0 : -1
183
200
  })) : {});
184
- }
185
- })
186
- }))
201
+ })
202
+ }))
203
+ })
187
204
  })]
188
205
  }))
189
206
  })]
190
207
  });
191
208
  };
209
+
210
+ /**
211
+ * A component that displays a menu with items, supports nested menus and various interactions.
212
+ * It can be triggered by hover or click events, and allows for custom styling and behavior.
213
+ * This component is designed to be used within a Floating UI context, allowing for dynamic positioning and interaction handling.
214
+ * It can be nested within other menus to create complex menu structures.
215
+ *
216
+ * @param {MenuProps} props - The properties for the Menu component.
217
+ * @returns {JSX.Element} The rendered Menu component.
218
+ *
219
+ * @example
220
+ * ```jsx
221
+ * <Menu
222
+ * className="my-menu"
223
+ * trigger="click"
224
+ * onClick={(id) => console.log(`Clicked item with id: ${id}`)}
225
+ * >
226
+ * <MenuItem id="item1" label="Item 1" />
227
+ * <MenuItem id="item2" label="Item 2" />
228
+ * <MenuItem id="item3" label="Item 3">
229
+ * <Menu>
230
+ * <MenuItem id="subitem1" label="Sub Item 1" />
231
+ * <MenuItem id="subitem2" label="Sub Item 2" />
232
+ * </Menu>
233
+ * </MenuItem>
234
+ * </Menu>
235
+ * ```
236
+ *
237
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for more details.
238
+ */
192
239
  var Menu = function Menu(props) {
193
240
  var parentId = react.useFloatingParentNodeId();
241
+ var tree = react.useFloatingTree();
242
+ if (tree) {
243
+ return /*#__PURE__*/jsxRuntime.jsx(MenuComponent, _objectSpread(_objectSpread({}, props), {}, {
244
+ className: "",
245
+ menuClassName: props.className
246
+ }));
247
+ }
194
248
  if (parentId === null) {
195
249
  return /*#__PURE__*/jsxRuntime.jsx(react.FloatingTree, {
196
250
  children: /*#__PURE__*/jsxRuntime.jsx(MenuComponent, _objectSpread(_objectSpread({}, props), {}, {
251
+ className: "",
197
252
  menuClassName: props.className
198
253
  }))
199
254
  });