From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/base/audio-gallery/AudioPlayer.tsx |   49 +++++++++++++++++++++++++------------------------
 1 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/app/components/base/audio-gallery/AudioPlayer.tsx b/app/components/base/audio-gallery/AudioPlayer.tsx
index 67ded63..c482981 100644
--- a/app/components/base/audio-gallery/AudioPlayer.tsx
+++ b/app/components/base/audio-gallery/AudioPlayer.tsx
@@ -1,13 +1,7 @@
 import React, { useCallback, useEffect, useRef, useState } from 'react'
 import { t } from 'i18next'
-import {
-  RiPauseCircleFill,
-  RiPlayLargeFill,
-} from '@remixicon/react'
+import styles from './AudioPlayer.module.css'
 import Toast from '@/app/components/base/toast'
-import useTheme from '@/hooks/use-theme'
-import { Theme } from '@/types/app'
-import cn from '@/utils/classnames'
 
 type AudioPlayerProps = {
   src: string
@@ -24,7 +18,6 @@
   const [hasStartedPlaying, setHasStartedPlaying] = useState(false)
   const [hoverTime, setHoverTime] = useState(0)
   const [isAudioAvailable, setIsAudioAvailable] = useState(true)
-  const { theme } = useTheme()
 
   useEffect(() => {
     const audio = audioRef.current
@@ -62,7 +55,7 @@
     audio.load()
 
     // Delayed generation of waveform data
-    // eslint-disable-next-line ts/no-use-before-define
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
     const timer = setTimeout(() => generateWaveformData(src), 1000)
 
     return () => {
@@ -124,7 +117,7 @@
       setWaveformData(normalizedWaveform)
       setIsAudioAvailable(true)
     }
-    catch {
+    catch (error) {
       const waveform: number[] = []
       let prevValue = Math.random()
 
@@ -237,11 +230,11 @@
       let color
 
       if (index * barWidth <= playedWidth)
-        color = theme === Theme.light ? '#296DFF' : '#84ABFF'
+        color = '#296DFF'
       else if ((index * barWidth / width) * duration <= hoverTime)
-        color = theme === Theme.light ? 'rgba(21,90,239,.40)' : 'rgba(200, 206, 218, 0.28)'
+        color = 'rgba(21,90,239,.40)'
       else
-        color = theme === Theme.light ? 'rgba(21,90,239,.20)' : 'rgba(200, 206, 218, 0.14)'
+        color = 'rgba(21,90,239,.20)'
 
       const barHeight = value * height
       const rectX = index * barWidth
@@ -260,7 +253,7 @@
         ctx.fillRect(rectX, rectY, rectWidth, rectHeight)
       }
     })
-  }, [currentTime, duration, hoverTime, theme, waveformData])
+  }, [currentTime, duration, hoverTime, waveformData])
 
   useEffect(() => {
     drawWaveform()
@@ -286,32 +279,40 @@
   }, [duration])
 
   return (
-    <div className='flex h-9 min-w-[240px] max-w-[420px] items-end gap-2 rounded-[10px] border border-components-panel-border-subtle bg-components-chat-input-audio-bg-alt p-2 shadow-xs backdrop-blur-sm'>
+    <div className={styles.audioPlayer}>
       <audio ref={audioRef} src={src} preload="auto"/>
-      <button className='inline-flex shrink-0 cursor-pointer items-center justify-center border-none text-text-accent transition-all hover:text-text-accent-secondary disabled:text-components-button-primary-bg-disabled' onClick={togglePlay} disabled={!isAudioAvailable}>
+      <button className={styles.playButton} onClick={togglePlay} disabled={!isAudioAvailable}>
         {isPlaying
           ? (
-            <RiPauseCircleFill className='h-5 w-5' />
+            <svg viewBox="0 0 24 24" width="16" height="16">
+              <rect x="7" y="6" width="3" height="12" rx="1.5" ry="1.5"/>
+              <rect x="15" y="6" width="3" height="12" rx="1.5" ry="1.5"/>
+            </svg>
           )
           : (
-            <RiPlayLargeFill className='h-5 w-5' />
+            <svg viewBox="0 0 24 24" width="16" height="16">
+              <path d="M8 5v14l11-7z" fill="currentColor"/>
+            </svg>
           )}
       </button>
-      <div className={cn(isAudioAvailable && 'grow')} hidden={!isAudioAvailable}>
-        <div className='flex h-8 items-center justify-center'>
+      <div className={isAudioAvailable ? styles.audioControls : styles.audioControls_disabled} hidden={!isAudioAvailable}>
+        <div className={styles.progressBarContainer}>
           <canvas
             ref={canvasRef}
-            className='relative flex h-6 w-full grow cursor-pointer items-center justify-center'
+            className={styles.waveform}
             onClick={handleCanvasInteraction}
             onMouseMove={handleMouseMove}
             onMouseDown={handleCanvasInteraction}
           />
-          <div className='system-xs-medium inline-flex min-w-[50px] items-center justify-center text-text-accent-secondary'>
-            <span className='rounded-[10px] px-0.5 py-1'>{formatTime(duration)}</span>
+          {/* <div className={styles.currentTime} style={{ left: `${(currentTime / duration) * 81}%`, bottom: '29px' }}>
+            {formatTime(currentTime)}
+          </div> */}
+          <div className={styles.timeDisplay}>
+            <span className={styles.duration}>{formatTime(duration)}</span>
           </div>
         </div>
       </div>
-      <div className='absolute left-0 top-0 flex h-full w-full items-center justify-center text-text-quaternary' hidden={isAudioAvailable}>{t('common.operation.audioSourceUnavailable')}</div>
+      <div className={styles.source_unavailable} hidden={isAudioAvailable}>{t('common.operation.audioSourceUnavailable')}</div>
     </div>
   )
 }

--
Gitblit v1.8.0