diff --git a/packages/raystack/components/alert-dialog/__tests__/alert-dialog.test.tsx b/packages/raystack/components/alert-dialog/__tests__/alert-dialog.test.tsx index e72d3d1dd..586bca10c 100644 --- a/packages/raystack/components/alert-dialog/__tests__/alert-dialog.test.tsx +++ b/packages/raystack/components/alert-dialog/__tests__/alert-dialog.test.tsx @@ -1,5 +1,6 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import React from 'react'; + +import { type ReactNode } from 'react'; import { describe, expect, it } from 'vitest'; import styles from '../../dialog/dialog.module.css'; import { AlertDialog } from '../alert-dialog'; @@ -17,7 +18,7 @@ const BasicAlertDialog = ({ }: { open?: boolean; onOpenChange?: (open: boolean) => void; - children?: React.ReactNode; + children?: ReactNode; }) => ( {TRIGGER_TEXT} diff --git a/packages/raystack/components/command/command.tsx b/packages/raystack/components/command/command.tsx index 203e11dd1..cd2001448 100644 --- a/packages/raystack/components/command/command.tsx +++ b/packages/raystack/components/command/command.tsx @@ -1,10 +1,10 @@ 'use client'; +import { Dialog as DialogPrimitive } from '@base-ui/react'; import { MagnifyingGlassIcon } from '@radix-ui/react-icons'; import { cva } from 'class-variance-authority'; import { Command as CommandPrimitive } from 'cmdk'; -import { Dialog as DialogPrimitive } from 'radix-ui'; -import React from 'react'; +import { type ComponentProps, ReactNode } from 'react'; import { Dialog } from '../dialog'; import { Flex } from '../flex'; @@ -14,12 +14,14 @@ const command = cva(styles.command); function CommandRoot({ className, ...props -}: React.ComponentProps) { +}: ComponentProps) { return ; } CommandRoot.displayName = 'Command'; -interface CommandDialogProps extends DialogPrimitive.DialogProps {} +interface CommandDialogProps extends DialogPrimitive.Root.Props { + children: ReactNode; +} const CommandDialog = ({ children, ...props }: CommandDialogProps) => { return ( @@ -30,12 +32,13 @@ const CommandDialog = ({ children, ...props }: CommandDialogProps) => { ); }; +CommandDialog.displayName = 'Command.Dialog'; const input = cva(styles.input); function CommandInput({ className, ...props -}: React.ComponentProps) { +}: ComponentProps) { return ( ) { +}: ComponentProps) { return ; } CommandList.displayName = 'Command.List'; -function CommandEmpty( - props: React.ComponentProps -) { +function CommandEmpty(props: ComponentProps) { return ; } @@ -77,7 +78,7 @@ const group = cva(styles.group); function CommandGroup({ className, ...props -}: React.ComponentProps) { +}: ComponentProps) { return ; } @@ -87,7 +88,7 @@ const separator = cva(styles.separator); function CommandSeparator({ className, ...props -}: React.ComponentProps) { +}: ComponentProps) { return ( ) { +}: ComponentProps) { return ; } CommandItem.displayName = 'Command.Item'; const shortcut = cva(styles.shortcut); -const CommandShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { +const CommandShortcut = ({ className, ...props }: ComponentProps<'span'>) => { return ; }; CommandShortcut.displayName = 'Command.Shortcut'; -export const Command: any = Object.assign(CommandRoot, { +export const Command = Object.assign(CommandRoot, { Dialog: CommandDialog, Input: CommandInput, List: CommandList, diff --git a/packages/raystack/components/container/container.tsx b/packages/raystack/components/container/container.tsx index 70b528c34..c98ddce05 100644 --- a/packages/raystack/components/container/container.tsx +++ b/packages/raystack/components/container/container.tsx @@ -1,5 +1,5 @@ import { cva, VariantProps } from 'class-variance-authority'; -import { ComponentProps, HTMLAttributes, PropsWithChildren } from 'react'; +import { ComponentProps } from 'react'; import styles from './container.module.css'; diff --git a/packages/raystack/components/context-menu/context-menu-misc.tsx b/packages/raystack/components/context-menu/context-menu-misc.tsx index e92e80034..029cac32b 100644 --- a/packages/raystack/components/context-menu/context-menu-misc.tsx +++ b/packages/raystack/components/context-menu/context-menu-misc.tsx @@ -2,7 +2,7 @@ import { ContextMenu as ContextMenuPrimitive } from '@base-ui/react'; import { cx } from 'class-variance-authority'; -import { ComponentProps, Fragment, HTMLAttributes, ReactNode } from 'react'; +import { ComponentProps, Fragment } from 'react'; import styles from '../menu/menu.module.css'; import { useMenuContext } from '../menu/menu-root'; @@ -49,7 +49,7 @@ ContextMenuLabel.displayName = 'ContextMenu.Label'; export const ContextMenuSeparator = ({ className, ...props -}: HTMLAttributes) => { +}: ComponentProps<'div'>) => { const { shouldFilter } = useMenuContext(); if (shouldFilter) { diff --git a/packages/raystack/components/dialog/__tests__/dialog.test.tsx b/packages/raystack/components/dialog/__tests__/dialog.test.tsx index 893707000..01663f585 100644 --- a/packages/raystack/components/dialog/__tests__/dialog.test.tsx +++ b/packages/raystack/components/dialog/__tests__/dialog.test.tsx @@ -1,5 +1,6 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import React from 'react'; + +import { type ReactNode } from 'react'; import { describe, expect, it } from 'vitest'; import { Dialog } from '../dialog'; import styles from '../dialog.module.css'; @@ -17,7 +18,7 @@ const BasicDialog = ({ }: { open?: boolean; onOpenChange?: (open: boolean) => void; - children?: React.ReactNode; + children?: ReactNode; }) => ( {TRIGGER_TEXT} diff --git a/packages/raystack/components/drawer/__tests__/drawer.test.tsx b/packages/raystack/components/drawer/__tests__/drawer.test.tsx index c7d575212..00f6877bf 100644 --- a/packages/raystack/components/drawer/__tests__/drawer.test.tsx +++ b/packages/raystack/components/drawer/__tests__/drawer.test.tsx @@ -1,6 +1,7 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import React from 'react'; + +import { type ReactElement } from 'react'; import { describe, expect, it, vi } from 'vitest'; import { Button } from '~/components/button'; import { Drawer } from '../drawer'; @@ -33,7 +34,7 @@ const BasicDrawer = ({ ); -async function renderAndOpenDrawer(DrawerElement: React.ReactElement) { +async function renderAndOpenDrawer(DrawerElement: ReactElement) { fireEvent.click(render(DrawerElement).getByText(TRIGGER_TEXT)); } diff --git a/packages/raystack/components/number-field/number-field.tsx b/packages/raystack/components/number-field/number-field.tsx index 4f14846ac..f43bd6d0d 100644 --- a/packages/raystack/components/number-field/number-field.tsx +++ b/packages/raystack/components/number-field/number-field.tsx @@ -3,30 +3,24 @@ import { NumberField as NumberFieldPrimitive } from '@base-ui/react'; import { MinusIcon, PlusIcon } from '@radix-ui/react-icons'; import { cx } from 'class-variance-authority'; -import { - createContext, - ElementRef, - forwardRef, - type ReactNode, - useContext, - useId -} from 'react'; +import { type ComponentProps, createContext, useContext, useId } from 'react'; import { Label } from '../label'; import styles from './number-field.module.css'; const NumberFieldContext = createContext<{ fieldId: string } | null>(null); -const NumberFieldRoot = forwardRef< - ElementRef, - NumberFieldPrimitive.Root.Props & { children?: ReactNode } ->(({ className, children, id, ...props }, ref) => { +function NumberFieldRoot({ + className, + children, + id, + ...props +}: NumberFieldPrimitive.Root.Props) { const generatedId = useId(); const fieldId = id ?? generatedId; return ( - + )} - + ); -}); +} NumberFieldRoot.displayName = 'NumberField'; -const NumberFieldGroup = forwardRef< - ElementRef, - NumberFieldPrimitive.Group.Props ->(({ className, ...props }, ref) => ( - -)); +function NumberFieldGroup({ + className, + ...props +}: NumberFieldPrimitive.Group.Props) { + return ( + + ); +} NumberFieldGroup.displayName = 'NumberField.Group'; -const NumberFieldInput = forwardRef< - ElementRef, - NumberFieldPrimitive.Input.Props ->(({ className, ...props }, ref) => ( - -)); +function NumberFieldInput({ + className, + ...props +}: NumberFieldPrimitive.Input.Props) { + return ( + + ); +} NumberFieldInput.displayName = 'NumberField.Input'; -const NumberFieldDecrement = forwardRef< - ElementRef, - NumberFieldPrimitive.Decrement.Props ->(({ className, children, ...props }, ref) => ( - - {children ?? } - -)); +function NumberFieldDecrement({ + className, + children, + ...props +}: NumberFieldPrimitive.Decrement.Props) { + return ( + + {children ?? } + + ); +} NumberFieldDecrement.displayName = 'NumberField.Decrement'; -const NumberFieldIncrement = forwardRef< - ElementRef, - NumberFieldPrimitive.Increment.Props ->(({ className, children, ...props }, ref) => ( - - {children ?? } - -)); +function NumberFieldIncrement({ + className, + children, + ...props +}: NumberFieldPrimitive.Increment.Props) { + return ( + + {children ?? } + + ); +} NumberFieldIncrement.displayName = 'NumberField.Increment'; export interface NumberFieldScrubAreaProps @@ -101,15 +101,15 @@ export interface NumberFieldScrubAreaProps label: string; } -const NumberFieldScrubArea = forwardRef< - ElementRef, - NumberFieldScrubAreaProps ->(({ className, label, ...props }, ref) => { +function NumberFieldScrubArea({ + className, + label, + ...props +}: NumberFieldScrubAreaProps) { const context = useContext(NumberFieldContext); return ( @@ -123,10 +123,10 @@ const NumberFieldScrubArea = forwardRef< ); -}); +} NumberFieldScrubArea.displayName = 'NumberField.ScrubArea'; -function CursorGrowIcon(props: React.ComponentProps<'svg'>) { +function CursorGrowIcon(props: ComponentProps<'svg'>) { return ( {children} - ) -); + ); +} ToggleRoot.displayName = 'Toggle'; -const ToggleGroup = forwardRef< - ElementRef, - ToggleGroupPrimitive.Props ->(({ className, ...props }, ref) => ( - -)); +function ToggleGroup({ className, ...props }: ToggleGroupPrimitive.Props) { + return ( + + ); +} ToggleGroup.displayName = 'Toggle.Group'; diff --git a/packages/raystack/components/toolbar/toolbar.tsx b/packages/raystack/components/toolbar/toolbar.tsx index e38aa9dab..2dc5b7bae 100644 --- a/packages/raystack/components/toolbar/toolbar.tsx +++ b/packages/raystack/components/toolbar/toolbar.tsx @@ -2,56 +2,43 @@ import { Toolbar as ToolbarPrimitive } from '@base-ui/react/toolbar'; import { cx } from 'class-variance-authority'; -import { ElementRef, forwardRef } from 'react'; import { Button } from '../button'; import styles from './toolbar.module.css'; -const ToolbarRoot = forwardRef< - ElementRef, - ToolbarPrimitive.Root.Props ->(({ className, ...props }, ref) => ( - -)); +const ToolbarRoot = ({ className, ...props }: ToolbarPrimitive.Root.Props) => ( + +); ToolbarRoot.displayName = 'Toolbar'; -const ToolbarButton = forwardRef< - ElementRef, - ToolbarPrimitive.Button.Props ->((props, ref) => ( +const ToolbarButton = ({ + className, + ...props +}: ToolbarPrimitive.Button.Props) => ( } {...props} /> -)); +); ToolbarButton.displayName = 'Toolbar.Button'; -const ToolbarGroup = forwardRef< - ElementRef, - ToolbarPrimitive.Group.Props ->(({ className, ...props }, ref) => ( - -)); +const ToolbarGroup = ({ + className, + ...props +}: ToolbarPrimitive.Group.Props) => ( + +); ToolbarGroup.displayName = 'Toolbar.Group'; -const ToolbarSeparator = forwardRef< - ElementRef, - ToolbarPrimitive.Separator.Props ->(({ className, ...props }, ref) => ( +const ToolbarSeparator = ({ + className, + ...props +}: ToolbarPrimitive.Separator.Props) => ( -)); +); ToolbarSeparator.displayName = 'Toolbar.Separator'; export const Toolbar = Object.assign(ToolbarRoot, { diff --git a/packages/raystack/components/tooltip/tooltip-content.tsx b/packages/raystack/components/tooltip/tooltip-content.tsx index 2e613348a..557648253 100644 --- a/packages/raystack/components/tooltip/tooltip-content.tsx +++ b/packages/raystack/components/tooltip/tooltip-content.tsx @@ -2,14 +2,13 @@ import { Tooltip as TooltipPrimitive } from '@base-ui/react'; import { cx } from 'class-variance-authority'; -import { type ElementRef, forwardRef } from 'react'; import { Text } from '../text'; import styles from './tooltip.module.css'; export interface TooltipContentProps extends Omit< TooltipPrimitive.Positioner.Props, - 'className' | 'style' | 'render' + 'className' | 'style' | 'render' | 'ref' >, TooltipPrimitive.Popup.Props { /** @@ -19,58 +18,51 @@ export interface TooltipContentProps showArrow?: boolean; } -export const TooltipContent = forwardRef< - ElementRef, - TooltipContentProps ->( - ( - { - className, - children, - showArrow = false, - style, - render, - ...positionerProps - }, - ref - ) => { - return ( - - + + - - {typeof children === 'string' ? {children} : children} - {showArrow && ( - - - - - - )} - - - - ); - } -); + {typeof children === 'string' ? {children} : children} + {showArrow && ( + + + + + + )} + + + + ); +} TooltipContent.displayName = 'Tooltip.Content'; diff --git a/packages/raystack/components/tooltip/tooltip-misc.tsx b/packages/raystack/components/tooltip/tooltip-misc.tsx index e273e0f2b..5f17f9839 100644 --- a/packages/raystack/components/tooltip/tooltip-misc.tsx +++ b/packages/raystack/components/tooltip/tooltip-misc.tsx @@ -1,16 +1,12 @@ 'use client'; import { Tooltip as TooltipPrimitive } from '@base-ui/react'; -import { forwardRef } from 'react'; export interface TooltipTriggerProps extends TooltipPrimitive.Trigger.Props {} -export const TooltipTrigger = forwardRef< - HTMLButtonElement, - TooltipPrimitive.Trigger.Props ->((props, ref) => { - return ; -}); +export function TooltipTrigger(props: TooltipPrimitive.Trigger.Props) { + return ; +} TooltipTrigger.displayName = 'Tooltip.Trigger'; diff --git a/packages/raystack/package.json b/packages/raystack/package.json index 50c6ffd5e..36f01acd5 100644 --- a/packages/raystack/package.json +++ b/packages/raystack/package.json @@ -128,9 +128,9 @@ "react-day-picker": "^9.6.7" }, "peerDependencies": { - "@types/react": "^18 || ^19", - "react": "^18 || ^19", - "react-dom": "^18 || ^19" + "@types/react": "^19", + "react": "^19", + "react-dom": "^19" }, "peerDependenciesMeta": { "@types/react": {