'use client'; import { CheckCircleIcon } from '@heroicons/react/24/solid'; import clsx from 'clsx'; import React, { ChangeEvent, DetailedHTMLProps, forwardRef, InputHTMLAttributes, ReactNode, } from 'react'; export type TextInputProps = DetailedHTMLProps< InputHTMLAttributes, HTMLInputElement > & { label: string; placeholder?: string; defaultValue?: string; error?: string | ReactNode; success?: string | ReactNode; disabled?: boolean; onChange?: (value: ChangeEvent) => void; onBlur?: (value: ChangeEvent) => void; }; const styles = (error: boolean, disabled: boolean) => clsx({ 'h-40px mb-2px rounded p-2 bg-input-light-background dark:bg-input-dark-background transition-colors duration-300 grow': true, 'border border-input-light-border dark:border-input-dark-border hover:border-black hover:dark:border-white focus:border-primary-light-500 focus:dark:border-primary-dark-500': true, 'focus:outline-none focus:ring-0 text-base text-black dark:text-white placeholder:italic placeholder-gray-700 dark:placeholder-gray-700': true, 'border border-warn-light-500 dark:border-warn-dark-500 hover:border-warn-light-500 hover:dark:border-warn-dark-500 focus:border-warn-light-500 focus:dark:border-warn-dark-500': error, 'pointer-events-none text-gray-500 dark:text-gray-800 border border-gray-700 dark:border-gray-900 border-opacity-30 dark:border-opacity-30 hover:border-gray-700 hover:dark:border-gray-900 hover:border-opacity-30 hover:dark:border-opacity-30 cursor-default': disabled, }); // eslint-disable-next-line react/display-name export const TextInput = forwardRef( ( { label, placeholder, defaultValue, required = false, error, disabled, success, onChange, onBlur, ...props }, ref, ) => { return ( ); }, );