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

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 (248) hide show
  1. package/css/components/_breadcrumbs.css +3 -3
  2. package/css/components/_menu.css +2 -0
  3. package/css/components/_modal.css +2 -2
  4. package/css/core/_aside.css +2 -2
  5. package/css/theme/_utilities.css +2 -2
  6. package/dist/cjs/components/actionLabel/ActionLabel.js +23 -5
  7. package/dist/cjs/components/animations/Animations.js +92 -9
  8. package/dist/cjs/components/avatar/Avatar.js +33 -3
  9. package/dist/cjs/components/avatar/AvatarGroup.js +19 -1
  10. package/dist/cjs/components/badge/Badge.js +31 -2
  11. package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +30 -1
  12. package/dist/cjs/components/button/Button.js +25 -2
  13. package/dist/cjs/components/button/ButtonGroup.js +26 -0
  14. package/dist/cjs/components/button/ConfirmButton.js +22 -1
  15. package/dist/cjs/components/button/ToggleButtonGroup.js +38 -12
  16. package/dist/cjs/components/callout/Callout.js +28 -0
  17. package/dist/cjs/components/card/Card.js +34 -0
  18. package/dist/cjs/components/card/CardCover.js +26 -0
  19. package/dist/cjs/components/card/FlipContent.js +21 -0
  20. package/dist/cjs/components/chip/Chip.js +22 -1
  21. package/dist/cjs/components/collapsable/Collapsable.js +26 -0
  22. package/dist/cjs/components/divider/Divider.js +19 -0
  23. package/dist/cjs/components/dropdown/Dropdown.js +42 -0
  24. package/dist/cjs/components/empty/EmptyContent.js +27 -0
  25. package/dist/cjs/components/icon/Icon.js +27 -1
  26. package/dist/cjs/components/media/Media.js +56 -0
  27. package/dist/cjs/components/menu/ContextMenu.js +19 -0
  28. package/dist/cjs/components/menu/Menu.js +30 -0
  29. package/dist/cjs/components/menu/MenuItem.js +22 -1
  30. package/dist/cjs/components/meter/Meter.js +24 -0
  31. package/dist/cjs/components/navigator/Navigator.js +22 -0
  32. package/dist/cjs/components/panel/Panel.js +37 -0
  33. package/dist/cjs/components/panel/PanelGroup.js +24 -0
  34. package/dist/cjs/components/panel/PanelStack.js +31 -0
  35. package/dist/cjs/components/progress/ProgressBar.js +21 -0
  36. package/dist/cjs/components/progress/ProgressCircle.js +20 -0
  37. package/dist/cjs/components/tabpanel/Tab.js +31 -0
  38. package/dist/cjs/components/tabpanel/TabPanel.js +33 -0
  39. package/dist/cjs/context/Global.js +25 -1
  40. package/dist/cjs/core/aside/Aside.js +39 -2
  41. package/dist/cjs/core/boundary/ErrorBoundary.js +17 -1
  42. package/dist/cjs/core/content/Content.js +6 -1
  43. package/dist/cjs/core/headfoot/HeadFoot.js +42 -0
  44. package/dist/cjs/core/page/Page.js +26 -1
  45. package/dist/cjs/core/responsive/Responsive.js +55 -2
  46. package/dist/cjs/core/section/Section.js +11 -27
  47. package/dist/cjs/core/theme/ThemeProvider.js +21 -1
  48. package/dist/cjs/core/viewport/Viewport.js +15 -1
  49. package/dist/cjs/hooks/useControlledValue.js +12 -0
  50. package/dist/cjs/hooks/useDebounce.js +13 -0
  51. package/dist/cjs/hooks/useEffectDebugger.js +52 -0
  52. package/dist/cjs/hooks/useIsDark.js +8 -0
  53. package/dist/cjs/hooks/useIsRtl.js +12 -0
  54. package/dist/cjs/hooks/useOverlayService.js +24 -0
  55. package/dist/cjs/hooks/usePropToggle.js +16 -5
  56. package/dist/cjs/hooks/useResize.js +18 -0
  57. package/dist/cjs/hooks/useResizeObserver.js +19 -0
  58. package/dist/cjs/hooks/useStorage.js +39 -0
  59. package/dist/cjs/types/icons.js +4 -0
  60. package/dist/cjs/typography/Abbr.js +28 -1
  61. package/dist/cjs/typography/Anchor.js +18 -1
  62. package/dist/cjs/typography/Mark.js +20 -1
  63. package/dist/cjs/typography/Text.js +27 -1
  64. package/dist/cjs/typography/Title.js +16 -1
  65. package/dist/esm/components/actionLabel/ActionLabel.js +23 -5
  66. package/dist/esm/components/animations/Animations.js +92 -9
  67. package/dist/esm/components/avatar/Avatar.js +33 -3
  68. package/dist/esm/components/avatar/AvatarGroup.js +19 -1
  69. package/dist/esm/components/badge/Badge.js +32 -3
  70. package/dist/esm/components/breadcrumbs/Breadcrumbs.js +30 -1
  71. package/dist/esm/components/button/Button.js +25 -2
  72. package/dist/esm/components/button/ButtonGroup.js +26 -0
  73. package/dist/esm/components/button/ConfirmButton.js +22 -1
  74. package/dist/esm/components/button/ToggleButtonGroup.js +39 -13
  75. package/dist/esm/components/callout/Callout.js +28 -0
  76. package/dist/esm/components/card/Card.js +34 -0
  77. package/dist/esm/components/card/CardCover.js +26 -0
  78. package/dist/esm/components/card/FlipContent.js +21 -0
  79. package/dist/esm/components/chip/Chip.js +22 -1
  80. package/dist/esm/components/collapsable/Collapsable.js +26 -0
  81. package/dist/esm/components/divider/Divider.js +19 -0
  82. package/dist/esm/components/dropdown/Dropdown.js +42 -0
  83. package/dist/esm/components/empty/EmptyContent.js +27 -0
  84. package/dist/esm/components/icon/Icon.js +27 -1
  85. package/dist/esm/components/media/Media.js +56 -0
  86. package/dist/esm/components/menu/ContextMenu.js +19 -0
  87. package/dist/esm/components/menu/Menu.js +30 -0
  88. package/dist/esm/components/menu/MenuItem.js +22 -1
  89. package/dist/esm/components/meter/Meter.js +24 -0
  90. package/dist/esm/components/navigator/Navigator.js +22 -0
  91. package/dist/esm/components/panel/Panel.js +37 -0
  92. package/dist/esm/components/panel/PanelGroup.js +24 -0
  93. package/dist/esm/components/panel/PanelStack.js +31 -0
  94. package/dist/esm/components/progress/ProgressBar.js +21 -0
  95. package/dist/esm/components/progress/ProgressCircle.js +20 -0
  96. package/dist/esm/components/tabpanel/Tab.js +31 -0
  97. package/dist/esm/components/tabpanel/TabPanel.js +33 -0
  98. package/dist/esm/context/Global.js +25 -1
  99. package/dist/esm/core/aside/Aside.js +39 -2
  100. package/dist/esm/core/boundary/ErrorBoundary.js +17 -1
  101. package/dist/esm/core/content/Content.js +6 -1
  102. package/dist/esm/core/headfoot/HeadFoot.js +42 -0
  103. package/dist/esm/core/page/Page.js +26 -1
  104. package/dist/esm/core/responsive/Responsive.js +55 -2
  105. package/dist/esm/core/section/Section.js +11 -27
  106. package/dist/esm/core/theme/ThemeProvider.js +21 -1
  107. package/dist/esm/core/viewport/Viewport.js +15 -1
  108. package/dist/esm/hooks/useControlledValue.js +12 -0
  109. package/dist/esm/hooks/useDebounce.js +13 -0
  110. package/dist/esm/hooks/useEffectDebugger.js +52 -0
  111. package/dist/esm/hooks/useIsDark.js +8 -0
  112. package/dist/esm/hooks/useIsRtl.js +12 -0
  113. package/dist/esm/hooks/useOverlayService.js +24 -0
  114. package/dist/esm/hooks/usePropToggle.js +16 -5
  115. package/dist/esm/hooks/useResize.js +18 -0
  116. package/dist/esm/hooks/useResizeObserver.js +19 -0
  117. package/dist/esm/hooks/useStorage.js +39 -0
  118. package/dist/esm/types/icons.js +4 -0
  119. package/dist/esm/typography/Abbr.js +28 -1
  120. package/dist/esm/typography/Anchor.js +18 -1
  121. package/dist/esm/typography/Mark.js +20 -1
  122. package/dist/esm/typography/Text.js +27 -1
  123. package/dist/esm/typography/Title.js +16 -1
  124. package/dist/types/components/actionLabel/ActionLabel.d.ts +21 -2
  125. package/dist/types/components/animations/Animations.d.ts +80 -1
  126. package/dist/types/components/avatar/Avatar.d.ts +26 -2
  127. package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
  128. package/dist/types/components/badge/Badge.d.ts +25 -0
  129. package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +29 -0
  130. package/dist/types/components/button/Button.d.ts +23 -2
  131. package/dist/types/components/button/ButtonGroup.d.ts +26 -1
  132. package/dist/types/components/button/ConfirmButton.d.ts +23 -3
  133. package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
  134. package/dist/types/components/callout/Callout.d.ts +26 -1
  135. package/dist/types/components/card/Card.d.ts +34 -0
  136. package/dist/types/components/card/CardCover.d.ts +25 -0
  137. package/dist/types/components/card/FlipContent.d.ts +21 -0
  138. package/dist/types/components/chip/Chip.d.ts +21 -1
  139. package/dist/types/components/collapsable/Collapsable.d.ts +26 -0
  140. package/dist/types/components/divider/Divider.d.ts +19 -0
  141. package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
  142. package/dist/types/components/dropdown/DropdownTool.d.ts +25 -0
  143. package/dist/types/components/empty/EmptyContent.d.ts +26 -1
  144. package/dist/types/components/icon/Icon.d.ts +27 -2
  145. package/dist/types/components/media/Media.d.ts +54 -0
  146. package/dist/types/components/menu/ContextMenu.d.ts +19 -1
  147. package/dist/types/components/menu/Menu.d.ts +29 -0
  148. package/dist/types/components/menu/MenuItem.d.ts +22 -2
  149. package/dist/types/components/meter/Meter.d.ts +24 -0
  150. package/dist/types/components/navigator/Navigator.d.ts +22 -0
  151. package/dist/types/components/panel/Panel.d.ts +37 -0
  152. package/dist/types/components/panel/PanelGroup.d.ts +24 -0
  153. package/dist/types/components/panel/PanelStack.d.ts +31 -0
  154. package/dist/types/components/progress/ProgressBar.d.ts +20 -0
  155. package/dist/types/components/progress/ProgressCircle.d.ts +19 -0
  156. package/dist/types/components/tabpanel/Tab.d.ts +32 -1
  157. package/dist/types/components/tabpanel/TabPanel.d.ts +33 -0
  158. package/dist/types/context/Global.d.ts +24 -1
  159. package/dist/types/core/aside/Aside.d.ts +38 -1
  160. package/dist/types/core/boundary/ErrorBoundary.d.ts +17 -1
  161. package/dist/types/core/content/Content.d.ts +6 -1
  162. package/dist/types/core/headfoot/HeadFoot.d.ts +40 -0
  163. package/dist/types/core/page/Page.d.ts +26 -1
  164. package/dist/types/core/responsive/Responsive.d.ts +52 -1
  165. package/dist/types/core/section/Section.d.ts +18 -3
  166. package/dist/types/core/theme/ThemeProvider.d.ts +21 -1
  167. package/dist/types/core/viewport/Viewport.d.ts +15 -1
  168. package/dist/types/hooks/useControlledValue.d.ts +13 -2
  169. package/dist/types/hooks/useDebounce.d.ts +12 -0
  170. package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
  171. package/dist/types/hooks/useIsDark.d.ts +8 -0
  172. package/dist/types/hooks/useIsRtl.d.ts +12 -0
  173. package/dist/types/hooks/useNavigator.d.ts +18 -1
  174. package/dist/types/hooks/useOverlayService.d.ts +25 -4
  175. package/dist/types/hooks/usePropToggle.d.ts +16 -5
  176. package/dist/types/hooks/useResize.d.ts +18 -0
  177. package/dist/types/hooks/useResizeObserver.d.ts +19 -0
  178. package/dist/types/hooks/useStorage.d.ts +38 -0
  179. package/dist/types/types/icons.d.ts +4 -0
  180. package/dist/types/typography/Abbr.d.ts +28 -1
  181. package/dist/types/typography/Anchor.d.ts +19 -2
  182. package/dist/types/typography/Copy.d.ts +15 -0
  183. package/dist/types/typography/Mark.d.ts +20 -1
  184. package/dist/types/typography/Text.d.ts +27 -1
  185. package/dist/types/typography/Title.d.ts +16 -1
  186. package/package.json +3 -3
  187. package/src/components/actionLabel/ActionLabel.tsx +23 -5
  188. package/src/components/animations/Animations.tsx +93 -14
  189. package/src/components/avatar/Avatar.tsx +32 -3
  190. package/src/components/avatar/AvatarGroup.tsx +19 -1
  191. package/src/components/badge/Badge.tsx +33 -3
  192. package/src/components/breadcrumbs/Breadcrumbs.tsx +30 -1
  193. package/src/components/button/Button.tsx +24 -2
  194. package/src/components/button/ButtonGroup.tsx +26 -0
  195. package/src/components/button/ConfirmButton.tsx +22 -1
  196. package/src/components/button/ToggleButtonGroup.tsx +70 -43
  197. package/src/components/callout/Callout.tsx +27 -0
  198. package/src/components/card/Card.tsx +34 -0
  199. package/src/components/card/CardCover.tsx +25 -0
  200. package/src/components/card/FlipContent.tsx +21 -0
  201. package/src/components/chip/Chip.tsx +21 -1
  202. package/src/components/collapsable/Collapsable.tsx +26 -0
  203. package/src/components/divider/Divider.tsx +19 -0
  204. package/src/components/dropdown/Dropdown.tsx +40 -0
  205. package/src/components/dropdown/DropdownTool.tsx +25 -0
  206. package/src/components/empty/EmptyContent.tsx +26 -0
  207. package/src/components/icon/Icon.tsx +27 -1
  208. package/src/components/media/Media.tsx +54 -0
  209. package/src/components/menu/ContextMenu.tsx +19 -0
  210. package/src/components/menu/Menu.tsx +29 -0
  211. package/src/components/menu/MenuItem.tsx +22 -1
  212. package/src/components/meter/Meter.tsx +24 -0
  213. package/src/components/navigator/Navigator.tsx +22 -0
  214. package/src/components/panel/Panel.tsx +37 -0
  215. package/src/components/panel/PanelGroup.tsx +24 -0
  216. package/src/components/panel/PanelStack.tsx +31 -0
  217. package/src/components/progress/ProgressBar.tsx +20 -0
  218. package/src/components/progress/ProgressCircle.tsx +19 -0
  219. package/src/components/tabpanel/Tab.tsx +31 -0
  220. package/src/components/tabpanel/TabPanel.tsx +33 -0
  221. package/src/context/Global.tsx +24 -1
  222. package/src/core/aside/Aside.tsx +39 -2
  223. package/src/core/boundary/ErrorBoundary.tsx +17 -1
  224. package/src/core/content/Content.tsx +6 -1
  225. package/src/core/headfoot/HeadFoot.tsx +40 -0
  226. package/src/core/page/Page.tsx +26 -1
  227. package/src/core/responsive/Responsive.tsx +53 -2
  228. package/src/core/section/Section.tsx +25 -2
  229. package/src/core/theme/ThemeProvider.tsx +21 -1
  230. package/src/core/viewport/Viewport.tsx +15 -1
  231. package/src/hooks/useControlledValue.tsx +12 -0
  232. package/src/hooks/useDebounce.ts +12 -0
  233. package/src/hooks/useEffectDebugger.ts +49 -0
  234. package/src/hooks/useIsDark.ts +8 -0
  235. package/src/hooks/useIsRtl.ts +12 -0
  236. package/src/hooks/useNavigator.tsx +18 -0
  237. package/src/hooks/useOverlayService.tsx +24 -0
  238. package/src/hooks/usePropToggle.ts +16 -5
  239. package/src/hooks/useResize.ts +18 -0
  240. package/src/hooks/useResizeObserver.ts +19 -0
  241. package/src/hooks/useStorage.ts +38 -0
  242. package/src/types/icons.ts +5 -1
  243. package/src/typography/Abbr.tsx +28 -1
  244. package/src/typography/Anchor.tsx +18 -1
  245. package/src/typography/Copy.tsx +15 -0
  246. package/src/typography/Mark.tsx +20 -1
  247. package/src/typography/Text.tsx +27 -1
  248. package/src/typography/Title.tsx +16 -1
@@ -95,6 +95,32 @@ export interface CollapsableProps
95
95
  onClose?: () => void;
96
96
  }
97
97
 
98
+ /**
99
+ * A component that can be expanded or collapsed to show or hide content.
100
+ * It is useful for organizing content in a way that allows users to focus on the information they are interested in.
101
+ * It supports custom icons for open and closed states, alignment options, and can be made sticky.
102
+ * This component is ideal for creating accordions, expandable panels, or sections that can be toggled by the user.
103
+ *
104
+ * @param {CollapsableProps} props - The properties for the Collapsable component.
105
+ * @returns {JSX.Element} The rendered Collapsable component.
106
+ *
107
+ * @example
108
+ * ```jsx
109
+ * <Collapsable
110
+ * iconAlign="start"
111
+ * iconOpen={CoreIcons.chevronDown}
112
+ * iconClosed={CoreIcons.chevronRight}
113
+ * open={true}
114
+ * onOpen={() => console.log("Opened")}
115
+ * onClose={() => console.log("Closed")}
116
+ * >
117
+ * <div>Header Content</div>
118
+ * <div>Body Content</div>
119
+ * </Collapsable>
120
+ * ```
121
+ *
122
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-collapsable--docs} for more details.
123
+ */
98
124
  export const Collapsable = ({
99
125
  ref,
100
126
  disabled,
@@ -54,6 +54,25 @@ export interface DividerProps extends CssProp, Partial<ChildProp> {
54
54
  style?: "solid" | "dashed" | "dotted";
55
55
  }
56
56
 
57
+ /**
58
+ * A component that represents a visual divider between content.
59
+ * It can be used to separate sections of content, with optional text labels.
60
+ * It supports both horizontal and vertical orientations, customizable colors,
61
+ * styles, and alignment options.
62
+ *
63
+ * @param {DividerProps} props - The properties for the Divider component.
64
+ * @returns {JSX.Element} The rendered Divider component.
65
+ *
66
+ * @example
67
+ * ```jsx
68
+ * <Divider color="primary" align="center" style="dashed">
69
+ * Divider Text
70
+ * </Divider>
71
+ * // Renders a horizontal divider with primary color, centered text, and dashed style.
72
+ * ```
73
+ *
74
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-divider--docs} for more details.
75
+ */
57
76
  export const Divider = ({
58
77
  children,
59
78
  color = "tint-300",
@@ -276,12 +276,52 @@ const DropdownElement = ({
276
276
  );
277
277
  };
278
278
 
279
+ /**
280
+ * A component that displays a dropdown menu with an anchor and a panel.
281
+ * It supports various features such as placement, arrow display, click handling,
282
+ * and event handling for opening and closing the dropdown.
283
+ *
284
+ * @param props - Dropdown properties
285
+ * @returns JSX Element
286
+ *
287
+ * @example
288
+ * ```jsx
289
+ * <Dropdown
290
+ * placement="bottom"
291
+ * showArrow
292
+ * closeOnClick
293
+ * fitToParent
294
+ * onOpen={() => console.log("Dropdown opened")}
295
+ * onClose={() => console.log("Dropdown closed")}
296
+ * >
297
+ * <button>Open Dropdown</button>
298
+ * <div>
299
+ * <DropdownDismiss>
300
+ * <button>Dismiss</button>
301
+ * </DropdownDismiss>
302
+ * <p>Dropdown Content</p>
303
+ * </div>
304
+ * </Dropdown>
305
+ * ```
306
+ *
307
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-dropdown--docs} for more details.
308
+ * @see {@link https://floating-ui.com/docs/react} for more details on Floating UI.
309
+ */
279
310
  export const Dropdown = (props: DropdownProps) => (
280
311
  <FloatingTree>
281
312
  <DropdownElement {...props} />
282
313
  </FloatingTree>
283
314
  );
284
315
 
316
+ /**
317
+ * A component that allows dismissing the dropdown when clicked.
318
+ * It can be used inside the dropdown panel to provide a dismiss area.
319
+ * It supports an optional `dismiss` prop to control whether the dropdown should be dismissed on click.
320
+ *
321
+ * @param children - The children elements to render inside the dismiss area.
322
+ * @param dismiss - Whether to dismiss the dropdown on click (default: true).
323
+ * @returns JSX Element
324
+ */
285
325
  export const DropdownDismiss = ({
286
326
  children,
287
327
  dismiss = true,
@@ -27,6 +27,31 @@ import { CoreIcons } from "../../types/icons";
27
27
  import { Icon } from "../icon/Icon";
28
28
  import { Dropdown, type DropdownProps } from "./Dropdown";
29
29
 
30
+ /**
31
+ * A dropdown component that displays an icon and tool menu.
32
+ * It can be used to create a dropdown menu that appears when the icon is clicked or hovered over.
33
+ * This component is useful for creating toolbars or action menus in a user interface.
34
+ * It accepts children as menu items and can be styled with additional CSS classes.
35
+ *
36
+ * @param {ChildProp} children - The content to be displayed inside the dropdown.
37
+ * @param {CssProp} className - Additional CSS classes to apply to the dropdown.
38
+ * @param {string} icon - The icon to be displayed in the dropdown.
39
+ * @param {boolean} groupHover - If true, the dropdown will only be visible when the parent group is hovered.
40
+ * @param {DropdownProps} props - Additional properties for the dropdown.
41
+ * @returns {JSX.Element} The rendered DropdownTool component.
42
+ *
43
+ * @example
44
+ * ```jsx
45
+ * <DropdownTool
46
+ * icon="caret-down"
47
+ * groupHover={true}
48
+ * className="my-dropdown"
49
+ * >
50
+ * <MenuItem>Item 1</MenuItem>
51
+ * <MenuItem>Item 2</MenuItem>
52
+ * </DropdownTool>
53
+ * ```
54
+ */
30
55
  export const DropdownTool = ({
31
56
  children,
32
57
  className,
@@ -105,6 +105,32 @@ const DefaultIcon = () => (
105
105
  </svg>
106
106
  );
107
107
 
108
+ /**
109
+ * A component that displays a message and an optional icon when there is no content to show.
110
+ * It allows customization of title, message, icon, size, and additional CSS properties.
111
+ * It can also accept children elements for additional actions or information.
112
+ * This component is useful for displaying a friendly message when data is not available,
113
+ * such as in empty states of lists, tables, or other content areas.
114
+ *
115
+ * @param {EmptyContentProps} props - The properties for the EmptyContent component.
116
+ * @returns {JSX.Element} The rendered EmptyContent component.
117
+ *
118
+ * @example
119
+ * ```jsx
120
+ * <EmptyContent
121
+ * title="No Data Available"
122
+ * message="Please check back later."
123
+ * icon="empty"
124
+ * iconColor="tint-700"
125
+ * size="md"
126
+ * >
127
+ * <Button onClick={() => console.log("Action clicked")}>Retry</Button>
128
+ * </EmptyContent>
129
+ * // Renders an empty content area with a title, message, icon, and a button for retrying the action.
130
+ * ```
131
+ *
132
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-emptycontent--docs} for more details.
133
+ */
108
134
  export const EmptyContent = ({
109
135
  children,
110
136
  title,
@@ -85,7 +85,33 @@ const SizeMap: KeyValue<string> = {
85
85
  };
86
86
 
87
87
  /**
88
- * An icon is a display component for svg icon path / image
88
+ * A versatile icon component that supports SVG paths, webfont icons, and text icons.
89
+ * It can be styled with background color, icon color, size, and animations.
90
+ * It also supports RTL flipping and rounded corners.
91
+ * The component can be used as a standalone icon or as part of other components.
92
+ * It accepts various properties to customize its appearance and behavior.
93
+ * These include `bg`, `color`, `size`, `rtlFlip`, `animate`, and `rounded`.
94
+ *
95
+ * @param {IconProps} props - The properties for the Icon component.
96
+ * @returns {JSX.Element} The rendered Icon component.
97
+ *
98
+ * @example
99
+ * ```jsx
100
+ * <Icon
101
+ * icon="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"
102
+ * bg="bg-blue-500"
103
+ * color="text-white"
104
+ * size="lg"
105
+ * rtlFlip={true}
106
+ * animate="spin"
107
+ * rounded={true}
108
+ * onClick={() => console.log("Icon clicked")}
109
+ * />
110
+ * // Renders an icon with a SVG path, blue background, white text color,
111
+ * // large size, RTL flip, spin animation, rounded corners, and a click handler.
112
+ * ```
113
+ *
114
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-icon--docs} for more details.
89
115
  */
90
116
  export const Icon = ({
91
117
  ref,
@@ -82,6 +82,30 @@ const loadIndicator = (
82
82
  </div>
83
83
  );
84
84
 
85
+ /**
86
+ * Component for displaying images with optional reel decoration.
87
+ * A versatile media component that supports images and videos with various display options.
88
+ * It can display images with a reel decoration, handle loading states, and show error icons if the media fails to load.
89
+ * This component is useful for displaying images in a visually appealing way, with support for lazy loading and error handling.
90
+ * It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
91
+ *
92
+ * @param {ImageProps | VideoProps} props - The properties for the Media component.
93
+ * @returns {JSX.Element} The rendered Media component.
94
+ *
95
+ * @example
96
+ * ```jsx
97
+ * <Image
98
+ * src="image.jpg"
99
+ * alt="Example Image"
100
+ * reel={true}
101
+ * fit="cover"
102
+ * className="custom-class"
103
+ * />
104
+ * // Renders an image with reel decoration, cover fit, and a custom class name.
105
+ * ```
106
+ *
107
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-media--docs} for more details.
108
+ */
85
109
  export const Image = ({
86
110
  src,
87
111
  alt,
@@ -139,6 +163,36 @@ export const Image = ({
139
163
  );
140
164
  };
141
165
 
166
+ /**
167
+ * Component for displaying videos with optional controls and reel decoration.
168
+ * A versatile video component that supports autoplay, hover play, and various display options.
169
+ * It can display videos with a reel decoration, handle loading states, and show error icons if the video fails to load.
170
+ * This component is useful for displaying videos in a visually appealing way, with support for controls, autoplay, and error handling.
171
+ * It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
172
+ * It also includes controls for play/pause and volume, enhancing user interaction with the video content.
173
+ * This component is ideal for media-rich applications where video content needs to be displayed with user-friendly controls and visual effects.
174
+ * It supports features like autoplay, play on hover, and custom fit options for the video display.
175
+ * It also includes a reel decoration for a more engaging visual presentation.
176
+ *
177
+ * @param {VideoProps} props - The properties for the Video component.
178
+ * @returns {JSX.Element} The rendered Video component.
179
+ *
180
+ * @example
181
+ * ```jsx
182
+ * <Video
183
+ * src="video.mp4"
184
+ * poster="poster.jpg"
185
+ * reel={true}
186
+ * autoPlay={true}
187
+ * playOnHover={true}
188
+ * fit="cover"
189
+ * className="custom-class"
190
+ * />
191
+ * // Renders a video with reel decoration, autoplay, play on hover, cover fit, and a custom class name.
192
+ * ```
193
+ *
194
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-video--docs} for more details.
195
+ */
142
196
  export const Video = ({
143
197
  src,
144
198
  poster,
@@ -42,6 +42,25 @@ export interface ContextMenuProps extends ChildrenProp {
42
42
  disabled?: boolean;
43
43
  }
44
44
 
45
+ /**
46
+ * A component that provides a context menu that appears on right-click.
47
+ * It uses the Floating UI library to manage the positioning and interactions of the menu.
48
+ * This component is useful for creating custom context menus that can be triggered by right-clicking on elements.
49
+ *
50
+ * @param {ContextMenuProps} props - The properties for the ContextMenu component.
51
+ * @returns {JSX.Element} The rendered ContextMenu component.
52
+ *
53
+ * @example
54
+ * ```jsx
55
+ * <ContextMenu
56
+ * menu={<Menu items={[{ label: "Option 1" }, { label: "Option 2" }]} />}
57
+ * >
58
+ * <div className="context-menu-target">Right-click me!</div>
59
+ * </ContextMenu>
60
+ * ```
61
+ *
62
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs}
63
+ */
45
64
  export const ContextMenu = ({ children, menu, disabled }: ContextMenuProps) => {
46
65
  const [isOpen, setIsOpen] = useState(false);
47
66
  const nodeId = useFloatingNodeId();
@@ -276,6 +276,35 @@ const MenuComponent = ({
276
276
  );
277
277
  };
278
278
 
279
+ /**
280
+ * A component that displays a menu with items, supports nested menus and various interactions.
281
+ * It can be triggered by hover or click events, and allows for custom styling and behavior.
282
+ * This component is designed to be used within a Floating UI context, allowing for dynamic positioning and interaction handling.
283
+ * It can be nested within other menus to create complex menu structures.
284
+ *
285
+ * @param {MenuProps} props - The properties for the Menu component.
286
+ * @returns {JSX.Element} The rendered Menu component.
287
+ *
288
+ * @example
289
+ * ```jsx
290
+ * <Menu
291
+ * className="my-menu"
292
+ * trigger="click"
293
+ * onClick={(id) => console.log(`Clicked item with id: ${id}`)}
294
+ * >
295
+ * <MenuItem id="item1" label="Item 1" />
296
+ * <MenuItem id="item2" label="Item 2" />
297
+ * <MenuItem id="item3" label="Item 3">
298
+ * <Menu>
299
+ * <MenuItem id="subitem1" label="Sub Item 1" />
300
+ * <MenuItem id="subitem2" label="Sub Item 2" />
301
+ * </Menu>
302
+ * </MenuItem>
303
+ * </Menu>
304
+ * ```
305
+ *
306
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for more details.
307
+ */
279
308
  export const Menu = (props: MenuProps) => {
280
309
  const parentId = useFloatingParentNodeId();
281
310
  const tree = useFloatingTree();
@@ -33,6 +33,27 @@ import { Badge, getBadgeProps } from "../badge/Badge";
33
33
  import { Icon } from "../icon/Icon";
34
34
  import { type MenuItemProps } from "./types";
35
35
 
36
+ /**
37
+ * A menu item component that can be used in a dropdown or menu.
38
+ * It supports various features such as icons, badges, hotkeys, and more.
39
+ * It can be customized with different colors, icons, and behaviors.
40
+ *
41
+ * @param {MenuItemProps} props
42
+ * @returns A JSX element representing the menu item.
43
+ *
44
+ * @example
45
+ * ```jsx
46
+ * <MenuItem
47
+ * label="Settings"
48
+ * icon="settings"
49
+ * onClick={() => console.log("Settings clicked")}
50
+ * hotKey="Ctrl+S"
51
+ * badge={{ count: 3, color: "red" }}
52
+ * />
53
+ * ```
54
+ *
55
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for documentation.
56
+ */
36
57
  export const MenuItem = <Tag extends React.ElementType = "button">({
37
58
  as,
38
59
  label,
@@ -150,7 +171,7 @@ export const MenuItem = <Tag extends React.ElementType = "button">({
150
171
  active && "active",
151
172
  minimal && "minimal",
152
173
  disabled && "disabled",
153
- "rounded-capped relative max-w-[50vw] my-0.5",
174
+ "rounded relative max-w-[50vw] my-0.5",
154
175
  )}
155
176
  data-active={active}
156
177
  data-open={childOpen}
@@ -37,6 +37,30 @@ export interface MeterProps extends CssProp, AriaProps, TestProps {
37
37
  hideLabel?: boolean;
38
38
  }
39
39
 
40
+ /**
41
+ * A component that displays a visual representation of a value as a series of dots.
42
+ * It is useful for showing progress or completion status in a compact form.
43
+ * The meter consists of 6 dots, each representing approximately 16.67% of the total value.
44
+ * The active dots are filled based on the value provided, and the remaining dots are empty.
45
+ * The component can also display a label showing the percentage value.
46
+ *
47
+ * @param {MeterProps} props - The properties for the Meter component.
48
+ * @returns {JSX.Element} The rendered Meter component.
49
+ *
50
+ * @example
51
+ * ```jsx
52
+ * <Meter value={75} />
53
+ * // Renders a meter with 4 active dots and a label showing "75%"
54
+ *
55
+ * <Meter value={50} hideLabel />
56
+ * // Renders a meter with 3 active dots and no label
57
+ *
58
+ * <Meter value={100} className="custom-meter" />
59
+ * // Renders a meter with all 6 active dots and a custom class name
60
+ * ```
61
+ *
62
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-meter--docs} for more details.
63
+ */
40
64
  export const Meter = ({ value, hideLabel, className, ...aria }: MeterProps) => {
41
65
  /** ***************** calculate active meter dots *******************/
42
66
  const activeCount = useMemoDebugger(
@@ -54,6 +54,28 @@ export interface NavigatorProps
54
54
  onNavigate: (dir: -1 | 1) => void;
55
55
  }
56
56
 
57
+ /**
58
+ * A component that provides navigation controls for traversing through items.
59
+ * It includes previous and next buttons, and supports keyboard navigation.
60
+ *
61
+ * @param {NavigatorProps} props - The properties for the Navigator component.
62
+ * @returns {JSX.Element} The rendered Navigator component.
63
+ *
64
+ * @example
65
+ * ```jsx
66
+ * <Navigator
67
+ * className="my-navigator"
68
+ * onNavigate={(dir) => console.log(`Navigate ${dir === -1 ? 'previous' : 'next'}`)}
69
+ * color="blue"
70
+ * length={10}
71
+ * current={0}
72
+ * >
73
+ * <span>Current Item: 1</span>
74
+ * </Navigator>
75
+ * ```
76
+ *
77
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-navigator--docs} for more details.
78
+ */
57
79
  export const Navigator = ({
58
80
  className,
59
81
  onNavigate,
@@ -101,6 +101,43 @@ export interface PanelProps
101
101
  onClose?: () => void;
102
102
  }
103
103
 
104
+ /**
105
+ * A component that represents a panel with a header, body, and optional actions.
106
+ * It supports expandable and collapsible functionality, loading state, and customizable styles.
107
+ * The panel can be resized and has a fixed position when expanded.
108
+ * It can be customized with different colors, icons, and behaviors.
109
+ * This component is useful for displaying content in a structured way, allowing users to interact with it through actions and toggles.
110
+ * It can be used in various applications where panels are needed, such as dashboards, settings pages, or content management systems.
111
+ *
112
+ * @param {PanelProps} props - The properties for the Panel component.
113
+ * @returns {JSX.Element} The rendered Panel component.
114
+ *
115
+ * @example
116
+ * ```jsx
117
+ * <Panel
118
+ * title="Panel Title"
119
+ * icon={CoreIcons.info}
120
+ * iconBg="bg-blue-500"
121
+ * iconColor="text-white"
122
+ * actions={<button>Action</button>}
123
+ * expandable
124
+ * collapsable
125
+ * onExpand={() => console.log("Expanded")}
126
+ * onCollapse={() => console.log("Collapsed")}
127
+ * onClose={() => console.log("Closed")}
128
+ * height="400px"
129
+ * width="300px"
130
+ * minHeight="200px"
131
+ * minWidth="200px"
132
+ * maxHeight="600px"
133
+ * maxWidth="600px"
134
+ * >
135
+ * <p>This is the content of the panel.</p>
136
+ * </Panel>
137
+ * ```
138
+ *
139
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-panel--docs} for more details.
140
+ */
104
141
  export const Panel = ({
105
142
  children,
106
143
  className,
@@ -40,6 +40,30 @@ export interface PanelGroupProps extends ChildrenProp {
40
40
  onActiveChange?: (panelId: string) => void;
41
41
  }
42
42
 
43
+ /**
44
+ * A component that groups multiple panels together, allowing for one panel to be expanded at a time.
45
+ * This component allows you to manage a group of panels where only one can be expanded at a time.
46
+ * It accepts an `activePanel` prop to control which panel is currently expanded,
47
+ * and an `onActiveChange` callback that is triggered when the active panel changes.
48
+ * It uses the `Panel` component to render each individual panel within the group.
49
+ *
50
+ * @param {PanelGroupProps} props - The properties for the PanelGroup component.
51
+ * @returns {JSX.Element} The rendered PanelGroup component.
52
+ *
53
+ * @example
54
+ * ```jsx
55
+ * <PanelGroup
56
+ * activePanel="panel1"
57
+ * onActiveChange={(panelId) => console.log(`Active panel changed to: ${panelId}`)}
58
+ * >
59
+ * <Panel panelId="panel1" title="Panel 1">Content for Panel 1</Panel>
60
+ * <Panel panelId="panel2" title="Panel 2">Content for Panel 2</Panel>
61
+ * <Panel panelId="panel3" title="Panel 3">Content for Panel 3</Panel>
62
+ * </PanelGroup>
63
+ * ```
64
+ *
65
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-panel--docs} for more details.
66
+ */
43
67
  export const PanelGroup = ({
44
68
  children,
45
69
  activePanel,
@@ -49,6 +49,37 @@ export interface PanelStackProps extends CssProp, ChildrenProp {
49
49
  onBack?: (panelId: string, nextPanelId: string) => boolean | undefined;
50
50
  }
51
51
 
52
+ /**
53
+ * A component that manages a stack of panels, allowing navigation between them.
54
+ * This component allows you to manage a stack of panels where you can navigate between them.
55
+ * It accepts an `active` prop to control which panel is currently active,
56
+ * an `onPanelChange` callback that is triggered when the active panel changes,
57
+ * and an `onBack` callback to handle navigation to the previous panel in the history.
58
+ * It uses the `Panel` component to render each individual panel within the stack.
59
+ * The component maintains a history of panels to allow back navigation,
60
+ * and it updates the active panel based on user interactions.
61
+ *
62
+ * @param {PanelStackProps} props - The properties for the PanelStack component.
63
+ * @returns {JSX.Element} The rendered PanelStack component.
64
+ *
65
+ * @example
66
+ * ```jsx
67
+ * <PanelStack
68
+ * active="panel1"
69
+ * onPanelChange={(panelId) => console.log(`Active panel changed to: ${panelId}`)}
70
+ * onBack={(currentPanel, nextPanel) => {
71
+ * console.log(`Navigating back from ${currentPanel} to ${nextPanel}`);
72
+ * return true; // return false to prevent navigation
73
+ * }}
74
+ * >
75
+ * <Panel panelId="panel1" title="Panel 1">Content for Panel 1</Panel>
76
+ * <Panel panelId="panel2" title="Panel 2">Content for Panel 2</Panel>
77
+ * <Panel panelId="panel3" title="Panel 3">Content for Panel 3</Panel>
78
+ * </PanelStack>
79
+ * ```
80
+ *
81
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-panelstack--docs} for more details.
82
+ */
52
83
  export const PanelStack = ({
53
84
  active,
54
85
  children,
@@ -60,6 +60,26 @@ const SizeMap: KeyValue = {
60
60
  xl: "2rem",
61
61
  };
62
62
 
63
+ /**
64
+ * A component that displays a progress bar indicating the completion percentage of a task or operation.
65
+ * The progress bar is styled with a background color and a track that fills based on the value provided.
66
+ * It can also display a label showing the percentage value.
67
+ * The label can be customized or hidden based on the props provided.
68
+ *
69
+ * @param {ProgressProps} props - The properties for the ProgressBar component.
70
+ * @returns {JSX.Element} The rendered ProgressBar component.
71
+ *
72
+ * @example
73
+ * ```jsx
74
+ * <ProgressBar value={0.75} size="md" color="primary-500" label="Loading" animate />
75
+ * // Renders a progress bar with 75% completion, medium size, primary color, and a label "Loading"
76
+ *
77
+ * <ProgressBar value={0.5} size="lg" color="success-500" />
78
+ * // Renders a progress bar with 50% completion, large size, and success color without a label
79
+ * ```
80
+ *
81
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-progress--docs} for more details.
82
+ */
63
83
  export const ProgressBar = ({
64
84
  value = 0,
65
85
  size,
@@ -50,6 +50,25 @@ const SizeMap: KeyValue = {
50
50
  xl: "2rem",
51
51
  };
52
52
 
53
+ /**
54
+ * A circular progress indicator that visually represents a percentage of completion.
55
+ * It displays a circular track with a stroke that fills based on the `value` prop.
56
+ * The component is customizable with size and color props.
57
+ *
58
+ * @param {ProgressProps} props - The properties for the ProgressCircle component.
59
+ * @returns {JSX.Element} - A circular progress indicator.
60
+ *
61
+ * @example
62
+ * ```jsx
63
+ * <ProgressCircle value={0.75} size="md" color="primary-500" />
64
+ * // Renders a circular progress indicator with 75% completion, medium size, and primary color.
65
+ *
66
+ * <ProgressCircle value={0.5} size="lg" color="secondary-500" />
67
+ * // Renders a circular progress indicator with 50% completion, large size, and secondary color.
68
+ * ```
69
+ *
70
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-progress--docs} for more details.
71
+ */
53
72
  export const ProgressCircle = ({
54
73
  value = 0,
55
74
  size = "sm",
@@ -92,6 +92,37 @@ export interface TabProps
92
92
  onClick?: (id: string) => CallbackReturn;
93
93
  }
94
94
 
95
+ /**
96
+ * A component that represents a tab in a tabbed interface. It can display an icon, label, badge, and actions.
97
+ * It supports polymorphic rendering, allowing it to be rendered as different HTML elements.
98
+ * It also supports tooltips, active states, and click handling.
99
+ *
100
+ * @param {TabProps} props - The properties for the Tab component.
101
+ * @returns {JSX.Element} The rendered Tab component.
102
+ *
103
+ * @example
104
+ * ```jsx
105
+ * <Tab
106
+ * id="tab1"
107
+ * label="Tab 1"
108
+ * icon="home"
109
+ * iconBg="bg-blue-500"
110
+ * iconColor="text-white"
111
+ * badge="New"
112
+ * onClick={(id) => console.log(`Tab clicked: ${id}`)}
113
+ * onClose={() => console.log("Tab closed")}
114
+ * active={true}
115
+ * actions={<button>Action</button>}
116
+ * color="primary"
117
+ * tooltip="This is a tab"
118
+ * activeClassName="bg-blue-100"
119
+ * />
120
+ * // Renders a tab with label "Tab 1", home icon, blue background, white text, badge "New",
121
+ * // and an action button. The tab is active and has a tooltip.
122
+ * ```
123
+ *
124
+ * @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-tabpanel--docs} for more details.
125
+ */
95
126
  export const Tab = <Tag extends React.ElementType = "button">({
96
127
  ref,
97
128
  as,