|
'use client' |
|
import { memo } from 'react' |
|
import { |
|
PortalToFollowElem, |
|
PortalToFollowElemContent, |
|
PortalToFollowElemTrigger, |
|
} from '@/app/components/base/portal-to-follow-elem' |
|
import ParamConfigContent from '@/app/components/base/features/new-feature-panel/text-to-speech/param-config-content' |
|
import type { OnFeaturesChange } from '@/app/components/base/features/types' |
|
|
|
type VoiceSettingsProps = { |
|
open: boolean |
|
onOpen: (state: any) => void |
|
onChange?: OnFeaturesChange |
|
disabled?: boolean |
|
children?: React.ReactNode |
|
placementLeft?: boolean |
|
} |
|
const VoiceSettings = ({ |
|
open, |
|
onOpen, |
|
onChange, |
|
disabled, |
|
children, |
|
placementLeft = true, |
|
}: VoiceSettingsProps) => { |
|
return ( |
|
<PortalToFollowElem |
|
open={open} |
|
onOpenChange={onOpen} |
|
placement={placementLeft ? 'left' : 'top'} |
|
offset={{ |
|
mainAxis: placementLeft ? 32 : 4, |
|
}} |
|
> |
|
<PortalToFollowElemTrigger className='flex' onClick={() => !disabled && onOpen((open: boolean) => !open)}> |
|
{children} |
|
</PortalToFollowElemTrigger> |
|
<PortalToFollowElemContent style={{ zIndex: 50 }}> |
|
<div className='w-[360px] p-4 bg-components-panel-bg rounded-2xl border-[0.5px] border-components-panel-border shadow-2xl'> |
|
<ParamConfigContent onClose={() => onOpen(false)} onChange={onChange} /> |
|
</div> |
|
</PortalToFollowElemContent> |
|
</PortalToFollowElem> |
|
) |
|
} |
|
export default memo(VoiceSettings) |
|
|