diff --git a/.vscode/remix.code-snippets b/.vscode/remix.code-snippets index 4d8ec1d8b..f7ca78160 100644 --- a/.vscode/remix.code-snippets +++ b/.vscode/remix.code-snippets @@ -56,17 +56,6 @@ "}", ], }, - "meta": { - "prefix": "/meta", - "scope": "typescriptreact,javascriptreact,typescript,javascript", - "body": [ - "import type { MetaFunction } from '@remix-run/node'", - "", - "export const meta: MetaFunction = ({ data }) => [{", - " title: 'Title',", - "}]", - ], - }, "shouldRevalidate": { "prefix": "/shouldRevalidate", "scope": "typescriptreact,javascriptreact,typescript,javascript", diff --git a/app/components/ui/button.tsx b/app/components/ui/button.tsx index 36601c5c2..14096c48d 100644 --- a/app/components/ui/button.tsx +++ b/app/components/ui/button.tsx @@ -39,20 +39,25 @@ export interface ButtonProps extends React.ButtonHTMLAttributes, VariantProps { asChild?: boolean + ref?: React.RefObject } -const Button = React.forwardRef( - ({ className, variant, size, asChild = false, ...props }, ref) => { - const Comp = asChild ? Slot : 'button' - return ( - - ) - }, -) +const Button = ({ + ref, + className, + variant, + size, + asChild = false, + ...props +}: ButtonProps) => { + const Comp = asChild ? Slot : 'button' + return ( + + ) +} Button.displayName = 'Button' export { Button, buttonVariants } diff --git a/app/components/ui/checkbox.tsx b/app/components/ui/checkbox.tsx index 637a7fdd6..aa1464fa4 100644 --- a/app/components/ui/checkbox.tsx +++ b/app/components/ui/checkbox.tsx @@ -10,10 +10,11 @@ export type CheckboxProps = Omit< type?: string } -const Checkbox = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( +const Checkbox = ({ + ref, + className, + ...props +}: React.ComponentProps) => ( -)) +) Checkbox.displayName = CheckboxPrimitive.Root.displayName export { Checkbox } diff --git a/app/components/ui/dropdown-menu.tsx b/app/components/ui/dropdown-menu.tsx index 3bb4fe3a3..aa62ac737 100644 --- a/app/components/ui/dropdown-menu.tsx +++ b/app/components/ui/dropdown-menu.tsx @@ -15,12 +15,15 @@ const DropdownMenuSub = DropdownMenuPrimitive.Sub const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup -const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, children, ...props }, ref) => ( +const DropdownMenuSubTrigger = ({ + ref, + className, + inset, + children, + ...props +}: React.ComponentProps & { + inset?: boolean +}) => ( ▶️ -)) +) DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName -const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( +const DropdownMenuSubContent = ({ + ref, + className, + ...props +}: React.ComponentProps) => ( -)) +) DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName -const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, sideOffset = 4, ...props }, ref) => ( +const DropdownMenuContent = ({ + ref, + className, + sideOffset = 4, + ...props +}: React.ComponentProps) => ( -)) +) DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName -const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( +const DropdownMenuItem = ({ + ref, + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean +}) => ( -)) +) DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName -const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, checked, ...props }, ref) => ( +const DropdownMenuCheckboxItem = ({ + ref, + className, + children, + checked, + ...props +}: React.ComponentProps) => ( {children} -)) +) DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName -const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( +const DropdownMenuRadioItem = ({ + ref, + className, + children, + ...props +}: React.ComponentPropsWithoutRef & { + ref: React.RefObject> +}) => ( {children} -)) +) DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName -const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( +const DropdownMenuLabel = ({ + ref, + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean +}) => ( -)) +) DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName -const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( +const DropdownMenuSeparator = ({ + ref, + className, + ...props +}: React.ComponentProps) => ( -)) +) DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName const DropdownMenuShortcut = ({ diff --git a/app/components/ui/input-otp.tsx b/app/components/ui/input-otp.tsx index ff7a2d7b1..ad1501e7b 100644 --- a/app/components/ui/input-otp.tsx +++ b/app/components/ui/input-otp.tsx @@ -3,10 +3,12 @@ import * as React from 'react' import { cn } from '#app/utils/misc.tsx' -const InputOTP = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, containerClassName, ...props }, ref) => ( +const InputOTP = ({ + ref, + className, + containerClassName, + ...props +}: React.ComponentProps) => ( -)) +) InputOTP.displayName = 'InputOTP' -const InputOTPGroup = React.forwardRef< - React.ElementRef<'div'>, - React.ComponentPropsWithoutRef<'div'> ->(({ className, ...props }, ref) => ( +const InputOTPGroup = ({ + ref, + className, + ...props +}: React.ComponentProps<'div'>) => (
-)) +) InputOTPGroup.displayName = 'InputOTPGroup' -const InputOTPSlot = React.forwardRef< - React.ElementRef<'div'>, - React.ComponentPropsWithoutRef<'div'> & { index: number } ->(({ index, className, ...props }, ref) => { +const InputOTPSlot = ({ + ref, + index, + className, + ...props +}: React.ComponentProps<'div'> & { + index: number +}) => { const inputOTPContext = React.useContext(OTPInputContext) const slot = inputOTPContext.slots[index] if (!slot) throw new Error('Invalid slot index') @@ -54,17 +61,14 @@ const InputOTPSlot = React.forwardRef< )}
) -}) +} InputOTPSlot.displayName = 'InputOTPSlot' -const InputOTPSeparator = React.forwardRef< - React.ElementRef<'div'>, - React.ComponentPropsWithoutRef<'div'> ->(({ ...props }, ref) => ( +const InputOTPSeparator = ({ ref, ...props }: React.ComponentProps<'div'>) => (
-
-)) +) InputOTPSeparator.displayName = 'InputOTPSeparator' export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } diff --git a/app/components/ui/input.tsx b/app/components/ui/input.tsx index f4b2db38e..d5e888c39 100644 --- a/app/components/ui/input.tsx +++ b/app/components/ui/input.tsx @@ -3,23 +3,23 @@ import * as React from 'react' import { cn } from '#app/utils/misc.tsx' export interface InputProps - extends React.InputHTMLAttributes {} + extends React.InputHTMLAttributes { + ref?: React.RefObject +} -const Input = React.forwardRef( - ({ className, type, ...props }, ref) => { - return ( - - ) - }, -) +const Input = ({ ref, className, type, ...props }: InputProps) => { + return ( + + ) +} Input.displayName = 'Input' export { Input } diff --git a/app/components/ui/label.tsx b/app/components/ui/label.tsx index ec453ee26..703c3b790 100644 --- a/app/components/ui/label.tsx +++ b/app/components/ui/label.tsx @@ -8,17 +8,17 @@ const labelVariants = cva( 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70', ) -const Label = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & - VariantProps ->(({ className, ...props }, ref) => ( +const Label = ({ + ref, + className, + ...props +}: React.ComponentProps) => ( -)) +) Label.displayName = LabelPrimitive.Root.displayName export { Label } diff --git a/app/components/ui/status-button.tsx b/app/components/ui/status-button.tsx index f39a7ffd6..a49cbed01 100644 --- a/app/components/ui/status-button.tsx +++ b/app/components/ui/status-button.tsx @@ -10,14 +10,19 @@ import { TooltipTrigger, } from './tooltip.tsx' -export const StatusButton = React.forwardRef< - HTMLButtonElement, - ButtonProps & { - status: 'pending' | 'success' | 'error' | 'idle' - message?: string | null - spinDelay?: Parameters[1] - } ->(({ message, status, className, children, spinDelay, ...props }, ref) => { +export const StatusButton = ({ + ref, + message, + status, + className, + children, + spinDelay, + ...props +}: ButtonProps & { + status: 'pending' | 'success' | 'error' | 'idle' + message?: string | null + spinDelay?: Parameters[1] +}) => { const delayedPending = useSpinDelay(status === 'pending', { delay: 400, minDuration: 300, @@ -74,5 +79,5 @@ export const StatusButton = React.forwardRef< )} ) -}) +} StatusButton.displayName = 'Button' diff --git a/app/components/ui/textarea.tsx b/app/components/ui/textarea.tsx index 2e8ea5e05..6e7ca6378 100644 --- a/app/components/ui/textarea.tsx +++ b/app/components/ui/textarea.tsx @@ -3,22 +3,22 @@ import * as React from 'react' import { cn } from '#app/utils/misc.tsx' export interface TextareaProps - extends React.TextareaHTMLAttributes {} + extends React.TextareaHTMLAttributes { + ref?: React.RefObject +} -const Textarea = React.forwardRef( - ({ className, ...props }, ref) => { - return ( -