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 {