mirror of
https://github.com/langgenius/dify.git
synced 2026-05-02 06:56:29 +08:00
Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: jyong <718720800@qq.com> Co-authored-by: Yansong Zhang <916125788@qq.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: hj24 <mambahj24@gmail.com> Co-authored-by: hj24 <huangjian@dify.ai> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Co-authored-by: CodingOnStar <hanxujiang@dify.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: 非法操作 <hjlarry@163.com> Co-authored-by: Ayush Baluni <73417844+aayushbaluni@users.noreply.github.com> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> Co-authored-by: jimcody1995 <jjimcody@gmail.com> Co-authored-by: James <63717587+jamesrayammons@users.noreply.github.com> Co-authored-by: Yunlu Wen <yunlu.wen@dify.ai> Co-authored-by: Stephen Zhou <hi@hyoban.cc> Co-authored-by: Coding On Star <447357187@qq.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jerryzai <jerryzh8710@protonmail.com> Co-authored-by: NVIDIAN <speedy.hpc@hotmail.com> Co-authored-by: ai-hpc <ai-hpc@users.noreply.github.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: Junghwan <70629228+shaun0927@users.noreply.github.com> Co-authored-by: HeYinKazune <70251095+HeYin-OS@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: yyh <yuanyouhuilyz@gmail.com> Co-authored-by: Jingyi <jingyi.qi@dify.ai> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: sxxtony <166789813+sxxtony@users.noreply.github.com>
74 lines
2.0 KiB
TypeScript
74 lines
2.0 KiB
TypeScript
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}
|
|
// Do not set autoComplete for security - prevents browser from storing sensitive API keys
|
|
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-hidden
|
|
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 top-2.5 right-2.5">
|
|
<CheckCircle className="h-4 w-4 text-[#039855]" />
|
|
</div>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default Input
|