diff --git a/.changeset/rich-ads-tease.md b/.changeset/rich-ads-tease.md
new file mode 100644
index 0000000..e9a7bc0
--- /dev/null
+++ b/.changeset/rich-ads-tease.md
@@ -0,0 +1,5 @@
+---
+'@sweatpants/react': patch
+---
+
+Fix forwardRef warning, align Popover and Tooltip APIs
diff --git a/libra/components/Popover.libra.tsx b/libra/components/Popover.libra.tsx
index ab33bb6..3878840 100644
--- a/libra/components/Popover.libra.tsx
+++ b/libra/components/Popover.libra.tsx
@@ -4,21 +4,21 @@ import { Button, Popover, Text } from '../../packages/react/src';
directory('Popover', () => {
add('Default', () => {
return (
-
+
Content
-
+
);
});
add('Controlled', () => {
const [open, setOpen] = useState(false);
return (
-
+
@@ -28,7 +28,7 @@ directory('Popover', () => {
-
+
);
});
});
diff --git a/packages/react/src/date-field/DateField.tsx b/packages/react/src/date-field/DateField.tsx
index 48534e7..e4b5447 100644
--- a/packages/react/src/date-field/DateField.tsx
+++ b/packages/react/src/date-field/DateField.tsx
@@ -115,7 +115,7 @@ const DateField = forwardRef(
};
return (
-
+
(
{...datePickerProps}
/>
-
+
);
},
);
diff --git a/packages/react/src/popover/popover.tsx b/packages/react/src/popover/popover.tsx
index 30715c3..1e2ccb0 100644
--- a/packages/react/src/popover/popover.tsx
+++ b/packages/react/src/popover/popover.tsx
@@ -1,13 +1,6 @@
'use client';
-import {
- createContext,
- forwardRef,
- ForwardRefExoticComponent,
- useContext,
- useState,
- type FC,
-} from 'react';
+import { createContext, useContext, useState, type FC } from 'react';
import * as RadixPopover from '@radix-ui/react-popover';
import { motion, AnimatePresence } from 'framer-motion';
import { css, cx } from '@styles/css';
@@ -15,23 +8,13 @@ import { Card } from '../card/Card';
const PopoverContext = createContext<{ open?: boolean }>({});
-const Trigger: FC = ({
- children,
- ...rest
-}) => {
- return (
-
- {children}
-
- );
-};
-
const Content: FC = ({
children,
className,
...rest
}) => {
const context = useContext(PopoverContext);
+
return (
{context.open ?
@@ -76,43 +59,44 @@ const Content: FC = ({
);
};
-const Popover = forwardRef(
- (props) => {
- const {
- children,
- open: controlledOpen,
- defaultOpen,
- onOpenChange,
- ...rest
- } = props;
+const Root: FC = (props) => {
+ const {
+ children,
+ open: controlledOpen,
+ defaultOpen,
+ onOpenChange,
+ ...rest
+ } = props;
- const [open, setOpen] = useState(defaultOpen ?? controlledOpen ?? false);
+ const [open, setOpen] = useState(defaultOpen ?? controlledOpen ?? false);
- const handleOpenChange = (value: boolean) => {
- setOpen(value);
- onOpenChange?.(value);
- };
+ const handleOpenChange = (value: boolean) => {
+ setOpen(value);
+ onOpenChange?.(value);
+ };
- const finalOpen = controlledOpen ?? open;
+ const finalOpen = controlledOpen ?? open;
- return (
-
-
- {children}
-
-
- );
- },
-) as ForwardRefExoticComponent & {
- Trigger: typeof Trigger;
- Content: typeof Content;
+ return (
+
+
+ {children}
+
+
+ );
};
-Popover.Trigger = Trigger;
-Popover.Content = Content;
+Root.displayName = 'Popover.Root';
+Content.displayName = 'Popover.Content';
-export { Popover };
+export const Popover = {
+ Root,
+ Content,
+ Trigger: RadixPopover.Trigger,
+ Close: RadixPopover.Close,
+ Portal: RadixPopover.Portal,
+};
diff --git a/packages/react/src/tooltip/tooltip.tsx b/packages/react/src/tooltip/tooltip.tsx
index 90a5301..0d842d7 100644
--- a/packages/react/src/tooltip/tooltip.tsx
+++ b/packages/react/src/tooltip/tooltip.tsx
@@ -4,7 +4,6 @@ import * as RadixTooltip from '@radix-ui/react-tooltip';
import {
createContext,
type FC,
- forwardRef,
type PropsWithChildren,
useContext,
useState,
@@ -61,51 +60,41 @@ export interface TooltipContentProps extends RadixTooltip.TooltipContentProps {
hideArrow?: boolean;
}
-const Content = forwardRef(
- (props, userRef) => {
- const { children, hideArrow = false, size = 'md', ...rest } = props;
- const context = useContext(TooltipContext);
+const Content: FC = (props) => {
+ const { children, hideArrow = false, size = 'md', ...rest } = props;
+ const context = useContext(TooltipContext);
- return (
-
- {context.open ?
-
+ {context.open ?
+
+
-
- {!hideArrow ?
-
- : null}
-
- {children}
-
-
-
- : null}
-
- );
- },
-);
+ {!hideArrow ?
+
+ : null}
+ {children}
+
+
+ : null}
+
+ );
+};
const Root: FC = (props) => {
const {