|
|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
'use client'
|
|
|
|
|
import { RiCloseLine } from '@remixicon/react'
|
|
|
|
|
import { RiCloseLine, RiSearchLine } from '@remixicon/react'
|
|
|
|
|
import TagsFilter from './tags-filter'
|
|
|
|
|
import ActionButton from '@/app/components/base/action-button'
|
|
|
|
|
import cn from '@/utils/classnames'
|
|
|
|
|
@ -32,48 +32,51 @@ const SearchBox = ({
|
|
|
|
|
}: SearchBoxProps) => {
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
className={cn(
|
|
|
|
|
'z-[11] flex items-center',
|
|
|
|
|
size === 'large' && 'rounded-xl border border-components-chat-input-border bg-components-panel-bg-blur p-1.5 shadow-md',
|
|
|
|
|
size === 'small' && 'rounded-lg bg-components-input-bg-normal p-0.5',
|
|
|
|
|
inputClassName,
|
|
|
|
|
)}
|
|
|
|
|
className='z-[11] flex items-center'
|
|
|
|
|
>
|
|
|
|
|
<div className='relative flex grow items-center p-1 pl-2'>
|
|
|
|
|
<div className='mr-2 flex w-full items-center'>
|
|
|
|
|
<input
|
|
|
|
|
className={cn(
|
|
|
|
|
'body-md-medium block grow appearance-none bg-transparent text-text-secondary outline-none',
|
|
|
|
|
)}
|
|
|
|
|
value={search}
|
|
|
|
|
onChange={(e) => {
|
|
|
|
|
onSearchChange(e.target.value)
|
|
|
|
|
}}
|
|
|
|
|
placeholder={placeholder}
|
|
|
|
|
/>
|
|
|
|
|
{
|
|
|
|
|
search && (
|
|
|
|
|
<div className='absolute right-2 top-1/2 -translate-y-1/2'>
|
|
|
|
|
<ActionButton onClick={() => onSearchChange('')}>
|
|
|
|
|
<RiCloseLine className='h-4 w-4' />
|
|
|
|
|
</ActionButton>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
<div className={
|
|
|
|
|
cn('flex grow items-center',
|
|
|
|
|
size === 'large' && 'rounded-xl border border-components-chat-input-border bg-components-panel-bg-blur p-1.5 shadow-md',
|
|
|
|
|
size === 'small' && 'rounded-lg bg-components-input-bg-normal p-0.5',
|
|
|
|
|
inputClassName,
|
|
|
|
|
)
|
|
|
|
|
}>
|
|
|
|
|
<div className='relative flex grow items-center p-1 pl-2'>
|
|
|
|
|
<div className='mr-2 flex w-full items-center'>
|
|
|
|
|
<RiSearchLine className='mr-1.5 size-4 text-text-placeholder' />
|
|
|
|
|
<input
|
|
|
|
|
className={cn(
|
|
|
|
|
'body-md-medium block grow appearance-none bg-transparent text-text-secondary outline-none',
|
|
|
|
|
)}
|
|
|
|
|
value={search}
|
|
|
|
|
onChange={(e) => {
|
|
|
|
|
onSearchChange(e.target.value)
|
|
|
|
|
}}
|
|
|
|
|
placeholder={placeholder}
|
|
|
|
|
/>
|
|
|
|
|
{
|
|
|
|
|
search && (
|
|
|
|
|
<div className='absolute right-2 top-1/2 -translate-y-1/2'>
|
|
|
|
|
<ActionButton onClick={() => onSearchChange('')}>
|
|
|
|
|
<RiCloseLine className='h-4 w-4' />
|
|
|
|
|
</ActionButton>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className='mx-1 h-3.5 w-[1px] bg-divider-regular'></div>
|
|
|
|
|
<TagsFilter
|
|
|
|
|
tags={tags}
|
|
|
|
|
onTagsChange={onTagsChange}
|
|
|
|
|
size={size}
|
|
|
|
|
locale={locale}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div className='mx-1 h-3.5 w-[1px] bg-divider-regular'></div>
|
|
|
|
|
<TagsFilter
|
|
|
|
|
tags={tags}
|
|
|
|
|
onTagsChange={onTagsChange}
|
|
|
|
|
size={size}
|
|
|
|
|
locale={locale}
|
|
|
|
|
/>
|
|
|
|
|
{supportAddCustomTool && (
|
|
|
|
|
<div className='flex items-center'>
|
|
|
|
|
<div className='mr-1.5 h-3.5 w-px bg-divider-regular'></div>
|
|
|
|
|
<div className='flex shrink-0 items-center'>
|
|
|
|
|
<ActionButton
|
|
|
|
|
className='bg-components-button-primary-bg text-components-button-primary-text hover:bg-components-button-primary-bg hover:text-components-button-primary-text'
|
|
|
|
|
className='ml-2 rounded-full bg-components-button-primary-bg text-components-button-primary-text hover:bg-components-button-primary-bg hover:text-components-button-primary-text'
|
|
|
|
|
onClick={onShowAddCustomCollectionModal}
|
|
|
|
|
>
|
|
|
|
|
<RiAddLine className='h-4 w-4' />
|
|
|
|
|
|