@flikk/ui 1.0.0-beta.11 → 1.0.0-beta.13

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 (220) hide show
  1. package/dist/components/ai/ApprovalCard/ApprovalCard.js +1 -1
  2. package/dist/components/ai/MessageHistory/MessageHistory.js +1 -0
  3. package/dist/components/ai/PromptInput/PromptInput.js +7 -125
  4. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -77
  5. package/dist/components/ai/StreamingResponse/StreamingResponse.js +1 -0
  6. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +7 -7
  7. package/dist/components/ai/index.js +1 -0
  8. package/dist/components/core/Accordion/Accordion.d.ts +1 -1
  9. package/dist/components/core/Accordion/Accordion.js +2 -2
  10. package/dist/components/core/Accordion/Accordion.theme.d.ts +2 -2
  11. package/dist/components/core/Accordion/Accordion.theme.js +4 -4
  12. package/dist/components/core/Accordion/Accordion.types.d.ts +19 -20
  13. package/dist/components/core/Accordion/AccordionBody.d.ts +3 -0
  14. package/dist/components/core/Accordion/{AccordionContent.js → AccordionBody.js} +4 -4
  15. package/dist/components/core/Accordion/AccordionItem.js +1 -1
  16. package/dist/components/core/Accordion/AccordionTrigger.js +14 -7
  17. package/dist/components/core/Accordion/index.d.ts +2 -2
  18. package/dist/components/core/Alert/Alert.js +5 -1
  19. package/dist/components/core/Alert/Alert.types.d.ts +4 -4
  20. package/dist/components/core/Avatar/Avatar.js +22 -18
  21. package/dist/components/core/Avatar/Avatar.theme.js +1 -1
  22. package/dist/components/core/Avatar/Avatar.types.d.ts +9 -8
  23. package/dist/components/core/AvatarGroup/AvatarGroup.js +2 -2
  24. package/dist/components/core/Badge/Badge.js +7 -5
  25. package/dist/components/core/Badge/Badge.theme.js +11 -4
  26. package/dist/components/core/Badge/Badge.types.d.ts +2 -2
  27. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +7 -3
  28. package/dist/components/core/Breadcrumbs/Breadcrumbs.types.d.ts +1 -1
  29. package/dist/components/core/Button/Button.js +2 -8
  30. package/dist/components/core/Button/Button.theme.js +7 -7
  31. package/dist/components/core/Calendar/Calendar.js +3 -3
  32. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +5 -6
  33. package/dist/components/core/Card/Card.d.ts +2 -2
  34. package/dist/components/core/Card/Card.js +3 -3
  35. package/dist/components/core/Card/Card.theme.js +3 -3
  36. package/dist/components/core/Card/Card.types.d.ts +4 -4
  37. package/dist/components/core/Card/CardBody.d.ts +3 -0
  38. package/dist/components/core/Card/CardBody.js +11 -0
  39. package/dist/components/core/Card/index.d.ts +2 -2
  40. package/dist/components/core/Carousel/Carousel.js +4 -4
  41. package/dist/components/core/Carousel/Carousel.types.d.ts +4 -4
  42. package/dist/components/core/Carousel/CarouselBody.d.ts +4 -0
  43. package/dist/components/core/Carousel/{CarouselContent.js → CarouselBody.js} +3 -3
  44. package/dist/components/core/Carousel/index.d.ts +2 -1
  45. package/dist/components/core/ContextMenu/ContextMenu.d.ts +2 -2
  46. package/dist/components/core/ContextMenu/ContextMenu.js +6 -6
  47. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +2 -2
  48. package/dist/components/core/ContextMenu/ContextMenuBody.d.ts +6 -0
  49. package/dist/components/core/ContextMenu/{ContextMenuContent.js → ContextMenuBody.js} +4 -4
  50. package/dist/components/core/ContextMenu/ContextMenuSubBody.d.ts +6 -0
  51. package/dist/components/core/ContextMenu/{ContextMenuSubContent.js → ContextMenuSubBody.js} +4 -4
  52. package/dist/components/core/ContextMenu/index.d.ts +1 -1
  53. package/dist/components/core/Drawer/Drawer.d.ts +2 -2
  54. package/dist/components/core/Drawer/Drawer.js +28 -9
  55. package/dist/components/core/Drawer/Drawer.theme.js +1 -1
  56. package/dist/components/core/Drawer/Drawer.types.d.ts +8 -6
  57. package/dist/components/core/Drawer/DrawerBody.d.ts +5 -0
  58. package/dist/components/core/Drawer/DrawerBody.js +11 -0
  59. package/dist/components/core/Drawer/index.d.ts +2 -1
  60. package/dist/components/core/Dropdown/Dropdown.types.d.ts +3 -3
  61. package/dist/components/core/Dropdown/DropdownSection.js +3 -1
  62. package/dist/components/core/FileTypeIcon/FileTypeIcon.d.ts +3 -0
  63. package/dist/components/core/FileTypeIcon/FileTypeIcon.js +33 -0
  64. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.d.ts +2 -0
  65. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.js +12 -0
  66. package/dist/components/core/FileTypeIcon/FileTypeIcon.types.d.ts +19 -0
  67. package/dist/components/core/FileTypeIcon/fileTypes.d.ts +7 -0
  68. package/dist/components/core/FileTypeIcon/fileTypes.js +30 -0
  69. package/dist/components/core/FileTypeIcon/index.d.ts +2 -0
  70. package/dist/components/core/MenuItem/MenuItem.js +3 -1
  71. package/dist/components/core/MenuItem/MenuItem.theme.js +1 -1
  72. package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
  73. package/dist/components/core/Message/Message.d.ts +1 -1
  74. package/dist/components/core/Message/Message.js +3 -3
  75. package/dist/components/core/Message/Message.theme.js +2 -2
  76. package/dist/components/core/Message/Message.types.d.ts +7 -7
  77. package/dist/components/core/Message/MessageAvatar.d.ts +2 -2
  78. package/dist/components/core/Message/MessageAvatar.js +3 -3
  79. package/dist/components/core/Message/MessageBody.d.ts +8 -0
  80. package/dist/components/core/Message/{MessageContent.js → MessageBody.js} +3 -3
  81. package/dist/components/core/Message/index.d.ts +2 -0
  82. package/dist/components/core/Modal/Modal.js +5 -1
  83. package/dist/components/core/Modal/Modal.theme.js +1 -1
  84. package/dist/components/core/Modal/Modal.types.d.ts +5 -2
  85. package/dist/components/core/ModalStack/ModalStackModal.js +1 -0
  86. package/dist/components/core/PageHeading/PageHeading.types.d.ts +1 -1
  87. package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -1
  88. package/dist/components/core/Popover/Popover.d.ts +1 -1
  89. package/dist/components/core/Popover/Popover.js +4 -4
  90. package/dist/components/core/Popover/Popover.theme.d.ts +1 -1
  91. package/dist/components/core/Popover/Popover.theme.js +2 -2
  92. package/dist/components/core/Popover/Popover.types.d.ts +3 -3
  93. package/dist/components/core/Popover/PopoverBody.d.ts +7 -0
  94. package/dist/components/core/Popover/{PopoverContent.js → PopoverBody.js} +24 -13
  95. package/dist/components/core/Popover/index.d.ts +4 -3
  96. package/dist/components/core/Tabs/Tabs.animations.d.ts +2 -2
  97. package/dist/components/core/Tabs/Tabs.animations.js +3 -3
  98. package/dist/components/core/Tabs/Tabs.d.ts +1 -1
  99. package/dist/components/core/Tabs/Tabs.js +3 -3
  100. package/dist/components/core/Tabs/Tabs.theme.d.ts +1 -1
  101. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  102. package/dist/components/core/Tabs/Tabs.types.d.ts +9 -9
  103. package/dist/components/core/Tabs/TabsBody.d.ts +6 -0
  104. package/dist/components/core/Tabs/{TabsContent.js → TabsBody.js} +8 -8
  105. package/dist/components/core/Tabs/index.d.ts +2 -2
  106. package/dist/components/core/Tag/Tag.d.ts +1 -1
  107. package/dist/components/core/Tag/Tag.js +2 -2
  108. package/dist/components/core/Tag/Tag.types.d.ts +1 -1
  109. package/dist/components/core/Toast/Toast.js +5 -1
  110. package/dist/components/core/Toast/Toast.types.d.ts +9 -9
  111. package/dist/components/core/index.d.ts +1 -1
  112. package/dist/components/core/index.js +7 -3
  113. package/dist/components/data-display/Feed/Feed.animations.d.ts +40 -0
  114. package/dist/components/data-display/Feed/Feed.animations.js +26 -0
  115. package/dist/components/data-display/Feed/Feed.d.ts +5 -1
  116. package/dist/components/data-display/Feed/Feed.js +87 -52
  117. package/dist/components/data-display/Feed/Feed.theme.js +11 -13
  118. package/dist/components/data-display/Feed/Feed.types.d.ts +35 -34
  119. package/dist/components/data-display/Feed/index.d.ts +1 -1
  120. package/dist/components/data-display/GanttChart/GanttTaskBar.js +11 -9
  121. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +1 -1
  122. package/dist/components/data-display/KPI/KPI.js +2 -2
  123. package/dist/components/data-display/KPI/KPI.types.d.ts +3 -3
  124. package/dist/components/data-display/Metric/Metric.js +2 -2
  125. package/dist/components/data-display/Metric/Metric.types.d.ts +3 -3
  126. package/dist/components/data-display/Table/TableColumnManager.js +2 -1
  127. package/dist/components/data-display/Table/TableFilter.js +2 -1
  128. package/dist/components/data-display/Timeline/TimelineMarker.js +2 -2
  129. package/dist/components/effects/3d/index.d.ts +1 -1
  130. package/dist/components/effects/AIOrb/AIOrb.d.ts +1 -0
  131. package/dist/components/effects/AIOrb/AIOrb.js +3 -2
  132. package/dist/components/effects/AIOrb/AIOrb.types.d.ts +1 -0
  133. package/dist/components/effects/AIOrb/hooks/index.d.ts +2 -0
  134. package/dist/components/effects/AIOrb/hooks/useOrbState.d.ts +20 -0
  135. package/dist/components/effects/AIOrb/hooks/useOrbState.js +27 -0
  136. package/dist/components/effects/AIOrb/index.d.ts +2 -2
  137. package/dist/components/effects/AIOrb/variants/Aura/Aura.d.ts +3 -0
  138. package/dist/components/effects/AIOrb/variants/Aura/Aura.js +75 -0
  139. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.d.ts +28 -0
  140. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.js +191 -0
  141. package/dist/components/effects/AIOrb/variants/Aura/Aura.types.d.ts +53 -0
  142. package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.d.ts +17 -0
  143. package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.js +149 -0
  144. package/dist/components/effects/AIOrb/variants/Aura/index.d.ts +2 -0
  145. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +38 -7
  146. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.types.d.ts +6 -0
  147. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +34 -8
  148. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.types.d.ts +6 -0
  149. package/dist/components/effects/AIOrb/variants/index.d.ts +2 -0
  150. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
  151. package/dist/components/effects/CustomCursor/CustomCursor.js +50 -47
  152. package/dist/components/effects/GlassSurface/GlassSurface.js +24 -12
  153. package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +8 -0
  154. package/dist/components/forms/Checkbox/Checkbox.js +1 -1
  155. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +5 -5
  156. package/dist/components/forms/Checkbox/CheckboxGroup.js +2 -2
  157. package/dist/components/forms/ColorPicker/ColorPicker.d.ts +1 -1
  158. package/dist/components/forms/ColorPicker/ColorPicker.js +2 -2
  159. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +2 -2
  160. package/dist/components/forms/ColorPicker/ColorPickerBody.d.ts +7 -0
  161. package/dist/components/forms/ColorPicker/{ColorPickerContent.js → ColorPickerBody.js} +5 -5
  162. package/dist/components/forms/ColorPicker/index.d.ts +2 -2
  163. package/dist/components/forms/DatePicker/DatePicker.d.ts +7 -3
  164. package/dist/components/forms/DatePicker/DatePicker.js +6 -5
  165. package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
  166. package/dist/components/forms/DatePicker/DatePicker.types.d.ts +9 -4
  167. package/dist/components/forms/DatePicker/DatePickerBody.d.ts +7 -0
  168. package/dist/components/forms/DatePicker/{DatePickerContent.js → DatePickerBody.js} +10 -9
  169. package/dist/components/forms/DatePicker/index.d.ts +2 -2
  170. package/dist/components/forms/FileUpload/FileUpload.js +0 -78
  171. package/dist/components/forms/Input/Input.js +2 -2
  172. package/dist/components/forms/Input/Input.types.d.ts +4 -4
  173. package/dist/components/forms/Mention/Mention.js +2 -2
  174. package/dist/components/forms/Radio/Radio.js +1 -1
  175. package/dist/components/forms/Radio/Radio.types.d.ts +5 -5
  176. package/dist/components/forms/Radio/RadioGroup.js +1 -1
  177. package/dist/components/forms/Select/Select.js +2 -2
  178. package/dist/components/forms/Select/Select.types.d.ts +4 -4
  179. package/dist/components/forms/Switch/Switch.js +1 -1
  180. package/dist/components/forms/Switch/Switch.types.d.ts +4 -4
  181. package/dist/components/forms/Textarea/Textarea.js +2 -2
  182. package/dist/components/forms/Textarea/Textarea.types.d.ts +4 -4
  183. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -78
  184. package/dist/components/forms/index.d.ts +2 -2
  185. package/dist/components/forms/index.js +2 -80
  186. package/dist/components/layout/FormLayout/FormLayout.d.ts +0 -2
  187. package/dist/components/layout/FormLayout/FormLayout.js +12 -6
  188. package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -5
  189. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +8 -26
  190. package/dist/components/layout/FormLayout/FormLayoutSection.js +3 -2
  191. package/dist/components/layout/FormLayout/index.d.ts +1 -1
  192. package/dist/index.js +197 -199
  193. package/dist/styles.css +1 -1
  194. package/dist/utils/index.d.ts +1 -0
  195. package/dist/utils/paletteGenerator.d.ts +46 -0
  196. package/package.json +1 -1
  197. package/src/styles/theme.css +2 -6
  198. package/dist/components/core/Accordion/AccordionContent.d.ts +0 -3
  199. package/dist/components/core/Card/CardContent.d.ts +0 -3
  200. package/dist/components/core/Card/CardContent.js +0 -11
  201. package/dist/components/core/Carousel/CarouselContent.d.ts +0 -4
  202. package/dist/components/core/ContextMenu/ContextMenuContent.d.ts +0 -6
  203. package/dist/components/core/ContextMenu/ContextMenuSubContent.d.ts +0 -6
  204. package/dist/components/core/Drawer/DrawerContent.d.ts +0 -5
  205. package/dist/components/core/Drawer/DrawerContent.js +0 -11
  206. package/dist/components/core/Loader/Loader.d.ts +0 -24
  207. package/dist/components/core/Loader/Loader.js +0 -57
  208. package/dist/components/core/Loader/Loader.theme.d.ts +0 -27
  209. package/dist/components/core/Loader/Loader.theme.js +0 -60
  210. package/dist/components/core/Loader/Loader.types.d.ts +0 -71
  211. package/dist/components/core/Loader/index.d.ts +0 -2
  212. package/dist/components/core/Message/MessageContent.d.ts +0 -8
  213. package/dist/components/core/Popover/PopoverContent.d.ts +0 -7
  214. package/dist/components/core/Tabs/TabsContent.d.ts +0 -6
  215. package/dist/components/forms/ColorPicker/ColorPickerContent.d.ts +0 -7
  216. package/dist/components/forms/DatePicker/DatePickerContent.d.ts +0 -7
  217. package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +0 -3
  218. package/dist/components/layout/FormLayout/FormLayoutBody.js +0 -91
  219. package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +0 -3
  220. package/dist/components/layout/FormLayout/FormLayoutHeader.js +0 -12
@@ -6,11 +6,11 @@ import { useMessageContext } from './MessageContext.js';
6
6
  const MessageAvatar = React__default.forwardRef(({ src, name, fallback, className, ...props }, ref) => {
7
7
  const { variant } = useMessageContext();
8
8
  // Don't render avatar for system messages
9
- if (variant === 'system') {
9
+ if (variant === "system") {
10
10
  return null;
11
11
  }
12
- return (jsx("div", { ref: ref, className: className, ...props, children: jsx(Avatar, { src: src, alt: name, fallback: fallback, size: "xs" }) }));
12
+ return (jsx("div", { ref: ref, className: className, ...props, children: jsx(Avatar, { src: src, name: name, fallback: fallback, size: "xs" }) }));
13
13
  });
14
- MessageAvatar.displayName = 'Message.Avatar';
14
+ MessageAvatar.displayName = "Message.Avatar";
15
15
 
16
16
  export { MessageAvatar };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface MessageBodyProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * The message content
5
+ */
6
+ children: React.ReactNode;
7
+ }
8
+ export declare const MessageBody: React.ForwardRefExoticComponent<MessageBodyProps & React.RefAttributes<HTMLDivElement>>;
@@ -5,7 +5,7 @@ import { useMessageContext } from './MessageContext.js';
5
5
  import { messageTheme } from './Message.theme.js';
6
6
  import { TypeWriter } from './TypeWriter.js';
7
7
 
8
- const MessageContent = React__default.forwardRef(({ children, className, ...props }, ref) => {
8
+ const MessageBody = React__default.forwardRef(({ children, className, ...props }, ref) => {
9
9
  const { variant, role, isStreaming, typingSpeed } = useMessageContext();
10
10
  // Get variant-specific theme
11
11
  const variantTheme = messageTheme.variants[variant];
@@ -17,6 +17,6 @@ const MessageContent = React__default.forwardRef(({ children, className, ...prop
17
17
  typeof children === 'string';
18
18
  return (jsx("div", { ref: ref, className: bubbleStyle, ...props, children: shouldAnimate ? (jsx(TypeWriter, { text: children, speed: typingSpeed, enabled: true, className: "break-words" })) : typeof children === 'string' ? (jsx("p", { className: "break-words", children: children })) : (children) }));
19
19
  });
20
- MessageContent.displayName = 'Message.Content';
20
+ MessageBody.displayName = 'Message.Body';
21
21
 
22
- export { MessageContent };
22
+ export { MessageBody };
@@ -5,3 +5,5 @@ export { messageListTheme } from './MessageList.theme';
5
5
  export type { MessageListProps, MessageListTheme, MessageListThemeOverrides, } from './MessageList.types';
6
6
  export { TypeWriter } from './TypeWriter';
7
7
  export type { TypeWriterProps } from './TypeWriter';
8
+ export { MessageBody } from './MessageBody';
9
+ export type { MessageBodyProps } from './MessageBody';
@@ -32,6 +32,9 @@ const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnO
32
32
  setIsBodyScrollable(false);
33
33
  }
34
34
  }, [isOpen]);
35
+ // Detect whether size is a preset token or an arbitrary Tailwind class
36
+ const SIZE_TOKENS = ["sm", "md", "lg", "xl", "full"];
37
+ const isSizeToken = SIZE_TOKENS.includes(size);
35
38
  // Merge theme with overrides
36
39
  const theme = {
37
40
  ...modalTheme,
@@ -46,6 +49,7 @@ const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnO
46
49
  isOpen,
47
50
  onClose,
48
51
  size,
52
+ isSizeToken,
49
53
  closeOnOverlayClick,
50
54
  closeOnEsc,
51
55
  showCloseButton,
@@ -55,7 +59,7 @@ const ModalRoot = ({ isOpen, onClose, size = "md", variant = "default", closeOnO
55
59
  titleId,
56
60
  subtitleId,
57
61
  };
58
- return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(theme.container, (_a = theme.containerVariants) === null || _a === void 0 ? void 0 : _a[variant], modalSizeVariants[size], className), animations: {
62
+ return (jsx(Overlay, { isOpen: isOpen, onClose: onClose, closeOnOverlayClick: closeOnOverlayClick, closeOnEsc: closeOnEsc, position: "center", role: role, ariaModal: true, ariaLabelledBy: titleId, ariaDescribedBy: subtitleId, contentClassName: cn(theme.container, (_a = theme.containerVariants) === null || _a === void 0 ? void 0 : _a[variant], isSizeToken ? modalSizeVariants[size] : size, className), animations: {
59
63
  overlay: modalOverlayAnimations,
60
64
  content: modalContentAnimations,
61
65
  }, ...props, children: jsx(ModalContext.Provider, { value: contextValue, children: children }) }));
@@ -9,7 +9,7 @@ const modalTheme = {
9
9
  header: "flex items-start justify-between p-6 pb-0 shrink-0 border-b border-transparent gap-6 relative",
10
10
  headerContent: "flex flex-col items-start gap-2 flex-1",
11
11
  title: "text-lg leading-6 font-semibold text-[var(--color-text-primary)]",
12
- subtitle: "text-base text-[var(--color-text-secondary)] mt-0.5",
12
+ subtitle: "text-base text-[var(--color-text-muted)] mt-0.5",
13
13
  body: "flex-1 overflow-y-auto p-6 pb-3",
14
14
  footer: "flex items-center justify-end gap-2 p-6 py-3 border-t border-transparent",
15
15
  };
@@ -1,5 +1,7 @@
1
1
  import React from "react";
2
- export type ModalSize = "sm" | "md" | "lg" | "xl" | "full";
2
+ export type ModalSizeToken = "sm" | "md" | "lg" | "xl" | "full";
3
+ /** Preset size token or any arbitrary Tailwind width class, e.g. `"w-80"`, `"w-[50vw]"` */
4
+ export type ModalSize = ModalSizeToken | (string & {});
3
5
  export type ModalVariant = "default" | "translucent";
4
6
  export interface ModalTheme {
5
7
  overlay: string;
@@ -27,6 +29,7 @@ export interface ModalContextValue {
27
29
  isOpen: boolean;
28
30
  onClose: () => void;
29
31
  size: ModalSize;
32
+ isSizeToken: boolean;
30
33
  closeOnOverlayClick: boolean;
31
34
  closeOnEsc: boolean;
32
35
  showCloseButton: boolean;
@@ -56,7 +59,7 @@ export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "
56
59
  * - `alertdialog`: Alert dialog requiring user acknowledgment
57
60
  * @default "dialog"
58
61
  */
59
- role?: 'dialog' | 'alertdialog';
62
+ role?: "dialog" | "alertdialog";
60
63
  children: React.ReactNode;
61
64
  className?: string;
62
65
  theme?: ModalThemeOverrides;
@@ -34,6 +34,7 @@ const ModalStackModal = ({ size = "md", variant = "default", showCloseButton = t
34
34
  isOpen: true,
35
35
  onClose: closeHandler,
36
36
  size,
37
+ isSizeToken: ["sm", "md", "lg", "xl", "full"].includes(size),
37
38
  closeOnOverlayClick: true,
38
39
  closeOnEsc: true,
39
40
  showCloseButton,
@@ -42,7 +42,7 @@ export interface PageHeadingIconProps extends HTMLAttributes<HTMLDivElement> {
42
42
  }
43
43
  export interface PageHeadingBackButtonProps {
44
44
  /** Text label next to the back arrow. @default "Back" */
45
- label?: string;
45
+ label?: ReactNode;
46
46
  onClick?: () => void;
47
47
  className?: string;
48
48
  }
@@ -5,7 +5,9 @@ import { ArrowLeftIcon } from '@heroicons/react/20/solid';
5
5
  import { Button } from '../Button/Button.js';
6
6
 
7
7
  const PageHeadingBackButton = React__default.forwardRef(({ label = "Back", onClick, className, ...props }, ref) => {
8
- return (jsxs(Button, { ref: ref, variant: "link", color: "neutral", size: "sm", onClick: onClick, className: cn("mb-2 w-fit", className), ...props, children: [jsx(ArrowLeftIcon, { className: "size-4" }), label] }));
8
+ return (jsxs(Button, { ref: ref, variant: "link", color: "neutral", size: "sm", onClick: onClick, className: cn("mb-2 w-fit", className), ...props, children: [jsx(ArrowLeftIcon, { className: "size-4" }), typeof label === 'string'
9
+ ? jsx("span", { children: label })
10
+ : label] }));
9
11
  });
10
12
  PageHeadingBackButton.displayName = "PageHeadingBackButton";
11
13
 
@@ -2,5 +2,5 @@ import React from "react";
2
2
  import { PopoverRootProps as PopoverProps } from "./Popover.types";
3
3
  export declare const Popover: (({ children, className, isOpen: controlledIsOpen, defaultIsOpen, onOpenChange, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme: themeOverrides, darkMode, ...props }: PopoverProps) => import("react/jsx-runtime").JSX.Element) & {
4
4
  Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<any>>;
5
- Content: React.ForwardRefExoticComponent<import("./Popover.types").PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
5
+ Body: React.ForwardRefExoticComponent<import("./Popover.types").PopoverBodyProps & React.RefAttributes<HTMLDivElement>>;
6
6
  };
@@ -3,7 +3,7 @@ import { useId, useState, useRef, useCallback } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { PopoverContext } from './PopoverContext.js';
5
5
  import { PopoverTrigger } from './PopoverTrigger.js';
6
- import { PopoverContent } from './PopoverContent.js';
6
+ import { PopoverBody } from './PopoverBody.js';
7
7
  import { popoverTheme } from './Popover.theme.js';
8
8
 
9
9
  /**
@@ -16,9 +16,9 @@ import { popoverTheme } from './Popover.theme.js';
16
16
  * <Popover.Trigger>
17
17
  * <Button>Open Popover</Button>
18
18
  * </Popover.Trigger>
19
- * <Popover.Content>
19
+ * <Popover.Body>
20
20
  * <div>Popover content</div>
21
- * </Popover.Content>
21
+ * </Popover.Body>
22
22
  * </Popover>
23
23
  * ```
24
24
  */
@@ -66,7 +66,7 @@ const PopoverRoot = ({ children, className, isOpen: controlledIsOpen, defaultIsO
66
66
  // Export as a unified component
67
67
  const Popover = Object.assign(PopoverRoot, {
68
68
  Trigger: PopoverTrigger,
69
- Content: PopoverContent,
69
+ Body: PopoverBody,
70
70
  });
71
71
 
72
72
  export { Popover };
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export interface PopoverTheme {
5
5
  baseStyle: string;
6
- contentStyle: string;
6
+ bodyStyle: string;
7
7
  }
8
8
  /**
9
9
  * Default theme for the Popover component
@@ -4,8 +4,8 @@
4
4
  const popoverTheme = {
5
5
  // Base styles for the popover
6
6
  baseStyle: "z-50 outline-none",
7
- // Content styles
8
- contentStyle: "bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))] dark:bg-[var(--color-background-secondary)] ",
7
+ // Body styles
8
+ bodyStyle: "bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-4 max-w-[min(24rem,calc(100vw-2rem))] dark:bg-[var(--color-background-secondary)] ",
9
9
  };
10
10
 
11
11
  export { popoverTheme };
@@ -44,7 +44,7 @@ export interface PopoverTriggerProps {
44
44
  className?: string;
45
45
  [key: string]: unknown;
46
46
  }
47
- export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {
47
+ export interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {
48
48
  children: ReactNode;
49
49
  animation?: boolean;
50
50
  portal?: boolean;
@@ -61,6 +61,6 @@ export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement
61
61
  export interface PopoverThemeOverrides {
62
62
  /** Base style for the popover */
63
63
  baseStyle?: string;
64
- /** Content style for the popover */
65
- contentStyle?: string;
64
+ /** Body style for the popover */
65
+ bodyStyle?: string;
66
66
  }
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { PopoverBodyProps } from "./Popover.types";
3
+ /**
4
+ * PopoverBody component displays the body/content of the popover
5
+ */
6
+ declare const PopoverBody: React.ForwardRefExoticComponent<PopoverBodyProps & React.RefAttributes<HTMLDivElement>>;
7
+ export { PopoverBody };
@@ -48,21 +48,23 @@ const useDarkMode = () => {
48
48
  return isDark;
49
49
  };
50
50
  /**
51
- * PopoverContent component displays the content of the popover
51
+ * PopoverBody component displays the body/content of the popover
52
52
  */
53
- const PopoverContent = React__default.forwardRef(({ children, className, animation = true, portal = true, scrollable = false, maxHeight, ...props }, ref) => {
53
+ const PopoverBody = React__default.forwardRef(({ children, className, animation = true, portal = true, scrollable = false, maxHeight, ...props }, ref) => {
54
54
  const { isOpen, onOpenChange, triggerRef, contentRef, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme, contentId, } = usePopoverContext();
55
55
  const shouldReduceMotion = useReducedMotion();
56
56
  const localRef = useRef(null);
57
57
  // Use the same positioning hook as Select/Tooltip (now supports all 12 placements)
58
- const { position, cssVariables, contentRef: portalContentRef } = useSelectPortal({
58
+ const { position, cssVariables, contentRef: portalContentRef, } = useSelectPortal({
59
59
  triggerRef,
60
60
  isOpen: isOpen || false,
61
61
  placement: placement,
62
62
  offset: offset || 8,
63
63
  autoWidth: true,
64
- onClose: () => { if (!preventClose)
65
- onOpenChange(false); },
64
+ onClose: () => {
65
+ if (!preventClose)
66
+ onOpenChange(false);
67
+ },
66
68
  stickyTracking: true,
67
69
  });
68
70
  // Click outside detection (active when no backdrop — with backdrop, Overlay handles it)
@@ -70,7 +72,8 @@ const PopoverContent = React__default.forwardRef(({ children, className, animati
70
72
  var _a;
71
73
  if (hasBackdrop)
72
74
  return; // Overlay handles click-outside via backdrop
73
- if (e.target === triggerRef.current || ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
75
+ if (e.target === triggerRef.current ||
76
+ ((_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
74
77
  return;
75
78
  }
76
79
  if (closeOnClickOutside && !preventClose) {
@@ -103,15 +106,18 @@ const PopoverContent = React__default.forwardRef(({ children, className, animati
103
106
  if (contentRef) {
104
107
  contentRef.current = el;
105
108
  }
106
- if (portalContentRef && typeof portalContentRef === 'object' && 'current' in portalContentRef) {
107
- portalContentRef.current = el;
109
+ if (portalContentRef &&
110
+ typeof portalContentRef === "object" &&
111
+ "current" in portalContentRef) {
112
+ portalContentRef.current =
113
+ el;
108
114
  }
109
115
  }, [ref, contentRef, portalContentRef]);
110
116
  const isDarkMode = useDarkMode();
111
117
  const isClient = useIsClient();
112
118
  // Extract DOM props to avoid type conflicts with Framer Motion
113
119
  const { onDrag, onDragStart, onDragEnd, onAnimationStart, onAnimationEnd, ...domProps } = props;
114
- const contentClasses = cn(theme.baseStyle, theme.contentStyle, "popover-content", scrollable && "overflow-y-auto", className);
120
+ const contentClasses = cn(theme.baseStyle, theme.bodyStyle, "popover-content", scrollable && "overflow-y-auto", className);
115
121
  const contentPositionStyle = {
116
122
  ...cssVariables,
117
123
  position: "fixed",
@@ -127,16 +133,21 @@ const PopoverContent = React__default.forwardRef(({ children, className, animati
127
133
  if (!preventClose)
128
134
  onOpenChange(false);
129
135
  }, closeOnOverlayClick: closeOnClickOutside && !preventClose, closeOnEsc: closeOnEsc && !preventClose, enableScrollLock: false, enableFocusTrap: false, position: "none", role: "dialog", ariaModal: true, contentClassName: contentClasses, contentStyle: contentPositionStyle, animations: animation && !shouldReduceMotion
130
- ? { overlay: overlayBackdropAnimations, content: overlayContentAnimations }
136
+ ? {
137
+ overlay: overlayBackdropAnimations,
138
+ content: overlayContentAnimations,
139
+ }
131
140
  : undefined, children: jsx("div", { id: contentId, "data-state": isOpen ? "open" : "closed", "data-placement": placement, "data-trigger": triggerType, ...domProps, children: children }) }));
132
141
  }
133
142
  // Without backdrop: manual portal + positioning + escape + click-outside
134
- const popoverContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, id: contentId, className: cn("fixed z-50", contentClasses), style: contentPositionStyle, role: "dialog", "aria-modal": "true", variants: shouldReduceMotion || !animation ? {} : popoverContentVariants, initial: shouldReduceMotion || !animation ? undefined : "hidden", animate: shouldReduceMotion || !animation ? undefined : "visible", exit: shouldReduceMotion || !animation ? undefined : "exit", transition: shouldReduceMotion || !animation ? { duration: 0 } : popoverTransitions.content, "data-state": isOpen ? "open" : "closed", "data-placement": placement, "data-trigger": triggerType, onClick: (e) => e.stopPropagation(), ...domProps, children: children })) }));
143
+ const popoverContent = (jsx(AnimatePresence, { children: isOpen && (jsx(motion.div, { ref: handleRef, id: contentId, className: cn("fixed z-50", contentClasses), style: contentPositionStyle, role: "dialog", "aria-modal": "true", variants: shouldReduceMotion || !animation ? {} : popoverContentVariants, initial: shouldReduceMotion || !animation ? undefined : "hidden", animate: shouldReduceMotion || !animation ? undefined : "visible", exit: shouldReduceMotion || !animation ? undefined : "exit", transition: shouldReduceMotion || !animation
144
+ ? { duration: 0 }
145
+ : popoverTransitions.content, "data-state": isOpen ? "open" : "closed", "data-placement": placement, "data-trigger": triggerType, onClick: (e) => e.stopPropagation(), ...domProps, children: children })) }));
135
146
  if (portal && isClient) {
136
147
  return createPortal(jsx("div", { className: isDarkMode ? "dark" : undefined, children: popoverContent }), document.body);
137
148
  }
138
149
  return popoverContent;
139
150
  });
140
- PopoverContent.displayName = "PopoverContent";
151
+ PopoverBody.displayName = "Popover.Body";
141
152
 
142
- export { PopoverContent };
153
+ export { PopoverBody };
@@ -1,5 +1,6 @@
1
1
  import { Popover } from './Popover';
2
2
  import { PopoverContext, usePopoverContext } from './PopoverContext';
3
- import { PopoverRootProps as PopoverProps, PopoverContentProps, PopoverTriggerProps, PopoverContextValue, PopoverPlacement, PopoverTriggerType, PopoverThemeOverrides } from './Popover.types';
4
- export { Popover, PopoverContext, usePopoverContext };
5
- export type { PopoverProps, PopoverContentProps, PopoverTriggerProps, PopoverContextValue, PopoverPlacement, PopoverTriggerType, PopoverThemeOverrides };
3
+ import { PopoverRootProps as PopoverProps, PopoverBodyProps, PopoverTriggerProps, PopoverContextValue, PopoverPlacement, PopoverTriggerType, PopoverThemeOverrides } from './Popover.types';
4
+ import { PopoverBody } from './PopoverBody';
5
+ export { Popover, PopoverBody, PopoverContext, usePopoverContext };
6
+ export type { PopoverProps, PopoverBodyProps, PopoverTriggerProps, PopoverContextValue, PopoverPlacement, PopoverTriggerType, PopoverThemeOverrides };
@@ -17,7 +17,7 @@ export interface UnderlinePosition {
17
17
  */
18
18
  export declare const getUnderlineTransition: (shouldReduceMotion: boolean | null) => Transition;
19
19
  /**
20
- * Get TabsContent animation variants for directional fade animations
20
+ * Get TabsBody animation variants for directional fade animations
21
21
  * Provides smooth fade-in from bottom and fade-out to top transitions
22
22
  */
23
- export declare const getTabsContentVariants: (shouldReduceMotion: boolean | null) => Variants | undefined;
23
+ export declare const getTabsBodyVariants: (shouldReduceMotion: boolean | null) => Variants | undefined;
@@ -45,10 +45,10 @@ const getUnderlineTransition = (shouldReduceMotion) => {
45
45
  };
46
46
  };
47
47
  /**
48
- * Get TabsContent animation variants for directional fade animations
48
+ * Get TabsBody animation variants for directional fade animations
49
49
  * Provides smooth fade-in from bottom and fade-out to top transitions
50
50
  */
51
- const getTabsContentVariants = (shouldReduceMotion) => {
51
+ const getTabsBodyVariants = (shouldReduceMotion) => {
52
52
  if (shouldReduceMotion !== null && shouldReduceMotion !== void 0 ? shouldReduceMotion : false) {
53
53
  // Reduced motion: no animation variants
54
54
  return undefined;
@@ -81,4 +81,4 @@ const getTabsContentVariants = (shouldReduceMotion) => {
81
81
  };
82
82
  };
83
83
 
84
- export { getTabsContentVariants, getTabsTriggerVariants, getUnderlineTransition };
84
+ export { getTabsBodyVariants, getTabsTriggerVariants, getUnderlineTransition };
@@ -3,5 +3,5 @@ import { TabsProps } from "./Tabs.types";
3
3
  export declare const Tabs: React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>> & {
4
4
  List: React.ForwardRefExoticComponent<import("./Tabs.types").TabsListProps & React.RefAttributes<HTMLDivElement>>;
5
5
  Trigger: React.ForwardRefExoticComponent<import("./Tabs.types").TabsTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
- Content: React.ForwardRefExoticComponent<import("./Tabs.types").TabsContentProps & React.RefAttributes<HTMLDivElement>>;
6
+ Body: React.ForwardRefExoticComponent<import("./Tabs.types").TabsBodyProps & React.RefAttributes<HTMLDivElement>>;
7
7
  };
@@ -5,11 +5,11 @@ import { tabsTheme } from './Tabs.theme.js';
5
5
  import { TabsContext } from './TabsContext.js';
6
6
  import { TabsList } from './TabsList.js';
7
7
  import { TabsTrigger } from './TabsTrigger.js';
8
- import { TabsContent } from './TabsContent.js';
8
+ import { TabsBody } from './TabsBody.js';
9
9
 
10
10
  /**
11
11
  * Tabs component for organizing content into separate views
12
- * Uses compound component pattern with Tabs.List, Tabs.Trigger, and Tabs.Content
12
+ * Uses compound component pattern with Tabs.List, Tabs.Trigger, and Tabs.Body
13
13
  * Supports optional Framer Motion animations and comprehensive accessibility
14
14
  */
15
15
  const TabsComponent = React__default.forwardRef(({ value, defaultValue, onValueChange, orientation = "horizontal", size = "md", disabled = false, children, className, darkMode = false, ...props }, ref) => {
@@ -84,7 +84,7 @@ TabsComponent.displayName = "Tabs";
84
84
  const Tabs = Object.assign(TabsComponent, {
85
85
  List: TabsList,
86
86
  Trigger: TabsTrigger,
87
- Content: TabsContent,
87
+ Body: TabsBody,
88
88
  });
89
89
 
90
90
  export { Tabs };
@@ -7,7 +7,7 @@ export interface TabsTheme {
7
7
  listStyle: string;
8
8
  triggerStyle: string;
9
9
  triggerSizes: Record<TabsSize, string>;
10
- contentStyle: string;
10
+ bodyStyle: string;
11
11
  underlineStyle: string;
12
12
  }
13
13
  /**
@@ -13,8 +13,8 @@ const tabsTheme = {
13
13
  sm: "px-2 py-1.5 text-base gap-1",
14
14
  md: "px-2 py-2 text-base gap-1",
15
15
  },
16
- // TabsContent styles with proper CSS variables
17
- contentStyle: "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2",
16
+ // TabsBody styles with proper CSS variables
17
+ bodyStyle: "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2",
18
18
  // Sliding underline styles
19
19
  underlineStyle: "absolute bottom-0 h-0.5 bg-[var(--color-primary)] transition-none",
20
20
  };
@@ -23,8 +23,8 @@ export type TabsOrientation = "horizontal";
23
23
  * <Tabs.Trigger value="tab1">Tab 1</Tabs.Trigger>
24
24
  * <Tabs.Trigger value="tab2">Tab 2</Tabs.Trigger>
25
25
  * </Tabs.List>
26
- * <Tabs.Content value="tab1">Content 1</Tabs.Content>
27
- * <Tabs.Content value="tab2">Content 2</Tabs.Content>
26
+ * <Tabs.Body value="tab1">Content 1</Tabs.Body>
27
+ * <Tabs.Body value="tab2">Content 2</Tabs.Body>
28
28
  * </Tabs>
29
29
  *
30
30
  * // Uncontrolled mode
@@ -46,7 +46,7 @@ export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'o
46
46
  size?: TabsSize;
47
47
  /** Whether all tabs are disabled - individual triggers can also be disabled */
48
48
  disabled?: boolean;
49
- /** Children components - typically Tabs.List and Tabs.Content components */
49
+ /** Children components - typically Tabs.List and Tabs.Body components */
50
50
  children?: React.ReactNode;
51
51
  /**
52
52
  * Force dark mode styling for the component. Use when placing the component
@@ -98,20 +98,20 @@ export interface TabsTriggerProps extends React.HTMLAttributes<HTMLButtonElement
98
98
  'aria-label'?: string;
99
99
  }
100
100
  /**
101
- * TabsContent component props - content panel for each tab
101
+ * TabsBody component props - content panel for each tab
102
102
  * @example
103
103
  * ```tsx
104
- * <Tabs.Content value="profile">
104
+ * <Tabs.Body value="profile">
105
105
  * <UserProfile data={profileData} />
106
- * </Tabs.Content>
106
+ * </Tabs.Body>
107
107
  *
108
108
  * // Force mount content for performance or state preservation
109
- * <Tabs.Content value="settings" forceMount>
109
+ * <Tabs.Body value="settings" forceMount>
110
110
  * <SettingsForm /> // Form state preserved when tab is inactive
111
- * </Tabs.Content>
111
+ * </Tabs.Body>
112
112
  * ```
113
113
  */
114
- export interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {
114
+ export interface TabsBodyProps extends React.HTMLAttributes<HTMLDivElement> {
115
115
  /** The value that corresponds to a TabsTrigger value - determines when content is shown */
116
116
  value: string;
117
117
  /** Whether to keep content mounted in DOM when inactive (useful for preserving form state) */
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { TabsBodyProps } from "./Tabs.types";
3
+ /**
4
+ * TabsBody component displays content panels for tabs with directional fade animations
5
+ */
6
+ export declare const TabsBody: React.ForwardRefExoticComponent<TabsBodyProps & React.RefAttributes<HTMLDivElement>>;
@@ -4,12 +4,12 @@ import { useReducedMotion, motion, AnimatePresence } from 'motion/react';
4
4
  import { cn } from '../../../utils/cn.js';
5
5
  import { tabsTheme } from './Tabs.theme.js';
6
6
  import { useTabsContext } from './TabsContext.js';
7
- import { getTabsContentVariants } from './Tabs.animations.js';
7
+ import { getTabsBodyVariants } from './Tabs.animations.js';
8
8
 
9
9
  /**
10
- * TabsContent component displays content panels for tabs with directional fade animations
10
+ * TabsBody component displays content panels for tabs with directional fade animations
11
11
  */
12
- const TabsContent = React__default.forwardRef(({ value, forceMount = false, children, className, ...props }, ref) => {
12
+ const TabsBody = React__default.forwardRef(({ value, forceMount = false, children, className, ...props }, ref) => {
13
13
  const { value: selectedValue, orientation } = useTabsContext();
14
14
  const shouldReduceMotion = useReducedMotion();
15
15
  // Check if we're in Storybook and should disable animations
@@ -18,10 +18,10 @@ const TabsContent = React__default.forwardRef(({ value, forceMount = false, chil
18
18
  const isSelected = value === selectedValue;
19
19
  const shouldRender = forceMount || isSelected;
20
20
  // Compute animation variants without a global cache (HMR-safe)
21
- const contentVariants = useMemo(() => getTabsContentVariants(shouldDisableAnimations), [shouldDisableAnimations]);
21
+ const contentVariants = useMemo(() => getTabsBodyVariants(shouldDisableAnimations), [shouldDisableAnimations]);
22
22
  // For forceMount, we handle visibility differently to preserve DOM
23
23
  if (forceMount) {
24
- return (jsx(motion.div, { ref: ref, role: "tabpanel", "aria-labelledby": `${value}-tab`, id: `${value}-content`, tabIndex: 0, className: cn(tabsTheme.contentStyle, !isSelected && "hidden", // Hide when not selected but force mounted
24
+ return (jsx(motion.div, { ref: ref, role: "tabpanel", "aria-labelledby": `${value}-tab`, id: `${value}-content`, tabIndex: 0, className: cn(tabsTheme.bodyStyle, !isSelected && "hidden", // Hide when not selected but force mounted
25
25
  className // User overrides take precedence
26
26
  ), "data-state": isSelected ? "active" : "inactive", "data-orientation": orientation, style: {
27
27
  // Ensure proper stacking context for animations
@@ -39,12 +39,12 @@ const TabsContent = React__default.forwardRef(({ value, forceMount = false, chil
39
39
  exit: "exit",
40
40
  variants: contentVariants,
41
41
  };
42
- return (jsx(AnimatePresence, { mode: "wait", children: isSelected && (jsx(motion.div, { ref: ref, role: "tabpanel", "aria-labelledby": `${value}-tab`, id: `${value}-content`, tabIndex: 0, className: cn(tabsTheme.contentStyle, className // User overrides take precedence
42
+ return (jsx(AnimatePresence, { mode: "wait", children: isSelected && (jsx(motion.div, { ref: ref, role: "tabpanel", "aria-labelledby": `${value}-tab`, id: `${value}-content`, tabIndex: 0, className: cn(tabsTheme.bodyStyle, className // User overrides take precedence
43
43
  ), "data-state": "active", "data-orientation": orientation, style: {
44
44
  // Ensure proper stacking context for animations
45
45
  position: "relative",
46
46
  }, ...animationProps, ...props, children: children }, `content-${value}`)) }));
47
47
  });
48
- TabsContent.displayName = "TabsContent";
48
+ TabsBody.displayName = "Tabs.Body";
49
49
 
50
- export { TabsContent };
50
+ export { TabsBody };
@@ -1,6 +1,6 @@
1
1
  export { Tabs } from './Tabs';
2
2
  export { TabsList } from './TabsList';
3
3
  export { TabsTrigger } from './TabsTrigger';
4
- export { TabsContent } from './TabsContent';
4
+ export { TabsBody } from './TabsBody';
5
5
  export { TabsContext, useTabsContext } from './TabsContext';
6
- export type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps, TabsSize, TabsOrientation, TabsContextValue } from './Tabs.types';
6
+ export type { TabsProps, TabsListProps, TabsTriggerProps, TabsBodyProps, TabsSize, TabsOrientation, TabsContextValue } from './Tabs.types';
@@ -7,7 +7,7 @@ import { TagProps } from "./Tag.types";
7
7
  * @example
8
8
  * ```tsx
9
9
  * <Tag onRemove={() => handleRemove('tag1')}>JavaScript</Tag>
10
- * <Tag avatar={{ src: "/avatar.jpg", alt: "Alice" }} onRemove={() => {}}>Alice</Tag>
10
+ * <Tag avatar={{ src: "/avatar.jpg", name: "Alice" }} onRemove={() => {}}>Alice</Tag>
11
11
  * <Tag startContent={<CodeIcon className="size-4" />} onRemove={() => {}}>React</Tag>
12
12
  * ```
13
13
  */
@@ -14,7 +14,7 @@ import { tagVariants, tagLayoutTransition } from './Tag.animations.js';
14
14
  * @example
15
15
  * ```tsx
16
16
  * <Tag onRemove={() => handleRemove('tag1')}>JavaScript</Tag>
17
- * <Tag avatar={{ src: "/avatar.jpg", alt: "Alice" }} onRemove={() => {}}>Alice</Tag>
17
+ * <Tag avatar={{ src: "/avatar.jpg", name: "Alice" }} onRemove={() => {}}>Alice</Tag>
18
18
  * <Tag startContent={<CodeIcon className="size-4" />} onRemove={() => {}}>React</Tag>
19
19
  * ```
20
20
  */
@@ -47,7 +47,7 @@ const Tag = React__default.forwardRef(({ children, size = "md", removable = true
47
47
  // Avatar takes precedence over startContent
48
48
  const renderLeadingContent = () => {
49
49
  if (avatar) {
50
- return (jsx(Avatar, { src: avatar.src, alt: avatar.alt, fallback: avatar.fallback, initialsCount: avatar.initialsCount, className: cn(theme.avatarSizes[size], "rounded-full border-0") }));
50
+ return (jsx(Avatar, { src: avatar.src, name: avatar.name, fallback: avatar.fallback, initialsCount: avatar.initialsCount, className: cn(theme.avatarSizes[size], "rounded-full border-0") }));
51
51
  }
52
52
  if (startContent) {
53
53
  return (jsx("span", { className: cn("inline-flex items-center", theme.startContentSizes[size]), children: startContent }));
@@ -18,7 +18,7 @@ export interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "o
18
18
  */
19
19
  avatar?: {
20
20
  src?: string;
21
- alt: string;
21
+ name: string;
22
22
  fallback?: ReactNode;
23
23
  initialsCount?: number;
24
24
  };
@@ -73,7 +73,11 @@ onDismiss, index = 0, isExpanded = false, totalToasts = 1, onMouseEnter, onMouse
73
73
  }, [stackingStyle.zIndex, index]);
74
74
  const toastNode = (jsxs(motion.div, { ref: setRefs, layout: true, initial: shouldReduceMotion ? false : toastAnimations.initial, animate: animateValue, exit: shouldReduceMotion
75
75
  ? { ...toastAnimations.exit, transition: { duration: 0 } }
76
- : toastAnimations.exit, transition: shouldReduceMotion ? { duration: 0 } : toastAnimations.transition, className: cn(toastTheme.baseStyle, isTextOnly && 'items-center', ((_a = toastTheme.variants) === null || _a === void 0 ? void 0 : _a[variant]) || "", 'pointer-events-auto', index > 0 && !isExpanded && 'absolute top-0 left-0', className), style: styleValue, role: "alert", "aria-live": "polite", children: [jsx("div", { className: isTextOnly ? toastTheme.iconCenteredStyle : toastTheme.iconStyle, children: resolvedIcon }), jsxs("div", { className: "flex-1 min-w-0", children: [title && (jsx("div", { className: isTextOnly ? toastTheme.textOnlyStyle : toastTheme.titleStyle, children: title })), subtitle && (jsx("div", { className: toastTheme.subtitleStyle, children: subtitle })), action && (jsx("div", { className: "mt-2", children: jsx("button", { type: "button", className: toastTheme.actionStyle, onClick: handleActionClick, children: action.label }) }))] }), dismissible && (jsx("button", { type: "button", className: isTextOnly ? toastTheme.closeButtonCenteredStyle : toastTheme.closeButtonStyle, onClick: handleDismiss, "aria-label": "Dismiss notification", children: jsx(XMarkIcon, { className: "w-4 h-4" }) }))] }));
76
+ : toastAnimations.exit, transition: shouldReduceMotion ? { duration: 0 } : toastAnimations.transition, className: cn(toastTheme.baseStyle, isTextOnly && 'items-center', ((_a = toastTheme.variants) === null || _a === void 0 ? void 0 : _a[variant]) || "", 'pointer-events-auto', index > 0 && !isExpanded && 'absolute top-0 left-0', className), style: styleValue, role: "alert", "aria-live": "polite", children: [jsx("div", { className: isTextOnly ? toastTheme.iconCenteredStyle : toastTheme.iconStyle, children: resolvedIcon }), jsxs("div", { className: "flex-1 min-w-0", children: [title && (typeof title === 'string'
77
+ ? jsx("div", { className: isTextOnly ? toastTheme.textOnlyStyle : toastTheme.titleStyle, children: title })
78
+ : title), subtitle && (typeof subtitle === 'string'
79
+ ? jsx("div", { className: toastTheme.subtitleStyle, children: subtitle })
80
+ : subtitle), action && (jsx("div", { className: "mt-2", children: jsx("button", { type: "button", className: toastTheme.actionStyle, onClick: handleActionClick, children: action.label }) }))] }), dismissible && (jsx("button", { type: "button", className: isTextOnly ? toastTheme.closeButtonCenteredStyle : toastTheme.closeButtonStyle, onClick: handleDismiss, "aria-label": "Dismiss notification", children: jsx(XMarkIcon, { className: "w-4 h-4" }) }))] }));
77
81
  if (darkMode) {
78
82
  return jsx("div", { className: "dark", children: toastNode });
79
83
  }