1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import type { FC } from 'react'
- import { CheckCircle } from '@/app/components/base/icons/src/vender/solid/general'
- type InputProps = {
- value?: string
- onChange: (v: string) => void
- onFocus?: () => void
- placeholder?: string
- validated?: boolean
- className?: string
- disabled?: boolean
- type?: string
- min?: number
- max?: number
- }
- const Input: FC<InputProps> = ({
- value,
- onChange,
- onFocus,
- placeholder,
- validated,
- className,
- disabled,
- type = 'text',
- min,
- max,
- }) => {
- const toLimit = (v: string) => {
- const minNum = Number.parseFloat(`${min}`)
- const maxNum = Number.parseFloat(`${max}`)
- if (!isNaN(minNum) && Number.parseFloat(v) < minNum) {
- onChange(`${min}`)
- return
- }
- if (!isNaN(maxNum) && Number.parseFloat(v) > maxNum)
- onChange(`${max}`)
- }
- return (
- <div className='relative'>
- <input
- tabIndex={0}
- className={`
- block h-8 w-full appearance-none rounded-lg border border-transparent bg-components-input-bg-normal px-3 text-sm
- text-components-input-text-filled caret-primary-600 outline-none
- placeholder:text-sm placeholder:text-text-tertiary
- hover:border-components-input-border-hover hover:bg-components-input-bg-hover focus:border-components-input-border-active
- focus:bg-components-input-bg-active focus:shadow-xs
- ${validated && 'pr-[30px]'}
- ${className}
- `}
- placeholder={placeholder || ''}
- onChange={e => onChange(e.target.value)}
- onBlur={e => toLimit(e.target.value)}
- onFocus={onFocus}
- value={value}
- disabled={disabled}
- type={type}
- min={min}
- max={max}
- />
- {
- validated && (
- <div className='absolute right-2.5 top-2.5'>
- <CheckCircle className='h-4 w-4 text-[#039855]' />
- </div>
- )
- }
- </div>
- )
- }
- export default Input
|