@quantabit/media-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/ImageViewer.jsx","../src/components/VideoPlayer.jsx","../src/components/AudioPlayer.jsx","../src/components/Gallery.jsx","../src/services/mediaApi.js","../src/hooks/useMedia.js","../src/i18n/index.js","../src/components/MediaGallery.jsx"],"sourcesContent":["import React,{useState}from'react';\nexport function ImageViewer({src,alt='',zoom=true,className=''}){\n const[fullscreen,setFullscreen]=useState(false);const[scale,setScale]=useState(1);\n return(<>\n <img src={src} alt={alt} onClick={()=>zoom&&setFullscreen(true)} className={`qmd-img ${className}`}\n style={{maxWidth:'100%',borderRadius:8,cursor:zoom?'zoom-in':'default',transition:'all 0.2s'}}/>\n {fullscreen&&<div onClick={()=>{setFullscreen(false);setScale(1);}} style={{position:'fixed',inset:0,zIndex:99999,\n background:'rgba(0,0,0,0.9)',display:'flex',alignItems:'center',justifyContent:'center',cursor:'zoom-out'}}>\n <img src={src} alt={alt} style={{maxWidth:'90vw',maxHeight:'90vh',objectFit:'contain',transform:`scale(${scale})`,transition:'transform 0.2s'}}\n onClick={e=>{e.stopPropagation();setScale(s=>s>=2?1:s+0.5);}}/>\n <button onClick={()=>{setFullscreen(false);setScale(1);}} style={{position:'absolute',top:20,right:20,border:'none',background:'rgba(255,255,255,0.1)',\n color:'#fff',width:36,height:36,borderRadius:'50%',cursor:'pointer',fontSize:18}}>✕</button>\n </div>}\n </>);\n}\n","import React,{useRef,useState}from'react';\nexport function VideoPlayer({src,poster,autoplay=false,controls=true,width='100%',aspectRatio='16/9',className=''}){\n const ref=useRef(null);const[playing,setPlaying]=useState(autoplay);\n const toggle=()=>{if(ref.current){if(ref.current.paused){ref.current.play();setPlaying(true);}else{ref.current.pause();setPlaying(false);}}};\n return(<div className={`qmd-video ${className}`} style={{position:'relative',width,aspectRatio,borderRadius:12,overflow:'hidden',background:'#000'}}>\n <video ref={ref} src={src} poster={poster} autoPlay={autoplay} controls={controls} playsInline\n style={{width:'100%',height:'100%',objectFit:'cover'}}\n onPlay={()=>setPlaying(true)} onPause={()=>setPlaying(false)}/>\n {!controls&&<button onClick={toggle} style={{position:'absolute',inset:0,border:'none',background:'transparent',cursor:'pointer',display:'flex',alignItems:'center',justifyContent:'center'}}>\n {!playing&&<div style={{width:60,height:60,borderRadius:'50%',background:'rgba(0,0,0,0.6)',display:'flex',alignItems:'center',justifyContent:'center'}}>\n <div style={{width:0,height:0,borderLeft:'18px solid #fff',borderTop:'12px solid transparent',borderBottom:'12px solid transparent',marginLeft:4}}/></div>}\n </button>}\n </div>);\n}\n","import React,{useRef,useState,useEffect}from'react';\nexport function AudioPlayer({src,title,artist,cover,className=''}){\n const ref=useRef(null);const[playing,setPlaying]=useState(false);const[progress,setProgress]=useState(0);const[duration,setDuration]=useState(0);\n const toggle=()=>{if(ref.current){if(playing)ref.current.pause();else ref.current.play();}};\n const fmt=s=>{const m=Math.floor(s/60);return m+':'+String(Math.floor(s%60)).padStart(2,'0');};\n useEffect(()=>{const a=ref.current;if(!a)return;\n const onTime=()=>setProgress(a.currentTime);const onMeta=()=>setDuration(a.duration);\n a.addEventListener('timeupdate',onTime);a.addEventListener('loadedmetadata',onMeta);\n return()=>{a.removeEventListener('timeupdate',onTime);a.removeEventListener('loadedmetadata',onMeta);};\n },[]);\n return(<div className={`qmd-audio ${className}`} style={{display:'flex',alignItems:'center',gap:12,padding:'12px 16px',borderRadius:14,border:'1px solid #e4e4e7',background:'#fff'}}>\n <audio ref={ref} src={src} onPlay={()=>setPlaying(true)} onPause={()=>setPlaying(false)}/>\n {cover&&<img src={cover} alt=\"\" style={{width:44,height:44,borderRadius:8,objectFit:'cover',flexShrink:0}}/>}\n <div style={{flex:1}}>\n {title&&<div style={{fontSize:13,fontWeight:600,color:'#18181b'}}>{title}</div>}\n {artist&&<div style={{fontSize:11,color:'#71717a'}}>{artist}</div>}\n <div style={{display:'flex',alignItems:'center',gap:6,marginTop:4}}>\n <span style={{fontSize:10,color:'#a1a1aa',width:30}}>{fmt(progress)}</span>\n <div onClick={e=>{const r=e.currentTarget.getBoundingClientRect();const pct=(e.clientX-r.left)/r.width;ref.current.currentTime=pct*duration;}}\n style={{flex:1,height:4,borderRadius:2,background:'#e4e4e7',cursor:'pointer',position:'relative'}}>\n <div style={{height:'100%',width:duration?`${(progress/duration)*100}%`:'0%',background:'#3b82f6',borderRadius:2,transition:'width 0.1s'}}/>\n </div>\n <span style={{fontSize:10,color:'#a1a1aa',width:30}}>{fmt(duration)}</span>\n </div>\n </div>\n <button onClick={toggle} style={{width:36,height:36,borderRadius:'50%',border:'none',background:'#3b82f6',color:'#fff',cursor:'pointer',display:'flex',alignItems:'center',justifyContent:'center',flexShrink:0}}>\n {playing?'⏸':'▶'}</button>\n </div>);\n}\n","import React,{useState}from'react';\nexport function Gallery({images=[],columns=3,gap=8,className=''}){\n const[active,setActive]=useState(null);\n return(<><div className={`qmd-gallery ${className}`} style={{display:'grid',gridTemplateColumns:`repeat(${columns},1fr)`,gap}}>\n {images.map((img,i)=>{const src=typeof img==='string'?img:img.src;const alt=img.alt||'';\n return(<img key={i} src={src} alt={alt} onClick={()=>setActive(i)} style={{width:'100%',aspectRatio:'1',objectFit:'cover',borderRadius:8,cursor:'pointer',transition:'all 0.2s'}} className=\"qmd-gallery-item\"/>);\n })}\n </div>\n {active!=null&&<div onClick={()=>setActive(null)} style={{position:'fixed',inset:0,zIndex:99999,background:'rgba(0,0,0,0.9)',display:'flex',alignItems:'center',justifyContent:'center'}}>\n <button onClick={e=>{e.stopPropagation();setActive(a=>a>0?a-1:images.length-1);}} style={{position:'absolute',left:20,border:'none',background:'rgba(255,255,255,0.1)',color:'#fff',width:40,height:40,borderRadius:'50%',cursor:'pointer',fontSize:18}}>‹</button>\n <img src={typeof images[active]==='string'?images[active]:images[active].src} alt=\"\" style={{maxWidth:'85vw',maxHeight:'85vh',objectFit:'contain',borderRadius:8}}/>\n <button onClick={e=>{e.stopPropagation();setActive(a=>(a+1)%images.length);}} style={{position:'absolute',right:20,border:'none',background:'rgba(255,255,255,0.1)',color:'#fff',width:40,height:40,borderRadius:'50%',cursor:'pointer',fontSize:18}}>›</button>\n <button onClick={()=>setActive(null)} style={{position:'absolute',top:20,right:20,border:'none',background:'rgba(255,255,255,0.1)',color:'#fff',width:36,height:36,borderRadius:'50%',cursor:'pointer',fontSize:18}}>✕</button>\n <div style={{position:'absolute',bottom:20,color:'#fff',fontSize:13}}>{active+1} / {images.length}</div>\n </div>}\n </>);\n}\n","/**\n * Media SDK - API 客户端\n * 媒体服务后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 媒体 API 客户端\n */\nexport class MediaApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/media', config);\n }\n\n // ============ 上传 ============\n\n /**\n * 获取上传凭证\n * @param {Object} options - 上传选项\n */\n async getUploadToken(options = {}) {\n return this.post('/upload/token', options);\n }\n\n /**\n * 上传图片\n * @param {File} file - 文件对象\n * @param {Object} options - 上传选项\n * @param {Function} onProgress - 进度回调\n */\n async uploadImage(file, options = {}, onProgress = null) {\n return this._upload('/upload/image', file, options, onProgress);\n }\n\n /**\n * 上传视频\n * @param {File} file - 文件对象\n * @param {Object} options - 上传选项\n * @param {Function} onProgress - 进度回调\n */\n async uploadVideo(file, options = {}, onProgress = null) {\n return this._upload('/upload/video', file, options, onProgress);\n }\n\n /**\n * 上传音频\n * @param {File} file - 文件对象\n * @param {Object} options - 上传选项\n * @param {Function} onProgress - 进度回调\n */\n async uploadAudio(file, options = {}, onProgress = null) {\n return this._upload('/upload/audio', file, options, onProgress);\n }\n\n /**\n * 内部上传方法\n */\n async _upload(path, file, options, onProgress) {\n const formData = new FormData();\n formData.append('file', file);\n Object.entries(options).forEach(([key, value]) => {\n formData.append(key, value);\n });\n\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n const token = this.getToken();\n\n if (onProgress) {\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable) {\n onProgress(e.loaded / e.total);\n }\n };\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(JSON.parse(xhr.responseText));\n } else {\n reject(new Error(`Upload failed: ${xhr.status}`));\n }\n };\n\n xhr.onerror = () => reject(new Error('Upload failed'));\n xhr.open('POST', `${this.baseUrl}${path}`);\n if (token) xhr.setRequestHeader('Authorization', `Bearer ${token}`);\n xhr.send(formData);\n });\n }\n\n // ============ 媒体查询 ============\n\n /**\n * 获取媒体列表\n * @param {Object} params - 查询参数\n */\n async getMediaList(params = {}) {\n return this.get('/list', params);\n }\n\n /**\n * 获取媒体详情\n * @param {string} mediaId - 媒体 ID\n */\n async getMedia(mediaId) {\n return this.get(`/${mediaId}`);\n }\n\n /**\n * 删除媒体\n * @param {string} mediaId - 媒体 ID\n */\n async deleteMedia(mediaId) {\n return this.delete(`/${mediaId}`);\n }\n\n /**\n * 批量删除媒体\n * @param {string[]} mediaIds - 媒体 ID 列表\n */\n async batchDeleteMedia(mediaIds) {\n return this.post('/batch-delete', { media_ids: mediaIds });\n }\n\n // ============ 图片处理 ============\n\n /**\n * 获取图片缩略图 URL\n * @param {string} mediaId - 媒体 ID\n * @param {Object} options - 处理选项\n */\n async getThumbnailUrl(mediaId, options = {}) {\n return this.get(`/${mediaId}/thumbnail`, options);\n }\n\n /**\n * 裁剪图片\n * @param {string} mediaId - 媒体 ID\n * @param {Object} cropOptions - 裁剪参数\n */\n async cropImage(mediaId, cropOptions) {\n return this.post(`/${mediaId}/crop`, cropOptions);\n }\n\n /**\n * 压缩图片\n * @param {string} mediaId - 媒体 ID\n * @param {Object} compressOptions - 压缩参数\n */\n async compressImage(mediaId, compressOptions) {\n return this.post(`/${mediaId}/compress`, compressOptions);\n }\n\n // ============ 视频处理 ============\n\n /**\n * 获取视频封面\n * @param {string} mediaId - 媒体 ID\n * @param {number} time - 时间点(秒)\n */\n async getVideoCover(mediaId, time = 0) {\n return this.get(`/${mediaId}/cover`, { time });\n }\n\n /**\n * 转码视频\n * @param {string} mediaId - 媒体 ID\n * @param {Object} transcodeOptions - 转码参数\n */\n async transcodeVideo(mediaId, transcodeOptions) {\n return this.post(`/${mediaId}/transcode`, transcodeOptions);\n }\n\n /**\n * 获取转码状态\n * @param {string} mediaId - 媒体 ID\n */\n async getTranscodeStatus(mediaId) {\n return this.get(`/${mediaId}/transcode/status`);\n }\n\n // ============ 存储统计 ============\n\n /**\n * 获取存储使用情况\n */\n async getStorageUsage() {\n return this.get('/usage');\n }\n\n /**\n * 获取配额信息\n */\n async getQuota() {\n return this.get('/quota');\n }\n}\n\n// 创建默认实例\nexport const mediaApi = new MediaApiClient();\n\n\n\nexport default mediaApi;\n","/**\n * Media SDK - React Hooks\n */\n\nimport { useState, useCallback } from 'react';\nimport { mediaApi } from '../services/mediaApi';\n\nexport function useMedia() {\n const [media, setMedia] = useState([]);\n const [uploading, setUploading] = useState(false);\n const [progress, setProgress] = useState(0);\n const [error, setError] = useState(null);\n\n const fetchMedia = useCallback(async (params = {}) => {\n try {\n const result = await mediaApi.getMedia(params);\n setMedia(result.data || []);\n } catch (err) { setError(err.message); }\n }, []);\n\n const uploadMedia = useCallback(async (file, options = {}) => {\n setUploading(true);\n setProgress(0);\n try {\n const result = await mediaApi.uploadMedia(file, {\n ...options,\n onProgress: (p) => setProgress(p),\n });\n await fetchMedia();\n return result;\n } catch (err) { setError(err.message); throw err; } \n finally { setUploading(false); setProgress(0); }\n }, [fetchMedia]);\n\n const deleteMedia = useCallback(async (mediaId) => {\n await mediaApi.deleteMedia(mediaId);\n await fetchMedia();\n }, [fetchMedia]);\n\n return { media, uploading, progress, error, fetchMedia, uploadMedia, deleteMedia };\n}\n\n","/**\n * Media SDK - 国际化\n */\n\nexport const messages = {\n zh: {\n 'media.title': '媒体库',\n 'media.upload': '上传',\n 'media.delete': '删除',\n 'media.preview': '预览',\n 'media.download': '下载',\n 'media.types.image': '图片',\n 'media.types.video': '视频',\n 'media.types.audio': '音频',\n 'media.types.document': '文档',\n 'media.status.uploading': '上传中...',\n 'media.status.uploading_progress': '上传中 {progress}%',\n 'media.status.success': '上传成功',\n 'media.status.failed': '上传失败',\n 'media.empty': '暂无媒体文件',\n 'media.usage': '存储使用',\n 'media.limit': '存储限制',\n 'media.select_file': '选择文件',\n 'loading': '加载中...',\n },\n en: {\n 'media.title': 'Media Library',\n 'media.upload': 'Upload',\n 'media.delete': 'Delete',\n 'media.preview': 'Preview',\n 'media.download': 'Download',\n 'media.types.image': 'Image',\n 'media.types.video': 'Video',\n 'media.types.audio': 'Audio',\n 'media.types.document': 'Document',\n 'media.status.uploading': 'Uploading...',\n 'media.status.uploading_progress': 'Uploading {progress}%',\n 'media.status.success': 'Upload successful',\n 'media.status.failed': 'Upload failed',\n 'media.empty': 'No media files',\n 'media.usage': 'Storage Used',\n 'media.limit': 'Storage Limit',\n 'media.select_file': 'Select File',\n 'loading': 'Loading...',\n },\n ja: {\n 'media.title': 'メディアライブラリ',\n 'media.upload': 'アップロード',\n 'media.delete': '削除',\n 'media.preview': 'プレビュー',\n 'media.download': 'ダウンロード',\n 'media.types.image': '画像',\n 'media.types.video': '動画',\n 'media.types.audio': '音声',\n 'media.types.document': 'ドキュメント',\n 'media.status.uploading': 'アップロード中...',\n 'media.status.uploading_progress': 'アップロード中 {progress}%',\n 'media.status.success': 'アップロード成功',\n 'media.status.failed': 'アップロード失敗',\n 'media.empty': 'メディアファイルがありません',\n 'media.usage': 'ストレージ使用量',\n 'media.limit': 'ストレージ制限',\n 'media.select_file': 'ファイルを選択',\n 'loading': '読み込み中...',\n },\n ko: {\n 'media.title': '미디어 라이브러리',\n 'media.upload': '업로드',\n 'media.delete': '삭제',\n 'media.preview': '미리보기',\n 'media.download': '다운로드',\n 'media.types.image': '이미지',\n 'media.types.video': '비디오',\n 'media.types.audio': '오디오',\n 'media.types.document': '문서',\n 'media.status.uploading': '업로드 중...',\n 'media.status.uploading_progress': '업로드 중 {progress}%',\n 'media.status.success': '업로드 성공',\n 'media.status.failed': '업로드 실패',\n 'media.empty': '미디어 파일이 없습니다',\n 'media.usage': '스토리지 사용량',\n 'media.limit': '스토리지 제한',\n 'media.select_file': '파일 선택',\n 'loading': '로딩 중...',\n },\n};\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nlet currentLanguage = 'en';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) {\n currentLanguage = lang;\n }\n}\n\nexport function getLanguage() {\n return currentLanguage;\n}\n\nexport function t(key, params = {}) {\n let text = messages[currentLanguage]?.[key] || messages.en?.[key] || key;\n Object.entries(params).forEach(([k, v]) => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), v);\n });\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * Media SDK - 组件\n */\n\nimport React, { useRef } from 'react';\nimport { useMedia } from '../hooks/useMedia';\nimport { t } from '../i18n';\n\nexport function MediaUploader({ onUploadComplete }) {\n const { uploading, progress, uploadMedia } = useMedia();\n const fileInputRef = useRef(null);\n\n const [error, setError] = React.useState(null);\n\n const handleFileChange = async (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n setError(null);\n try {\n const result = await uploadMedia(file);\n onUploadComplete?.(result);\n } catch (err) {\n console.error('Upload failed:', err);\n setError(err.message || 'Upload failed');\n } finally {\n e.target.value = '';\n }\n };\n\n return (\n <div className=\"eco-media-uploader\">\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileChange}\n style={{ display: 'none' }}\n />\n {error && <div className=\"eco-error\" style={{ color: '#ef4444', marginBottom: 8, fontSize: 14 }}>{error}</div>}\n <button \n className=\"eco-btn eco-btn-primary\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n >\n {uploading ? t('media.status.uploading_progress', { progress }) : t('media.select_file')}\n </button>\n {uploading && (\n <div className=\"eco-progress\">\n <div className=\"eco-progress-bar\" style={{ width: `${progress}%` }} />\n </div>\n )}\n </div>\n );\n}\n\nexport function MediaGallery({ onSelect }) {\n const { media, loading, deleteMedia } = useMedia();\n\n if (loading) return <div className=\"eco-loading\">{t('loading')}</div>;\n\n return (\n <div className=\"eco-media-gallery\">\n {media.map(item => (\n <div key={item.id} className=\"eco-media-item\" onClick={() => onSelect?.(item)}>\n {item.type === 'image' ? (\n <img src={item.url} alt={item.name} />\n ) : (\n <div className=\"eco-media-icon\">{item.type === 'video' ? '🎬' : '📄'}</div>\n )}\n <div className=\"eco-media-name\">{item.name}</div>\n <button \n className=\"eco-btn eco-btn-sm eco-btn-danger\"\n onClick={(e) => { e.stopPropagation(); deleteMedia(item.id); }}\n >\n {t('media.delete')}\n </button>\n </div>\n ))}\n </div>\n );\n}\n\n"],"names":["ImageViewer","src","alt","zoom","className","fullscreen","setFullscreen","useState","scale","setScale","React","createElement","Fragment","onClick","style","maxWidth","borderRadius","cursor","transition","position","inset","zIndex","background","display","alignItems","justifyContent","maxHeight","objectFit","transform","e","stopPropagation","s","top","right","border","color","width","height","fontSize","VideoPlayer","poster","autoplay","controls","aspectRatio","ref","useRef","playing","setPlaying","toggle","current","paused","play","pause","overflow","autoPlay","playsInline","onPlay","onPause","borderLeft","borderTop","borderBottom","marginLeft","AudioPlayer","title","artist","cover","progress","setProgress","duration","setDuration","fmt","m","Math","floor","String","padStart","useEffect","a","onTime","currentTime","onMeta","addEventListener","removeEventListener","gap","padding","flexShrink","flex","fontWeight","marginTop","r","currentTarget","getBoundingClientRect","pct","clientX","left","Gallery","images","columns","active","setActive","gridTemplateColumns","map","img","i","key","length","bottom","MediaApiClient","BaseApiClient","constructor","config","getUploadToken","options","post","uploadImage","file","onProgress","_upload","uploadVideo","uploadAudio","path","formData","FormData","append","Object","entries","forEach","value","Promise","resolve","reject","xhr","XMLHttpRequest","token","getToken","upload","onprogress","lengthComputable","loaded","total","onload","status","JSON","parse","responseText","Error","onerror","open","baseUrl","setRequestHeader","send","getMediaList","params","get","getMedia","mediaId","deleteMedia","delete","batchDeleteMedia","mediaIds","media_ids","getThumbnailUrl","cropImage","cropOptions","compressImage","compressOptions","getVideoCover","time","transcodeVideo","transcodeOptions","getTranscodeStatus","getStorageUsage","getQuota","mediaApi","useMedia","media","setMedia","uploading","setUploading","error","setError","fetchMedia","useCallback","result","data","err","message","uploadMedia","p","messages","zh","en","ja","ko","currentLanguage","t","text","k","v","replace","RegExp","MediaGallery","onSelect","loading","item","id","type","url","name"],"mappings":"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"}