param-config.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use client'
  2. import type { FC } from 'react'
  3. import { memo, useState } from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import { RiSettings2Line } from '@remixicon/react'
  6. import ParamConfigContent from './param-config-content'
  7. import Button from '@/app/components/base/button'
  8. import {
  9. PortalToFollowElem,
  10. PortalToFollowElemContent,
  11. PortalToFollowElemTrigger,
  12. } from '@/app/components/base/portal-to-follow-elem'
  13. import cn from '@/utils/classnames'
  14. const ParamsConfig: FC = () => {
  15. const { t } = useTranslation()
  16. const [open, setOpen] = useState(false)
  17. return (
  18. <PortalToFollowElem
  19. open={open}
  20. onOpenChange={setOpen}
  21. placement='bottom-end'
  22. offset={{
  23. mainAxis: 4,
  24. }}
  25. >
  26. <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
  27. <Button variant='ghost' size='small' className={cn('')}>
  28. <RiSettings2Line className='w-3.5 h-3.5' />
  29. <div className='ml-1'>{t('appDebug.voice.settings')}</div>
  30. </Button>
  31. </PortalToFollowElemTrigger>
  32. <PortalToFollowElemContent style={{ zIndex: 50 }}>
  33. <div className='w-80 sm:w-[412px] p-4 bg-components-panel-bg rounded-lg border-[0.5px] border-components-panel-border shadow-lg space-y-3'>
  34. <ParamConfigContent />
  35. </div>
  36. </PortalToFollowElemContent>
  37. </PortalToFollowElem>
  38. )
  39. }
  40. export default memo(ParamsConfig)