@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha10
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.
- package/README.md +22 -0
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +78 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
- package/dist/cjs/components/Sources/index.d.ts +5 -0
- package/dist/cjs/components/Sources/index.js +162 -0
- package/dist/cjs/components/Sources/index.js.map +7 -0
- package/dist/cjs/components/Sources/styles.d.ts +59 -0
- package/dist/cjs/components/Sources/styles.js +179 -0
- package/dist/cjs/components/Sources/styles.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +75 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +11 -10
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
- package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
- package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
- package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
- package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
- package/dist/cjs/components/XAdkSender/index.js +422 -150
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
- package/dist/cjs/components/XAdkSender/styles.js +225 -5
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.js +5 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +8 -3
- package/dist/cjs/index.js +44 -10
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/presets/base.d.ts +6 -0
- package/dist/cjs/presets/base.js +50 -0
- package/dist/cjs/presets/base.js.map +7 -0
- package/dist/cjs/presets/define.d.ts +11 -0
- package/dist/cjs/presets/define.js +58 -0
- package/dist/cjs/presets/define.js.map +7 -0
- package/dist/cjs/presets/index.d.ts +3 -0
- package/dist/cjs/presets/index.js +28 -0
- package/dist/cjs/presets/index.js.map +7 -0
- package/dist/cjs/presets/runtime.d.ts +22 -0
- package/dist/cjs/presets/runtime.js +75 -0
- package/dist/cjs/presets/runtime.js.map +7 -0
- package/dist/cjs/presets/xgroup/index.d.ts +5 -0
- package/dist/cjs/presets/xgroup/index.js +10 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
- package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
- package/dist/cjs/presets/xgroup/preset.js +16 -37
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
- package/dist/cjs/presets/xgroup/strategies.js +11 -15
- package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +11 -2
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/Sources.d.ts +30 -0
- package/dist/cjs/types/Sources.js +18 -0
- package/dist/cjs/types/Sources.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +154 -8
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/cjs/utils/markdownResource.d.ts +14 -0
- package/dist/cjs/utils/markdownResource.js +131 -0
- package/dist/cjs/utils/markdownResource.js.map +7 -0
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
- package/dist/esm/components/Sources/index.d.ts +5 -0
- package/dist/esm/components/Sources/index.js +127 -0
- package/dist/esm/components/Sources/index.js.map +1 -0
- package/dist/esm/components/Sources/styles.d.ts +59 -0
- package/dist/esm/components/Sources/styles.js +34 -0
- package/dist/esm/components/Sources/styles.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/index.js +55 -10
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
- package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +7 -3
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
- package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/esm/components/XAdkSender/InputTags.js +37 -0
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
- package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/esm/components/XAdkSender/QuickList.js +96 -0
- package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +1 -6
- package/dist/esm/components/XAdkSender/index.js +476 -143
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
- package/dist/esm/components/XAdkSender/styles.js +34 -12
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/hooks/useADKChat.js +8 -2
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +8 -3
- package/dist/esm/index.js +7 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/base.d.ts +6 -0
- package/dist/esm/presets/base.js +28 -0
- package/dist/esm/presets/base.js.map +1 -0
- package/dist/esm/presets/define.d.ts +11 -0
- package/dist/esm/presets/define.js +33 -0
- package/dist/esm/presets/define.js.map +1 -0
- package/dist/esm/presets/index.d.ts +3 -0
- package/dist/esm/presets/index.js +4 -0
- package/dist/esm/presets/index.js.map +1 -0
- package/dist/esm/presets/runtime.d.ts +22 -0
- package/dist/esm/presets/runtime.js +45 -0
- package/dist/esm/presets/runtime.js.map +1 -0
- package/dist/esm/presets/xgroup/index.d.ts +5 -0
- package/dist/esm/presets/xgroup/index.js +6 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
- package/dist/esm/presets/xgroup/preset.d.ts +1 -13
- package/dist/esm/presets/xgroup/preset.js +9 -29
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
- package/dist/esm/presets/xgroup/strategies.js +8 -20
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +11 -2
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/Sources.d.ts +30 -0
- package/dist/esm/types/Sources.js +2 -0
- package/dist/esm/types/Sources.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +33 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +154 -8
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +14 -0
- package/dist/esm/utils/markdownResource.js +101 -0
- package/dist/esm/utils/markdownResource.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +6 -1
- package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/cjs/components/XAdkSender/Switch.js +0 -95
- package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
- package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/esm/components/XAdkSender/Switch.js +0 -53
- package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","useMemo","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","PictureOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","getFileExtension","filename","ext","split","pop","toLowerCase","IMAGE_EXTS","AUDIO_EXTS","VIDEO_EXTS","inferFileType","startsWith","includes","url","urlExtMatch","match","urlExt","getFileIconType","DEFAULT_ICON_MAP","pdf","icon","color","word","excel","ppt","audio","video","zip","markdown","image","default","formatFileSize","bytes","toFixed","FALLBACK_IMAGE","ImageWithLoading","_ref","src","alt","width","height","loading","preview","fallback","displayMode","styles","_useState","_useState2","_slicedToArray","loadState","setLoadState","modeClass","imageFullMode","imagePreviewMode","imageThumbnail","containerStyle","concat","className","style","children","imageLoadingSkeleton","fontSize","imageErrorFallback","_objectSpread","display","opacity","transition","objectFit","maxWidth","onLoad","onError","FileGallery","_ref2","_ref2$align","align","_ref2$removable","removable","_ref2$onRemove","onRemove","onClick","customType","_ref2$imageDisplayMod","imageDisplayMode","imageWidth","imageHeight","_ref2$imageLoading","imageLoading","imageAlt","_ref2$mediaAutoPlay","mediaAutoPlay","_ref2$mediaLoop","mediaLoop","_ref2$mediaMuted","mediaMuted","mediaPoster","videoProps","audioProps","iconMap","customIcon","_useState3","_useState4","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","fileName","fileSize","fileId","fileType","getIcon","iconType","renderRemoveBtn","fileRemoveBtn","e","stopPropagation","disabled","status","renderUploadOverlay","imageOverlay","percent","progress","strokeColor","renderFileCard","_getIcon","isExternalUrl","fileCard","cursor","undefined","fileIcon","fileInfo","href","target","rel","fileLink","title","length","substring","showInfo","errorMessage","marginTop","Number","position","controls","autoPlay","loop","muted","poster","aspectRatio","borderRadius","background"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n PictureOutlined,\n} from \"@ant-design/icons\";\nimport {\n FileItem,\n FileGalleryProps,\n FileIconType,\n ImageDisplayMode,\n FileCardType,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\nconst getFileName = (file: FileItem): string =>\n file.displayName || file.name || \"\";\n\nconst getFileSize = (file: FileItem): number => file.size || 0;\n\nconst getMimeType = (file: FileItem): string =>\n file.mimeType || file.type || \"\";\n\nconst getFileUrl = (file: FileItem): string =>\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\";\n\nconst getFileId = (file: FileItem): string => file.id || file.uid || \"\";\n\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nconst IMAGE_EXTS = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"svg\"];\nconst AUDIO_EXTS = [\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"];\nconst VIDEO_EXTS = [\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"];\n\n/** 自动推断文件卡片类型 */\nconst inferFileType = (file: FileItem): FileCardType => {\n const mimeType = getMimeType(file);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n\n const ext = getFileExtension(getFileName(file));\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n\n // URL 扩展名兜底\n const url = getFileUrl(file);\n const urlExtMatch = url.match(/\\.(\\w+)(\\?.*)?$/);\n if (urlExtMatch) {\n const urlExt = urlExtMatch[1].toLowerCase();\n if (IMAGE_EXTS.includes(urlExt)) return \"image\";\n if (AUDIO_EXTS.includes(urlExt)) return \"audio\";\n if (VIDEO_EXTS.includes(urlExt)) return \"video\";\n }\n\n return \"file\";\n};\n\n/** 根据扩展名获取文件图标类型 key */\nconst getFileIconType = (file: FileItem): FileIconType => {\n const ext = getFileExtension(getFileName(file));\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"word\";\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) return \"excel\";\n if ([\"ppt\", \"pptx\"].includes(ext)) return \"ppt\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext))\n return \"zip\";\n if ([\"md\", \"markdown\"].includes(ext)) return \"markdown\";\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n return \"default\";\n};\n\n/** 默认图标映射 */\nconst DEFAULT_ICON_MAP: Record<\n FileIconType,\n { icon: React.ReactNode; color: string }\n> = {\n pdf: { icon: <FilePdfOutlined />, color: \"#ff4d4f\" },\n word: { icon: <FileWordOutlined />, color: \"#1677ff\" },\n excel: { icon: <FileExcelOutlined />, color: \"#22b35e\" },\n ppt: { icon: <FilePptOutlined />, color: \"#ff6e31\" },\n audio: { icon: <AudioOutlined />, color: \"#722ed1\" },\n video: { icon: <VideoCameraOutlined />, color: \"#fa8c16\" },\n zip: { icon: <FileZipOutlined />, color: \"#eb2f96\" },\n markdown: { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" },\n image: { icon: <FileImageOutlined />, color: \"#8c8c8c\" },\n default: { icon: <FileOutlined />, color: \"#8c8c8c\" },\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst FALLBACK_IMAGE =\n \"data:image/png;base64,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\";\n\n// ==================== 子组件:图片加载状态管理 ====================\n\nconst ImageWithLoading: React.FC<{\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n loading?: \"lazy\" | \"eager\";\n preview?: false | { src: string };\n fallback?: string;\n displayMode: ImageDisplayMode;\n styles: ReturnType<typeof useStyles>;\n}> = ({\n src,\n alt,\n width,\n height,\n loading,\n preview,\n fallback,\n displayMode,\n styles,\n}) => {\n const [loadState, setLoadState] = useState<\n \"loading\" | \"loaded\" | \"error\"\n >(\"loading\");\n\n useEffect(() => {\n setLoadState(\"loading\");\n }, [src]);\n\n const modeClass =\n displayMode === \"full\"\n ? styles.imageFullMode\n : displayMode === \"preview\"\n ? styles.imagePreviewMode\n : styles.imageThumbnail;\n\n const containerStyle: React.CSSProperties = {};\n if (width)\n containerStyle.width = typeof width === \"number\" ? `${width}px` : width;\n if (height)\n containerStyle.height = typeof height === \"number\" ? `${height}px` : height;\n\n return (\n <div className={modeClass} style={containerStyle}>\n {loadState === \"loading\" && (\n <div className={styles.imageLoadingSkeleton}>\n <PictureOutlined style={{ fontSize: 20, color: \"#d9d9d9\" }} />\n </div>\n )}\n\n {loadState === \"error\" && (\n <div className={styles.imageErrorFallback}>\n <PictureOutlined />\n <span>加载失败</span>\n </div>\n )}\n\n <Image\n src={src}\n alt={alt}\n fallback={fallback}\n preview={preview}\n loading={loading}\n style={{\n display: loadState === \"error\" ? \"none\" : \"block\",\n opacity: loadState === \"loading\" ? 0 : 1,\n transition: \"opacity 0.3s ease\",\n ...(displayMode === \"thumbnail\"\n ? { width: \"100%\", height: \"100%\", objectFit: \"cover\" }\n : { maxWidth: \"100%\", objectFit: \"contain\" }),\n }}\n onLoad={() => setLoadState(\"loaded\")}\n onError={() => setLoadState(\"error\")}\n />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n type: customType,\n // 图片相关\n imageDisplayMode = \"thumbnail\",\n imageWidth,\n imageHeight,\n imageLoading = \"eager\",\n imageAlt,\n // 音视频相关\n mediaAutoPlay = false,\n mediaLoop = false,\n mediaMuted = false,\n mediaPoster,\n videoProps,\n audioProps,\n // 自定义图标\n iconMap,\n customIcon,\n}) => {\n const styles = useStyles();\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 核心逻辑:type prop 决定渲染方式(参考 file-card)\n // - 不传 type:自动推断,图片/音频/视频用原生渲染\n // - type=\"file\":强制附件卡片(音视频不可播放)\n // - type=\"image\"/\"audio\"/\"video\":强制指定类型\n const fileType = useMemo<FileCardType>(\n () => customType || inferFileType(file),\n [customType, file],\n );\n\n /** 获取图标(支持自定义) */\n const getIcon = (\n iconType: FileIconType,\n ): { icon: React.ReactNode; color: string } => {\n if (customIcon) return { icon: customIcon, color: \"inherit\" };\n if (iconMap?.[iconType])\n return { icon: iconMap[iconType]!, color: \"inherit\" };\n return DEFAULT_ICON_MAP[iconType];\n };\n\n // ==================== 渲染删除按钮 ====================\n const renderRemoveBtn = () =>\n removable ? (\n <button\n className={styles.fileRemoveBtn}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(fileId);\n }}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n ) : null;\n\n // ==================== 渲染上传进度遮罩 ====================\n const renderUploadOverlay = () =>\n file.status === \"uploading\" ? (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n ) : null;\n\n // ==================== 附件卡片渲染(type=\"file\" 或普通文档) ====================\n const renderFileCard = () => {\n const iconType = getFileIconType(file);\n const { icon, color } = getIcon(iconType);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>\n {formatFileSize(fileSize)}\n </div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{ fontSize: \"11px\", color: \"#ff4d4f\", marginTop: \"2px\" }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n };\n\n // ==================== 图片渲染 ====================\n if (fileType === \"image\") {\n // full / preview 模式:独立展示\n if (imageDisplayMode === \"full\" || imageDisplayMode === \"preview\") {\n const containerStyle: React.CSSProperties = { ...style };\n if (imageWidth)\n containerStyle.width =\n typeof imageWidth === \"number\" ? `${imageWidth}px` : imageWidth;\n if (imageHeight)\n containerStyle.height =\n typeof imageHeight === \"number\" ? `${imageHeight}px` : imageHeight;\n\n return (\n <div\n className={`${imageDisplayMode === \"full\" ? styles.imageFullMode : styles.imagePreviewMode} ${className || \"\"}`}\n style={containerStyle}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n displayMode={imageDisplayMode}\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // thumbnail 模式:卡片形式\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n width={imageWidth}\n height={imageHeight}\n displayMode=\"thumbnail\"\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 音频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"audio\") {\n return (\n <div\n className={`file-gallery-audio ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <audio\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n style={{ width: \"100%\" }}\n {...audioProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 视频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"video\") {\n return (\n <div\n className={`file-gallery-video ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <video\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n poster={mediaPoster}\n style={{\n width: \"100%\",\n aspectRatio: \"16 / 9\",\n borderRadius: 8,\n background: \"#000\",\n }}\n {...videoProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 其他文件(附件卡片) ====================\n return renderFileCard();\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","useMemo","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","PictureOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","getFileExtension","filename","ext","split","pop","toLowerCase","IMAGE_EXTS","AUDIO_EXTS","VIDEO_EXTS","inferFileType","startsWith","includes","url","urlExtMatch","match","urlExt","getFileIconType","DEFAULT_ICON_MAP","pdf","icon","color","word","excel","ppt","audio","video","zip","markdown","image","default","formatFileSize","bytes","toFixed","FALLBACK_IMAGE","ImageWithLoading","_ref","src","alt","width","height","loading","preview","fallback","displayMode","className","styles","_useState","_useState2","_slicedToArray","loadState","setLoadState","modeClass","imageFullMode","imagePreviewMode","imageThumbnail","containerStyle","concat","style","children","imageLoadingSkeleton","fontSize","imageErrorFallback","_objectSpread","display","opacity","transition","objectFit","maxWidth","onLoad","onError","FileGallery","_ref2","_ref2$align","align","_ref2$size","_ref2$removable","removable","_ref2$onRemove","onRemove","onClick","customType","_ref2$imageDisplayMod","imageDisplayMode","imageWidth","imageHeight","_ref2$imageLoading","imageLoading","imageAlt","_ref2$mediaAutoPlay","mediaAutoPlay","_ref2$mediaLoop","mediaLoop","_ref2$mediaMuted","mediaMuted","mediaPoster","videoProps","audioProps","iconMap","customIcon","_useState3","_useState4","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","fileName","fileSize","fileId","isSmall","cardClassName","fileCard","fileCardSmall","fileType","getIcon","iconType","renderRemoveBtn","fileRemoveBtn","fileRemoveBtnSmall","e","stopPropagation","disabled","status","renderUploadOverlay","imageOverlay","percent","progress","strokeColor","renderFileCard","_getIcon","isExternalUrl","cursor","undefined","fileIcon","fileIconSmall","fileInfo","href","target","rel","fileLink","title","fileNameSmall","length","substring","showInfo","progressSmall","errorMessage","marginTop","imageThumbnailSmall","Number","position","controls","autoPlay","loop","muted","poster","aspectRatio","borderRadius","background"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n PictureOutlined,\n} from \"@ant-design/icons\";\nimport {\n FileItem,\n FileGalleryProps,\n FileIconType,\n ImageDisplayMode,\n FileCardType,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\nconst getFileName = (file: FileItem): string =>\n file.displayName || file.name || \"\";\n\nconst getFileSize = (file: FileItem): number => file.size || 0;\n\nconst getMimeType = (file: FileItem): string =>\n file.mimeType || file.type || \"\";\n\nconst getFileUrl = (file: FileItem): string =>\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\";\n\nconst getFileId = (file: FileItem): string => file.id || file.uid || \"\";\n\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nconst IMAGE_EXTS = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"svg\"];\nconst AUDIO_EXTS = [\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"];\nconst VIDEO_EXTS = [\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"];\n\n/** 自动推断文件卡片类型 */\nconst inferFileType = (file: FileItem): FileCardType => {\n const mimeType = getMimeType(file);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n\n const ext = getFileExtension(getFileName(file));\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n\n // URL 扩展名兜底\n const url = getFileUrl(file);\n const urlExtMatch = url.match(/\\.(\\w+)(\\?.*)?$/);\n if (urlExtMatch) {\n const urlExt = urlExtMatch[1].toLowerCase();\n if (IMAGE_EXTS.includes(urlExt)) return \"image\";\n if (AUDIO_EXTS.includes(urlExt)) return \"audio\";\n if (VIDEO_EXTS.includes(urlExt)) return \"video\";\n }\n\n return \"file\";\n};\n\n/** 根据扩展名获取文件图标类型 key */\nconst getFileIconType = (file: FileItem): FileIconType => {\n const ext = getFileExtension(getFileName(file));\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"word\";\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) return \"excel\";\n if ([\"ppt\", \"pptx\"].includes(ext)) return \"ppt\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext))\n return \"zip\";\n if ([\"md\", \"markdown\"].includes(ext)) return \"markdown\";\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n return \"default\";\n};\n\n/** 默认图标映射 */\nconst DEFAULT_ICON_MAP: Record<\n FileIconType,\n { icon: React.ReactNode; color: string }\n> = {\n pdf: { icon: <FilePdfOutlined />, color: \"#ff4d4f\" },\n word: { icon: <FileWordOutlined />, color: \"#1677ff\" },\n excel: { icon: <FileExcelOutlined />, color: \"#22b35e\" },\n ppt: { icon: <FilePptOutlined />, color: \"#ff6e31\" },\n audio: { icon: <AudioOutlined />, color: \"#722ed1\" },\n video: { icon: <VideoCameraOutlined />, color: \"#fa8c16\" },\n zip: { icon: <FileZipOutlined />, color: \"#eb2f96\" },\n markdown: { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" },\n image: { icon: <FileImageOutlined />, color: \"#8c8c8c\" },\n default: { icon: <FileOutlined />, color: \"#8c8c8c\" },\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst FALLBACK_IMAGE =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==\";\n\n// ==================== 子组件:图片加载状态管理 ====================\n\nconst ImageWithLoading: React.FC<{\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n loading?: \"lazy\" | \"eager\";\n preview?: false | { src: string };\n fallback?: string;\n displayMode: ImageDisplayMode;\n className?: string;\n styles: ReturnType<typeof useStyles>;\n}> = ({\n src,\n alt,\n width,\n height,\n loading,\n preview,\n fallback,\n displayMode,\n className,\n styles,\n}) => {\n const [loadState, setLoadState] = useState<\n \"loading\" | \"loaded\" | \"error\"\n >(\"loading\");\n\n useEffect(() => {\n setLoadState(\"loading\");\n }, [src]);\n\n const modeClass =\n displayMode === \"full\"\n ? styles.imageFullMode\n : displayMode === \"preview\"\n ? styles.imagePreviewMode\n : styles.imageThumbnail;\n\n const containerStyle: React.CSSProperties = {};\n if (width)\n containerStyle.width = typeof width === \"number\" ? `${width}px` : width;\n if (height)\n containerStyle.height = typeof height === \"number\" ? `${height}px` : height;\n\n return (\n <div\n className={`${modeClass} ${className || \"\"}`}\n style={containerStyle}\n >\n {loadState === \"loading\" && (\n <div className={styles.imageLoadingSkeleton}>\n <PictureOutlined style={{ fontSize: 20, color: \"#d9d9d9\" }} />\n </div>\n )}\n\n {loadState === \"error\" && (\n <div className={styles.imageErrorFallback}>\n <PictureOutlined />\n <span>加载失败</span>\n </div>\n )}\n\n <Image\n src={src}\n alt={alt}\n fallback={fallback}\n preview={preview}\n loading={loading}\n style={{\n display: loadState === \"error\" ? \"none\" : \"block\",\n opacity: loadState === \"loading\" ? 0 : 1,\n transition: \"opacity 0.3s ease\",\n ...(displayMode === \"thumbnail\"\n ? { width: \"100%\", height: \"100%\", objectFit: \"cover\" }\n : { maxWidth: \"100%\", objectFit: \"contain\" }),\n }}\n onLoad={() => setLoadState(\"loaded\")}\n onError={() => setLoadState(\"error\")}\n />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n size = \"default\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n type: customType,\n // 图片相关\n imageDisplayMode = \"thumbnail\",\n imageWidth,\n imageHeight,\n imageLoading = \"eager\",\n imageAlt,\n // 音视频相关\n mediaAutoPlay = false,\n mediaLoop = false,\n mediaMuted = false,\n mediaPoster,\n videoProps,\n audioProps,\n // 自定义图标\n iconMap,\n customIcon,\n}) => {\n const styles = useStyles();\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n const isSmall = size === \"small\";\n const cardClassName = `${styles.fileCard} ${isSmall ? styles.fileCardSmall : \"\"} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`;\n\n // 核心逻辑:type prop 决定渲染方式(参考 file-card)\n // - 不传 type:自动推断,图片/音频/视频用原生渲染\n // - type=\"file\":强制附件卡片(音视频不可播放)\n // - type=\"image\"/\"audio\"/\"video\":强制指定类型\n const fileType = useMemo<FileCardType>(\n () => customType || inferFileType(file),\n [customType, file],\n );\n\n /** 获取图标(支持自定义) */\n const getIcon = (\n iconType: FileIconType,\n ): { icon: React.ReactNode; color: string } => {\n if (customIcon) return { icon: customIcon, color: \"inherit\" };\n if (iconMap?.[iconType])\n return { icon: iconMap[iconType]!, color: \"inherit\" };\n return DEFAULT_ICON_MAP[iconType];\n };\n\n // ==================== 渲染删除按钮 ====================\n const renderRemoveBtn = () =>\n removable ? (\n <button\n className={`${styles.fileRemoveBtn} ${isSmall ? styles.fileRemoveBtnSmall : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(fileId);\n }}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n ) : null;\n\n // ==================== 渲染上传进度遮罩 ====================\n const renderUploadOverlay = () =>\n file.status === \"uploading\" ? (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n ) : null;\n\n // ==================== 附件卡片渲染(type=\"file\" 或普通文档) ====================\n const renderFileCard = () => {\n const iconType = getFileIconType(file);\n const { icon, color } = getIcon(iconType);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={cardClassName}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div\n className={`${styles.fileIcon} ${isSmall ? styles.fileIconSmall : \"\"}`}\n style={{ color }}\n >\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={`${styles.progress} ${isSmall ? styles.progressSmall : \"\"}`}\n />\n ) : (\n !isSmall && fileSize > 0 && (\n <div className={styles.fileSize}>\n {formatFileSize(fileSize)}\n </div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{ fontSize: \"11px\", color: \"#ff4d4f\", marginTop: \"2px\" }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n };\n\n // ==================== 图片渲染 ====================\n if (fileType === \"image\") {\n // full / preview 模式:独立展示\n if (imageDisplayMode === \"full\" || imageDisplayMode === \"preview\") {\n const containerStyle: React.CSSProperties = { ...style };\n if (imageWidth)\n containerStyle.width =\n typeof imageWidth === \"number\" ? `${imageWidth}px` : imageWidth;\n if (imageHeight)\n containerStyle.height =\n typeof imageHeight === \"number\" ? `${imageHeight}px` : imageHeight;\n\n return (\n <div\n className={`${imageDisplayMode === \"full\" ? styles.imageFullMode : styles.imagePreviewMode} ${className || \"\"}`}\n style={containerStyle}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n displayMode={imageDisplayMode}\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // thumbnail 模式:卡片形式\n return (\n <div\n className={cardClassName}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n width={size === \"small\" ? 22 : imageWidth}\n height={size === \"small\" ? 22 : imageHeight}\n displayMode=\"thumbnail\"\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n className={isSmall ? styles.imageThumbnailSmall : undefined}\n />\n {renderUploadOverlay()}\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {!isSmall && Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 音频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"audio\" && size !== \"small\") {\n return (\n <div\n className={`file-gallery-audio ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <audio\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n style={{ width: \"100%\" }}\n {...audioProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 视频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"video\" && size !== \"small\") {\n return (\n <div\n className={`file-gallery-video ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <video\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n poster={mediaPoster}\n style={{\n width: \"100%\",\n aspectRatio: \"16 / 9\",\n borderRadius: 8,\n background: \"#000\",\n }}\n {...videoProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 其他文件(附件卡片) ====================\n return renderFileCard();\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
@@ -2,14 +2,21 @@ export declare const useStyles: () => {
|
|
|
2
2
|
container: string;
|
|
3
3
|
fileList: string;
|
|
4
4
|
fileCard: string;
|
|
5
|
+
fileCardSmall: string;
|
|
5
6
|
imageThumbnail: string;
|
|
7
|
+
imageThumbnailSmall: string;
|
|
6
8
|
imageOverlay: string;
|
|
7
9
|
fileIcon: string;
|
|
10
|
+
fileIconSmall: string;
|
|
8
11
|
fileInfo: string;
|
|
9
12
|
fileName: string;
|
|
13
|
+
fileNameSmall: string;
|
|
10
14
|
fileSize: string;
|
|
15
|
+
fileSizeSmall: string;
|
|
11
16
|
progress: string;
|
|
17
|
+
progressSmall: string;
|
|
12
18
|
fileRemoveBtn: string;
|
|
19
|
+
fileRemoveBtnSmall: string;
|
|
13
20
|
fileLink: string;
|
|
14
21
|
mediaWrapper: string;
|
|
15
22
|
imagePreviewMode: string;
|
|
@@ -1,30 +1,37 @@
|
|
|
1
1
|
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18;
|
|
2
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25;
|
|
3
3
|
import { css } from "@emotion/css";
|
|
4
4
|
import { withBasicStyles } from "../../styles/common";
|
|
5
5
|
export var useStyles = withBasicStyles(function () {
|
|
6
6
|
return {
|
|
7
7
|
container: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n &.align-right {\n align-items: flex-end;\n }\n "]))),
|
|
8
8
|
fileList: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n "]))),
|
|
9
|
-
fileCard: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n position: relative;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 12px;\n margin: 8px 0;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 8px;\n min-width: 260px;\n max-width: 280px;\n min-height: 64px;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f5f5f5;\n border-color: #e0e0e0;\n }\n\n /* align=right \u65F6\u56FE\u6807\u5728\u53F3\u4FA7 */\n &.align-right {\n flex-direction: row-reverse;\n }\n "]))),
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
fileCard: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n position: relative;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 12px;\n margin: 8px 0;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 8px;\n min-width: 260px;\n max-width: 280px;\n min-height: 64px;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f5f5f5;\n border-color: #e0e0e0;\n }\n\n /* align=right \u65F6\u56FE\u6807\u5728\u53F3\u4FA7 */\n &.align-right {\n flex-direction: row-reverse;\n }\n\n "]))),
|
|
10
|
+
fileCardSmall: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n gap: 6px;\n min-width: 0;\n max-width: 260px;\n width: auto;\n height: 32px;\n min-height: 32px;\n margin: 0;\n padding: 4px 10px 4px 8px;\n border-radius: 7px;\n background: #f5f5f5;\n border-color: transparent;\n box-sizing: border-box;\n\n &:hover {\n background: #eeeeee;\n border-color: transparent;\n }\n\n .ant-progress-line {\n width: auto;\n }\n "]))),
|
|
11
|
+
imageThumbnail: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n position: relative;\n width: 44px;\n height: 44px;\n flex-shrink: 0;\n border-radius: 4px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n display: block !important;\n }\n\n "]))),
|
|
12
|
+
imageThumbnailSmall: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n width: 22px;\n height: 22px;\n border-radius: 5px;\n "]))),
|
|
13
|
+
imageOverlay: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.05);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n "]))),
|
|
14
|
+
fileIcon: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n font-size: 24px;\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n "]))),
|
|
15
|
+
fileIconSmall: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n width: 20px;\n height: 20px;\n font-size: 16px;\n "]))),
|
|
16
|
+
fileInfo: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n flex: 1;\n min-width: 0;\n overflow: hidden;\n "]))),
|
|
17
|
+
fileName: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n font-size: 13px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n "]))),
|
|
18
|
+
fileNameSmall: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n max-width: 190px;\n margin-bottom: 0;\n font-size: 12px;\n line-height: 20px;\n "]))),
|
|
19
|
+
fileSize: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n font-size: 11px;\n color: #8c8c8c;\n\n "]))),
|
|
20
|
+
fileSizeSmall: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: none;\n "]))),
|
|
21
|
+
progress: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n margin-top: 4px;\n\n .ant-progress-inner {\n height: 4px !important;\n }\n\n .ant-progress-bg {\n height: 4px !important;\n }\n\n "]))),
|
|
22
|
+
progressSmall: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n position: absolute;\n left: 34px;\n right: 10px;\n bottom: 3px;\n margin-top: 0;\n line-height: 0;\n\n .ant-progress-outer {\n display: block;\n width: 100%;\n padding-inline-end: 0 !important;\n }\n\n .ant-progress-inner {\n height: 3px !important;\n background: rgba(22, 119, 255, 0.12);\n }\n\n .ant-progress-bg {\n height: 3px !important;\n }\n "]))),
|
|
23
|
+
fileRemoveBtn: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n position: absolute;\n top: -6px;\n right: -6px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.75);\n color: #fff;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1;\n padding: 0;\n font-size: 10px;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.9);\n transform: scale(1.1);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n "]))),
|
|
24
|
+
fileRemoveBtnSmall: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n top: -5px;\n right: -5px;\n width: 14px;\n height: 14px;\n font-size: 8px;\n "]))),
|
|
25
|
+
fileLink: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n color: rgba(0, 0, 0, 0.85);\n text-decoration: none;\n font-size: 13px;\n\n &:hover {\n color: #1677ff;\n }\n "]))),
|
|
26
|
+
mediaWrapper: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n margin-top: 6px;\n\n audio {\n width: 100%;\n height: 32px;\n outline: none;\n }\n\n video {\n width: 100%;\n max-height: 240px;\n border-radius: 4px;\n outline: none;\n background: #000;\n }\n "]))),
|
|
20
27
|
// ========== 图片展示模式 ==========
|
|
21
|
-
imagePreviewMode: css(
|
|
22
|
-
imageFullMode: css(
|
|
28
|
+
imagePreviewMode: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n display: block !important;\n object-fit: contain !important;\n }\n "]))),
|
|
29
|
+
imageFullMode: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n width: 100%;\n\n .ant-image {\n width: 100% !important;\n display: flex !important;\n }\n\n img {\n width: 100% !important;\n display: block !important;\n object-fit: contain !important;\n }\n "]))),
|
|
23
30
|
// ========== 图片加载状态 ==========
|
|
24
|
-
imageLoadingSkeleton: css(
|
|
25
|
-
imageErrorFallback: css(
|
|
31
|
+
imageLoadingSkeleton: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(90deg, #f5f5f5 25%, #e8e8e8 50%, #f5f5f5 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n\n @keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n "]))),
|
|
32
|
+
imageErrorFallback: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n color: #bfbfbf;\n font-size: 20px;\n gap: 4px;\n\n span {\n font-size: 11px;\n color: #bfbfbf;\n }\n "]))),
|
|
26
33
|
// ========== Media Card 模式 ==========
|
|
27
|
-
mediaCardPlayIcon: css(
|
|
34
|
+
mediaCardPlayIcon: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.5);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n z-index: 2;\n "])))
|
|
28
35
|
};
|
|
29
36
|
});
|
|
30
37
|
export default useStyles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","fileList","_templateObject2","fileCard","_templateObject3","
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","container","_templateObject","_taggedTemplateLiteral","fileList","_templateObject2","fileCard","_templateObject3","fileCardSmall","_templateObject4","imageThumbnail","_templateObject5","imageThumbnailSmall","_templateObject6","imageOverlay","_templateObject7","fileIcon","_templateObject8","fileIconSmall","_templateObject9","fileInfo","_templateObject10","fileName","_templateObject11","fileNameSmall","_templateObject12","fileSize","_templateObject13","fileSizeSmall","_templateObject14","progress","_templateObject15","progressSmall","_templateObject16","fileRemoveBtn","_templateObject17","fileRemoveBtnSmall","_templateObject18","fileLink","_templateObject19","mediaWrapper","_templateObject20","imagePreviewMode","_templateObject21","imageFullMode","_templateObject22","imageLoadingSkeleton","_templateObject23","imageErrorFallback","_templateObject24","mediaCardPlayIcon","_templateObject25"],"sources":["../../../../src/components/FileGallery/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n container: css`\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n &.align-right {\n align-items: flex-end;\n }\n `,\n\n fileList: css`\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n `,\n\n fileCard: css`\n position: relative;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 12px;\n margin: 8px 0;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 8px;\n min-width: 260px;\n max-width: 280px;\n min-height: 64px;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f5f5f5;\n border-color: #e0e0e0;\n }\n\n /* align=right 时图标在右侧 */\n &.align-right {\n flex-direction: row-reverse;\n }\n\n `,\n\n fileCardSmall: css`\n gap: 6px;\n min-width: 0;\n max-width: 260px;\n width: auto;\n height: 32px;\n min-height: 32px;\n margin: 0;\n padding: 4px 10px 4px 8px;\n border-radius: 7px;\n background: #f5f5f5;\n border-color: transparent;\n box-sizing: border-box;\n\n &:hover {\n background: #eeeeee;\n border-color: transparent;\n }\n\n .ant-progress-line {\n width: auto;\n }\n `,\n\n imageThumbnail: css`\n position: relative;\n width: 44px;\n height: 44px;\n flex-shrink: 0;\n border-radius: 4px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n width: 100% !important;\n height: 100% !important;\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n display: block !important;\n }\n\n `,\n\n imageThumbnailSmall: css`\n width: 22px;\n height: 22px;\n border-radius: 5px;\n `,\n\n imageOverlay: css`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.05);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n `,\n\n fileIcon: css`\n font-size: 24px;\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n `,\n\n fileIconSmall: css`\n width: 20px;\n height: 20px;\n font-size: 16px;\n `,\n\n fileInfo: css`\n flex: 1;\n min-width: 0;\n overflow: hidden;\n `,\n\n fileName: css`\n font-size: 13px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n `,\n\n fileNameSmall: css`\n max-width: 190px;\n margin-bottom: 0;\n font-size: 12px;\n line-height: 20px;\n `,\n\n fileSize: css`\n font-size: 11px;\n color: #8c8c8c;\n\n `,\n\n fileSizeSmall: css`\n display: none;\n `,\n\n progress: css`\n margin-top: 4px;\n\n .ant-progress-inner {\n height: 4px !important;\n }\n\n .ant-progress-bg {\n height: 4px !important;\n }\n\n `,\n\n progressSmall: css`\n position: absolute;\n left: 34px;\n right: 10px;\n bottom: 3px;\n margin-top: 0;\n line-height: 0;\n\n .ant-progress-outer {\n display: block;\n width: 100%;\n padding-inline-end: 0 !important;\n }\n\n .ant-progress-inner {\n height: 3px !important;\n background: rgba(22, 119, 255, 0.12);\n }\n\n .ant-progress-bg {\n height: 3px !important;\n }\n `,\n\n fileRemoveBtn: css`\n position: absolute;\n top: -6px;\n right: -6px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.75);\n color: #fff;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 1;\n padding: 0;\n font-size: 10px;\n transition: all 0.2s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.9);\n transform: scale(1.1);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `,\n\n fileRemoveBtnSmall: css`\n top: -5px;\n right: -5px;\n width: 14px;\n height: 14px;\n font-size: 8px;\n `,\n\n fileLink: css`\n display: flex;\n align-items: center;\n gap: 8px;\n color: rgba(0, 0, 0, 0.85);\n text-decoration: none;\n font-size: 13px;\n\n &:hover {\n color: #1677ff;\n }\n `,\n\n mediaWrapper: css`\n margin-top: 6px;\n\n audio {\n width: 100%;\n height: 32px;\n outline: none;\n }\n\n video {\n width: 100%;\n max-height: 240px;\n border-radius: 4px;\n outline: none;\n background: #000;\n }\n `,\n\n // ========== 图片展示模式 ==========\n imagePreviewMode: css`\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n\n .ant-image {\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n img {\n display: block !important;\n object-fit: contain !important;\n }\n `,\n\n imageFullMode: css`\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n background-color: #f5f5f5;\n border: 1px solid rgba(0, 0, 0, 0.06);\n width: 100%;\n\n .ant-image {\n width: 100% !important;\n display: flex !important;\n }\n\n img {\n width: 100% !important;\n display: block !important;\n object-fit: contain !important;\n }\n `,\n\n // ========== 图片加载状态 ==========\n imageLoadingSkeleton: css`\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(90deg, #f5f5f5 25%, #e8e8e8 50%, #f5f5f5 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n\n @keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `,\n\n imageErrorFallback: css`\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n color: #bfbfbf;\n font-size: 20px;\n gap: 4px;\n\n span {\n font-size: 11px;\n color: #bfbfbf;\n }\n `,\n\n // ========== Media Card 模式 ==========\n mediaCardPlayIcon: css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.5);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n z-index: 2;\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,SAAS,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,+JASb;IAEDC,QAAQ,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,qEAIZ;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,yhBAyBZ;IAEDK,aAAa,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,8aAsBjB;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,8iBAyBlB;IAEDS,mBAAmB,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0EAIvB;IAEDW,YAAY,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,mOAWhB;IAEDa,QAAQ,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,0KASZ;IAEDe,aAAa,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,uEAIjB;IAEDiB,QAAQ,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,oEAIZ;IAEDmB,QAAQ,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,wLASZ;IAEDqB,aAAa,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,wGAKjB;IAEDuB,QAAQ,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,yDAIZ;IAEDyB,aAAa,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,gCAEjB;IAED2B,QAAQ,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,uKAWZ;IAED6B,aAAa,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,2aAsBjB;IAED+B,aAAa,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,mjBA4BjB;IAEDiC,kBAAkB,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,wGAMtB;IAEDmC,QAAQ,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,2MAWZ;IAEDqC,YAAY,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,qQAgBhB;IAED;IACAuC,gBAAgB,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,sXAiBpB;IAEDyC,aAAa,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,0YAkBjB;IAED;IACA2C,oBAAoB,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,ibAkBxB;IAED6C,kBAAkB,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,kTAgBtB;IAED;IACA+C,iBAAiB,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA;EAgBxB,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SourcesItem, SourcesProps } from "../../../types/Sources";
|
|
3
|
+
export interface CarouselCardProps {
|
|
4
|
+
activeKey?: SourcesProps['activeKey'];
|
|
5
|
+
prefixCls: string;
|
|
6
|
+
items?: SourcesProps['items'];
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
onClick?: (item: SourcesItem) => void;
|
|
10
|
+
}
|
|
11
|
+
declare const CarouselCard: React.FC<CarouselCardProps>;
|
|
12
|
+
export default CarouselCard;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import { LeftOutlined, RightOutlined } from '@ant-design/icons';
|
|
4
|
+
import { Carousel } from 'antd';
|
|
5
|
+
import { clsx } from 'clsx';
|
|
6
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
7
|
+
import useStyle from "../styles";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
var CarouselCard = function CarouselCard(props) {
|
|
11
|
+
var prefixCls = props.prefixCls,
|
|
12
|
+
items = props.items,
|
|
13
|
+
activeKey = props.activeKey,
|
|
14
|
+
className = props.className,
|
|
15
|
+
style = props.style;
|
|
16
|
+
var styles = useStyle();
|
|
17
|
+
|
|
18
|
+
// Derive the target slide index from activeKey
|
|
19
|
+
var activeSlideIndex = React.useMemo(function () {
|
|
20
|
+
var _items$findIndex;
|
|
21
|
+
return Math.max(0, (_items$findIndex = items === null || items === void 0 ? void 0 : items.findIndex(function (_ref) {
|
|
22
|
+
var key = _ref.key;
|
|
23
|
+
return key === activeKey;
|
|
24
|
+
})) !== null && _items$findIndex !== void 0 ? _items$findIndex : 0);
|
|
25
|
+
}, [items, activeKey]);
|
|
26
|
+
var _useState = useState(activeSlideIndex),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
slide = _useState2[0],
|
|
29
|
+
setSlide = _useState2[1];
|
|
30
|
+
var carouselRef = useRef(null);
|
|
31
|
+
useEffect(function () {
|
|
32
|
+
setSlide(activeSlideIndex);
|
|
33
|
+
if (carouselRef.current) {
|
|
34
|
+
carouselRef.current.goTo(activeSlideIndex, false);
|
|
35
|
+
}
|
|
36
|
+
}, [activeSlideIndex]);
|
|
37
|
+
var handleClick = function handleClick(item) {
|
|
38
|
+
var _props$onClick;
|
|
39
|
+
item.url && window.open(item.url, '_blank', 'noopener,noreferrer');
|
|
40
|
+
(_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, item);
|
|
41
|
+
};
|
|
42
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
43
|
+
style: style,
|
|
44
|
+
className: clsx(styles.carouselWrapper, className),
|
|
45
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
46
|
+
className: styles.carouselTitle,
|
|
47
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
48
|
+
className: styles.carouselBtnWrapper,
|
|
49
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
50
|
+
className: clsx(styles.carouselBtn, _defineProperty({}, styles.carouselBtnDisabled, slide === 0)),
|
|
51
|
+
onClick: function onClick() {
|
|
52
|
+
if (slide > 0) {
|
|
53
|
+
var _carouselRef$current;
|
|
54
|
+
var next = slide - 1;
|
|
55
|
+
setSlide(next);
|
|
56
|
+
(_carouselRef$current = carouselRef.current) === null || _carouselRef$current === void 0 || _carouselRef$current.goTo(next, false);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
children: /*#__PURE__*/_jsx(LeftOutlined, {})
|
|
60
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
61
|
+
className: clsx(styles.carouselBtn, _defineProperty({}, styles.carouselBtnDisabled, slide === ((items === null || items === void 0 ? void 0 : items.length) || 1) - 1)),
|
|
62
|
+
onClick: function onClick() {
|
|
63
|
+
var max = ((items === null || items === void 0 ? void 0 : items.length) || 1) - 1;
|
|
64
|
+
if (slide < max) {
|
|
65
|
+
var _carouselRef$current2;
|
|
66
|
+
var next = slide + 1;
|
|
67
|
+
setSlide(next);
|
|
68
|
+
(_carouselRef$current2 = carouselRef.current) === null || _carouselRef$current2 === void 0 || _carouselRef$current2.goTo(next, false);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
children: /*#__PURE__*/_jsx(RightOutlined, {})
|
|
72
|
+
})]
|
|
73
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
74
|
+
className: styles.carouselPage,
|
|
75
|
+
children: "".concat(slide + 1, "/").concat((items === null || items === void 0 ? void 0 : items.length) || 1)
|
|
76
|
+
})]
|
|
77
|
+
}), /*#__PURE__*/_jsx(Carousel, {
|
|
78
|
+
ref: carouselRef,
|
|
79
|
+
arrows: false,
|
|
80
|
+
infinite: false,
|
|
81
|
+
dots: false,
|
|
82
|
+
afterChange: setSlide,
|
|
83
|
+
children: items === null || items === void 0 ? void 0 : items.map(function (item, index) {
|
|
84
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
85
|
+
className: styles.carouselItem,
|
|
86
|
+
onClick: function onClick() {
|
|
87
|
+
return handleClick(item);
|
|
88
|
+
},
|
|
89
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
90
|
+
className: styles.carouselItemTitleWrapper,
|
|
91
|
+
children: [item.icon && /*#__PURE__*/_jsx("span", {
|
|
92
|
+
children: item.icon
|
|
93
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
94
|
+
className: styles.carouselItemTitle,
|
|
95
|
+
children: item.title
|
|
96
|
+
})]
|
|
97
|
+
}), item.description && /*#__PURE__*/_jsx("div", {
|
|
98
|
+
className: styles.carouselItemDescription,
|
|
99
|
+
children: item.description
|
|
100
|
+
})]
|
|
101
|
+
}, item.key || index);
|
|
102
|
+
})
|
|
103
|
+
})]
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
export default CarouselCard;
|
|
107
|
+
//# sourceMappingURL=CarouselCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LeftOutlined","RightOutlined","Carousel","clsx","React","useEffect","useRef","useState","useStyle","jsx","_jsx","jsxs","_jsxs","CarouselCard","props","prefixCls","items","activeKey","className","style","styles","activeSlideIndex","useMemo","_items$findIndex","Math","max","findIndex","_ref","key","_useState","_useState2","_slicedToArray","slide","setSlide","carouselRef","current","goTo","handleClick","item","_props$onClick","url","window","open","onClick","call","carouselWrapper","children","carouselTitle","carouselBtnWrapper","carouselBtn","_defineProperty","carouselBtnDisabled","_carouselRef$current","next","length","_carouselRef$current2","carouselPage","concat","ref","arrows","infinite","dots","afterChange","map","index","carouselItem","carouselItemTitleWrapper","icon","carouselItemTitle","title","description","carouselItemDescription"],"sources":["../../../../../src/components/Sources/components/CarouselCard.tsx"],"sourcesContent":["import { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { Carousel } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { SourcesItem, SourcesProps } from '@/types/Sources';\nimport useStyle from '../styles';\n\nexport interface CarouselCardProps {\n activeKey?: SourcesProps['activeKey'];\n prefixCls: string;\n items?: SourcesProps['items'];\n className?: string;\n style?: React.CSSProperties;\n onClick?: (item: SourcesItem) => void;\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = (props) => {\n const { prefixCls, items, activeKey, className, style } = props;\n const styles = useStyle();\n\n // Derive the target slide index from activeKey\n const activeSlideIndex = React.useMemo(\n () => Math.max(0, items?.findIndex(({ key }) => key === activeKey) ?? 0),\n [items, activeKey],\n );\n\n const [slide, setSlide] = useState<number>(activeSlideIndex);\n\n const carouselRef = useRef<React.ComponentRef<typeof Carousel>>(null);\n\n useEffect(() => {\n setSlide(activeSlideIndex);\n if (carouselRef.current) {\n carouselRef.current.goTo(activeSlideIndex, false);\n }\n }, [activeSlideIndex]);\n\n const handleClick = (item: SourcesItem) => {\n item.url && window.open(item.url, '_blank', 'noopener,noreferrer');\n props.onClick?.(item);\n };\n\n return (\n <div style={style} className={clsx(styles.carouselWrapper, className)}>\n <div className={styles.carouselTitle}>\n <div className={styles.carouselBtnWrapper}>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === 0,\n })}\n onClick={() => {\n if (slide > 0) {\n const next = slide - 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <LeftOutlined />\n </span>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === (items?.length || 1) - 1,\n })}\n onClick={() => {\n const max = (items?.length || 1) - 1;\n if (slide < max) {\n const next = slide + 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <RightOutlined />\n </span>\n </div>\n <div className={styles.carouselPage}>{`${slide + 1}/${items?.length || 1}`}</div>\n </div>\n <Carousel\n ref={carouselRef}\n arrows={false}\n infinite={false}\n dots={false}\n afterChange={setSlide}\n >\n {items?.map((item, index) => (\n <div\n key={item.key || index}\n className={styles.carouselItem}\n onClick={() => handleClick(item)}\n >\n <div className={styles.carouselItemTitleWrapper}>\n {item.icon && <span>{item.icon}</span>}\n <span className={styles.carouselItemTitle}>{item.title}</span>\n </div>\n {item.description && (\n <div className={styles.carouselItemDescription}>{item.description}</div>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n );\n};\n\nexport default CarouselCard;"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SourcesProps, SourcesRef } from "../../types/Sources";
|
|
3
|
+
declare const ForwardSources: React.ForwardRefExoticComponent<SourcesProps & React.RefAttributes<SourcesRef>>;
|
|
4
|
+
export default ForwardSources;
|
|
5
|
+
export type { SourcesProps, SourcesItem, SourcesRef } from "../../types/Sources";
|