@ai-group/chat-sdk 3.7.5 → 3.8.0-alpha.2

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.
Files changed (117) hide show
  1. package/README.md +36 -0
  2. package/dist/cjs/components/DislikeFeedback.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/index.js +2 -1
  4. package/dist/cjs/components/FileGallery/index.js.map +3 -3
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/Sources/components/CarouselCard.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.js +307 -59
  8. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  9. package/dist/cjs/components/XAdkChatbot/styles.d.ts +4 -0
  10. package/dist/cjs/components/XAdkChatbot/styles.js +59 -2
  11. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/utils.d.ts +14 -0
  13. package/dist/cjs/components/XAdkChatbot/utils.js +79 -0
  14. package/dist/cjs/components/XAdkChatbot/utils.js.map +7 -0
  15. package/dist/cjs/components/XAdkProvider/compound/DislikeFeedBack.js.map +2 -2
  16. package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -1
  17. package/dist/cjs/components/XAdkProvider/compound/Messages.js +12 -0
  18. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  19. package/dist/cjs/components/XAdkProvider/compound/Sidebar.js.map +2 -2
  20. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  21. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  22. package/dist/cjs/components/XAdkProvider/index.js +3 -0
  23. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  24. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  25. package/dist/cjs/components/XAdkSender/index.js +53 -5
  26. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  27. package/dist/cjs/components/XAdkThoughtChain/index.js +27 -28
  28. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  29. package/dist/cjs/components/XAdkThoughtChain/styles.d.ts +3 -1
  30. package/dist/cjs/components/XAdkThoughtChain/styles.js +66 -39
  31. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  32. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  33. package/dist/cjs/components/XAiConversations/index.js +2 -1
  34. package/dist/cjs/components/XAiConversations/index.js.map +3 -3
  35. package/dist/cjs/components/XAiProvider/index.js.map +2 -2
  36. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  37. package/dist/cjs/hooks/useADKChat.d.ts +6 -1
  38. package/dist/cjs/hooks/useADKChat.js +15 -1
  39. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  40. package/dist/cjs/hooks/useADKMessageQueue.d.ts +24 -0
  41. package/dist/cjs/hooks/useADKMessageQueue.js +107 -0
  42. package/dist/cjs/hooks/useADKMessageQueue.js.map +7 -0
  43. package/dist/cjs/index.d.ts +3 -1
  44. package/dist/cjs/index.js +3 -0
  45. package/dist/cjs/index.js.map +2 -2
  46. package/dist/cjs/react/index.d.ts +2 -0
  47. package/dist/cjs/react/index.js +3 -0
  48. package/dist/cjs/react/index.js.map +2 -2
  49. package/dist/cjs/types/XAdkChatbot.d.ts +49 -0
  50. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  51. package/dist/cjs/types/XAdkProvider.d.ts +7 -0
  52. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  53. package/dist/cjs/types/XAdkSender.d.ts +8 -1
  54. package/dist/cjs/types/XAdkSender.js.map +1 -1
  55. package/dist/cjs/types/XAdkThoughtChain.d.ts +2 -0
  56. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  57. package/dist/cjs/types/antdx.d.ts +6 -3
  58. package/dist/cjs/types/antdx.js.map +1 -1
  59. package/dist/esm/components/DislikeFeedback.js.map +1 -1
  60. package/dist/esm/components/FileGallery/index.js +2 -1
  61. package/dist/esm/components/FileGallery/index.js.map +1 -1
  62. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  63. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/index.js +277 -25
  65. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  66. package/dist/esm/components/XAdkChatbot/styles.d.ts +4 -0
  67. package/dist/esm/components/XAdkChatbot/styles.js +30 -26
  68. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  69. package/dist/esm/components/XAdkChatbot/utils.d.ts +14 -0
  70. package/dist/esm/components/XAdkChatbot/utils.js +66 -0
  71. package/dist/esm/components/XAdkChatbot/utils.js.map +1 -0
  72. package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.js.map +1 -1
  73. package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -1
  74. package/dist/esm/components/XAdkProvider/compound/Messages.js +16 -2
  75. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  76. package/dist/esm/components/XAdkProvider/compound/Sidebar.js.map +1 -1
  77. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  78. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  79. package/dist/esm/components/XAdkProvider/index.js +4 -2
  80. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  81. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  82. package/dist/esm/components/XAdkSender/index.js +80 -16
  83. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  84. package/dist/esm/components/XAdkThoughtChain/index.js +52 -78
  85. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  86. package/dist/esm/components/XAdkThoughtChain/styles.d.ts +3 -1
  87. package/dist/esm/components/XAdkThoughtChain/styles.js +29 -27
  88. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  89. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  90. package/dist/esm/components/XAiConversations/index.js +2 -1
  91. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  92. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  93. package/dist/esm/components/XAiSender/index.js.map +1 -1
  94. package/dist/esm/hooks/useADKChat.d.ts +6 -1
  95. package/dist/esm/hooks/useADKChat.js +18 -1
  96. package/dist/esm/hooks/useADKChat.js.map +1 -1
  97. package/dist/esm/hooks/useADKMessageQueue.d.ts +24 -0
  98. package/dist/esm/hooks/useADKMessageQueue.js +159 -0
  99. package/dist/esm/hooks/useADKMessageQueue.js.map +1 -0
  100. package/dist/esm/index.d.ts +3 -1
  101. package/dist/esm/index.js +2 -1
  102. package/dist/esm/index.js.map +1 -1
  103. package/dist/esm/react/index.d.ts +2 -0
  104. package/dist/esm/react/index.js +1 -0
  105. package/dist/esm/react/index.js.map +1 -1
  106. package/dist/esm/types/XAdkChatbot.d.ts +49 -0
  107. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  108. package/dist/esm/types/XAdkProvider.d.ts +7 -0
  109. package/dist/esm/types/XAdkProvider.js.map +1 -1
  110. package/dist/esm/types/XAdkSender.d.ts +8 -1
  111. package/dist/esm/types/XAdkSender.js.map +1 -1
  112. package/dist/esm/types/XAdkThoughtChain.d.ts +2 -0
  113. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  114. package/dist/esm/types/antdx.d.ts +6 -3
  115. package/dist/esm/types/antdx.js.map +1 -1
  116. package/dist/umd/chat-sdk.min.js +1 -1
  117. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/antdx.ts"],
4
- "sourcesContent": ["/**\n * @ant-design/x 类型本地声明\n * 从 @ant-design/x 源码提取的公共 API 类型,减少外部依赖\n */\nimport type React from 'react';\nimport type { UploadFile, MenuProps } from 'antd';\n\n// ==================== Conversations ====================\n\nexport interface ConversationItemType\n extends Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick'> {\n key: string;\n label?: React.ReactNode;\n group?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n [key: string]: any;\n}\n\nexport interface DividerItemType {\n type: 'divider';\n key?: string;\n dashed?: boolean;\n}\n\nexport type ItemType = ConversationItemType | DividerItemType;\n\ntype ConversationsSemanticType = 'root' | 'creation' | 'group' | 'item';\n\nexport interface ConversationsProps extends React.HTMLAttributes<HTMLUListElement> {\n items?: ItemType[];\n activeKey?: ConversationItemType['key'];\n defaultActiveKey?: ConversationItemType['key'];\n onActiveChange?: (value: ConversationItemType['key'], item?: ItemType) => void;\n menu?:\n | (MenuProps & {\n trigger?:\n | React.ReactNode\n | ((\n conversation: ConversationItemType,\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n })\n | ((\n value: ConversationItemType,\n ) => MenuProps & {\n trigger?:\n | React.ReactNode\n | ((\n conversation: ConversationItemType,\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n });\n groupable?: boolean | Record<string, any>;\n styles?: Partial<Record<ConversationsSemanticType, React.CSSProperties>>;\n classNames?: Partial<Record<ConversationsSemanticType, string>>;\n prefixCls?: string;\n rootClassName?: string;\n}\n\n// ==================== Sender ====================\n\ntype TextareaProps = React.ComponentProps<typeof import('antd').Input.TextArea>;\n\ntype SubmitType = 'enter' | 'shiftEnter';\n\ntype SenderSemanticType = 'root' | 'prefix' | 'input' | 'suffix' | 'footer' | 'switch' | 'content';\n\nexport interface SenderComponents {\n input?: React.ComponentType<any>;\n}\n\nexport type ActionsComponents = {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n LoadingButton: React.ComponentType<any>;\n SpeechButton: React.ComponentType<any>;\n};\n\nexport type BaseNode = React.ReactNode | false;\nexport type NodeRender = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => BaseNode;\n\nexport interface SenderProps\n extends Partial<Pick<TextareaProps, 'placeholder' | 'onKeyUp' | 'onFocus' | 'onBlur'>> {\n prefixCls?: string;\n defaultValue?: string;\n value?: string;\n loading?: boolean;\n readOnly?: boolean;\n submitType?: SubmitType;\n disabled?: boolean;\n onSubmit?: (message: string, ...args: any[]) => void;\n onChange?: (value: string, ...args: any[]) => void;\n onCancel?: VoidFunction;\n onKeyDown?: (event: React.KeyboardEvent) => void | false;\n onPaste?: React.ClipboardEventHandler<HTMLElement>;\n onPasteFile?: (files: FileList) => void;\n components?: SenderComponents;\n classNames?: Partial<Record<SenderSemanticType, string>>;\n styles?: Partial<Record<SenderSemanticType, React.CSSProperties>>;\n rootClassName?: string;\n style?: React.CSSProperties;\n className?: string;\n allowSpeech?: any;\n prefix?: BaseNode | NodeRender;\n footer?: BaseNode | NodeRender;\n suffix?: BaseNode | NodeRender;\n header?: BaseNode | NodeRender;\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n slotConfig?: Readonly<any[]>;\n skill?: any;\n}\n\n// ==================== Prompts ====================\n\nexport interface BasePromptsItemType {\n key: string;\n icon?: React.ReactNode;\n label?: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface PromptsItemType extends BasePromptsItemType {\n children?: BasePromptsItemType[];\n}\n\ntype PromptsSemanticType =\n | 'root'\n | 'list'\n | 'item'\n | 'itemContent'\n | 'title'\n | 'subList'\n | 'subItem';\n\nexport interface PromptsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'title'> {\n items?: PromptsItemType[];\n title?: React.ReactNode;\n onClick?: (info: { data: PromptsItemType }) => void;\n styles?: Partial<Record<PromptsSemanticType, React.CSSProperties>>;\n classNames?: Partial<Record<PromptsSemanticType, string>>;\n prefixCls?: string;\n rootClassName?: string;\n vertical?: boolean;\n wrap?: boolean;\n}\n\n// ==================== Attachments ====================\n\nexport interface Attachment<T = any>\n extends UploadFile<T> {\n description?: React.ReactNode;\n cardType?: 'audio' | 'video' | 'image' | 'file';\n}\n\nexport interface AttachmentsRef {\n nativeElement?: HTMLDivElement | null;\n fileNativeElement?: HTMLInputElement | null;\n upload: (file: File) => void;\n select: (options?: { accept?: string; multiple?: boolean }) => void;\n}\n\n// ==================== Think ====================\n\ntype ThinkSemanticType = 'root' | 'header' | 'content' | 'icon';\n\nexport interface ThinkProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n prefixCls?: string;\n style?: React.CSSProperties;\n styles?: Partial<Record<ThinkSemanticType, React.CSSProperties>>;\n className?: string;\n classNames?: Partial<Record<ThinkSemanticType, string>>;\n rootClassName?: string;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n loading?: boolean | React.ReactNode;\n defaultExpanded?: boolean;\n expanded?: boolean;\n onExpand?: (expand: boolean) => void;\n blink?: boolean;\n destroyOnHidden?: boolean;\n}\n"],
4
+ "sourcesContent": ["/**\n * @ant-design/x 类型本地声明\n * 从 @ant-design/x 源码提取的公共 API 类型,减少外部依赖\n */\nimport type React from 'react';\nimport type { UploadFile, MenuProps, InputProps } from 'antd';\n\n// ==================== Conversations ====================\n\nexport interface ConversationItemType\n extends Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick'> {\n key: string;\n label?: React.ReactNode;\n group?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n [key: string]: any;\n}\n\nexport interface DividerItemType {\n type: 'divider';\n key?: string;\n dashed?: boolean;\n}\n\nexport type ItemType = ConversationItemType | DividerItemType;\n\ntype ConversationsSemanticType = 'root' | 'creation' | 'group' | 'item';\n\nexport interface ConversationsProps extends React.HTMLAttributes<HTMLUListElement> {\n items?: ItemType[];\n activeKey?: ConversationItemType['key'];\n defaultActiveKey?: ConversationItemType['key'];\n onActiveChange?: (value: ConversationItemType['key'], item?: ItemType) => void;\n menu?:\n | (MenuProps & {\n trigger?:\n | React.ReactNode\n | ((\n conversation: ConversationItemType,\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n })\n | ((\n value: ConversationItemType,\n ) => MenuProps & {\n trigger?:\n | React.ReactNode\n | ((\n conversation: ConversationItemType,\n info: { originNode: React.ReactNode },\n ) => React.ReactNode);\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n });\n groupable?: boolean | Record<string, any>;\n styles?: Partial<Record<ConversationsSemanticType, React.CSSProperties>>;\n classNames?: Partial<Record<ConversationsSemanticType, string>>;\n prefixCls?: string;\n rootClassName?: string;\n}\n\n// ==================== Sender ====================\n\ntype TextareaProps = InputProps;\n\ntype SubmitType = 'enter' | 'shiftEnter';\n\ntype SenderSemanticType = 'root' | 'prefix' | 'input' | 'suffix' | 'footer' | 'switch' | 'content';\n\nexport interface SenderComponents {\n input?: React.ComponentType<any>;\n}\n\nexport type ActionsComponents = {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n LoadingButton: React.ComponentType<any>;\n SpeechButton: React.ComponentType<any>;\n};\n\nexport type BaseNode = React.ReactNode | false;\nexport type NodeRender = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => BaseNode;\n\nexport interface SenderProps\n extends Omit<Partial<Pick<TextareaProps, 'placeholder' | 'onKeyUp' | 'onFocus' | 'onBlur'>>, 'onKeyUp' | 'onFocus' | 'onBlur'> {\n onKeyUp?: React.KeyboardEventHandler<HTMLTextAreaElement>;\n onFocus?: React.FocusEventHandler<HTMLTextAreaElement>;\n onBlur?: React.FocusEventHandler<HTMLTextAreaElement>;\n prefixCls?: string;\n defaultValue?: string;\n value?: string;\n loading?: boolean;\n readOnly?: boolean;\n submitType?: SubmitType;\n disabled?: boolean;\n onSubmit?: (message: string, ...args: any[]) => void;\n onChange?: (value: string, ...args: any[]) => void;\n onCancel?: VoidFunction;\n onKeyDown?: (event: React.KeyboardEvent) => void | false;\n onPaste?: React.ClipboardEventHandler<HTMLElement>;\n onPasteFile?: (files: FileList) => void;\n components?: SenderComponents;\n classNames?: Partial<Record<SenderSemanticType, string>>;\n styles?: Partial<Record<SenderSemanticType, React.CSSProperties>>;\n rootClassName?: string;\n style?: React.CSSProperties;\n className?: string;\n allowSpeech?: any;\n prefix?: BaseNode | NodeRender;\n footer?: BaseNode | NodeRender;\n suffix?: BaseNode | NodeRender;\n header?: BaseNode | NodeRender;\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n slotConfig?: Readonly<any[]>;\n skill?: any;\n}\n\n// ==================== Prompts ====================\n\nexport interface BasePromptsItemType {\n key: string;\n icon?: React.ReactNode;\n label?: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface PromptsItemType extends BasePromptsItemType {\n children?: BasePromptsItemType[];\n}\n\ntype PromptsSemanticType =\n | 'root'\n | 'list'\n | 'item'\n | 'itemContent'\n | 'title'\n | 'subList'\n | 'subItem';\n\nexport interface PromptsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick' | 'title'> {\n items?: PromptsItemType[];\n title?: React.ReactNode;\n onClick?: (info: { data: PromptsItemType }) => void;\n styles?: Partial<Record<PromptsSemanticType, React.CSSProperties>>;\n classNames?: Partial<Record<PromptsSemanticType, string>>;\n prefixCls?: string;\n rootClassName?: string;\n vertical?: boolean;\n wrap?: boolean;\n}\n\n// ==================== Attachments ====================\n\nexport interface Attachment<T = any>\n extends UploadFile<T> {\n description?: React.ReactNode;\n cardType?: 'audio' | 'video' | 'image' | 'file';\n}\n\nexport interface AttachmentsRef {\n nativeElement?: HTMLDivElement | null;\n fileNativeElement?: HTMLInputElement | null;\n upload: (file: File) => void;\n select: (options?: { accept?: string; multiple?: boolean }) => void;\n}\n\n// ==================== Think ====================\n\ntype ThinkSemanticType = 'root' | 'header' | 'content' | 'icon';\n\nexport interface ThinkProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n prefixCls?: string;\n style?: React.CSSProperties;\n styles?: Partial<Record<ThinkSemanticType, React.CSSProperties>>;\n className?: string;\n classNames?: Partial<Record<ThinkSemanticType, string>>;\n rootClassName?: string;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n loading?: boolean | React.ReactNode;\n defaultExpanded?: boolean;\n expanded?: boolean;\n onExpand?: (expand: boolean) => void;\n blink?: boolean;\n destroyOnHidden?: boolean;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Form","Input","message","Popover","React","useState","DislikeFilled","DislikeOutlined","FeedbackTags","jsx","_jsx","jsxs","_jsxs","DislikeFeedback","_ref","_msg$raw","msg","activeColor","onSubmit","_Form$useForm","useForm","_Form$useForm2","_slicedToArray","form","_useState","_useState2","showFeedback","setShowFeedback","trigger","open","onOpenChange","v","_msg$isLike","isLike","warning","resetFields","title","children","style","color","fontWeight","marginBottom","content","Item","name","TextArea","rows","placeholder","dependencies","noStyle","_ref2","getFieldValue","feedbackTags","feedbackDescription","disabled","length","type","block","onClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","res","wrap","_callee$","_context","prev","next","validateFields","sent","stop","raw","size","icon"],"sources":["../../../src/components/DislikeFeedback.tsx"],"sourcesContent":["import { Button, Form, Input, message, Popover } from 'antd';\nimport React, { useState } from 'react';\nimport { DislikeFilled, DislikeOutlined } from '@ant-design/icons';\nimport FeedbackTags from './FeedbackTags';\n\nexport interface DislikeFeedbackProps {\n msg: any;\n activeColor: string;\n onSubmit: (v: any) => Promise<boolean>;\n}\n\nexport const DislikeFeedback: React.FC<DislikeFeedbackProps> = ({ msg, activeColor, onSubmit }) => {\n const [form] = Form.useForm();\n const [showFeedback, setShowFeedback] = useState(false);\n return (\n <Popover\n trigger={['click']}\n open={showFeedback}\n onOpenChange={(v) => {\n const isLike = msg.isLike ?? 0;\n if (v && isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (v) {\n form.resetFields();\n }\n setShowFeedback(v);\n }}\n title={(\n <div>\n <div>抱歉,未能满足您的需求</div>\n <div style={{ color: '#999', fontWeight: 'normal', marginBottom: 12 }}>\n 为提升您的使用体验,请告诉我们不足的方向\n </div>\n </div>\n )}\n content={(\n <div>\n <Form form={form}>\n <Form.Item name=\"feedbackTags\" style={{ marginBottom: 12 }}>\n <FeedbackTags />\n </Form.Item>\n <Form.Item name=\"feedbackDescription\" style={{ marginBottom: 12 }}>\n <Input.TextArea rows={4} placeholder=\"欢迎说说你的想法\" />\n </Form.Item>\n <Form.Item dependencies={['feedbackTags', 'feedbackDescription']} noStyle>\n {({ getFieldValue }) => {\n const feedbackTags = getFieldValue('feedbackTags') || [];\n const feedbackDescription = getFieldValue('feedbackDescription');\n const disabled = !feedbackTags.length && !feedbackDescription;\n return (\n <Button\n type=\"primary\"\n block\n disabled={disabled}\n onClick={async () => {\n const formData = await form.validateFields();\n const res = await onSubmit(formData);\n if (res) {\n setShowFeedback(false);\n }\n }}\n >\n 提交反馈\n </Button>\n );\n }}\n </Form.Item>\n </Form>\n </div>\n )}\n >\n {(msg.raw?.isLike || msg.isLike) === -1\n ? (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<DislikeFilled style={{ color: activeColor }} />}\n />\n )\n : (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<DislikeOutlined style={{ color: '#949494' }} />}\n />\n )}\n </Popover>\n );\n};\n\nexport default DislikeFeedback;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Button","Form","Input","message","Popover","React","useState","DislikeFilled","DislikeOutlined","FeedbackTags","jsx","_jsx","jsxs","_jsxs","DislikeFeedback","_ref","_msg$raw","msg","activeColor","onSubmit","_Form$useForm","useForm","_Form$useForm2","_slicedToArray","form","_useState","_useState2","showFeedback","setShowFeedback","trigger","open","onOpenChange","v","_msg$isLike","isLike","warning","resetFields","title","children","style","color","fontWeight","marginBottom","content","Item","name","TextArea","rows","placeholder","dependencies","noStyle","_ref2","getFieldValue","feedbackTags","feedbackDescription","disabled","length","type","block","onClick","_asyncToGenerator","_regeneratorRuntime","mark","_callee","formData","res","wrap","_callee$","_context","prev","next","validateFields","sent","stop","raw","size","icon"],"sources":["../../../src/components/DislikeFeedback.tsx"],"sourcesContent":["import { Button, Form, Input, message, Popover } from 'antd';\nimport React, { useState } from 'react';\nimport { DislikeFilled, DislikeOutlined } from '@ant-design/icons';\nimport FeedbackTags from './FeedbackTags';\n\nexport interface DislikeFeedbackProps {\n msg: any;\n activeColor: string;\n onSubmit: (v: any) => Promise<boolean>;\n}\n\nexport const DislikeFeedback: React.FC<DislikeFeedbackProps> = ({ msg, activeColor, onSubmit }) => {\n const [form] = Form.useForm();\n const [showFeedback, setShowFeedback] = useState(false);\n return (\n <Popover\n trigger={['click']}\n open={showFeedback}\n onOpenChange={(v: boolean) => {\n const isLike = msg.isLike ?? 0;\n if (v && isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (v) {\n form.resetFields();\n }\n setShowFeedback(v);\n }}\n title={(\n <div>\n <div>抱歉,未能满足您的需求</div>\n <div style={{ color: '#999', fontWeight: 'normal', marginBottom: 12 }}>\n 为提升您的使用体验,请告诉我们不足的方向\n </div>\n </div>\n )}\n content={(\n <div>\n <Form form={form}>\n <Form.Item name=\"feedbackTags\" style={{ marginBottom: 12 }}>\n <FeedbackTags />\n </Form.Item>\n <Form.Item name=\"feedbackDescription\" style={{ marginBottom: 12 }}>\n <Input.TextArea rows={4} placeholder=\"欢迎说说你的想法\" />\n </Form.Item>\n <Form.Item dependencies={['feedbackTags', 'feedbackDescription']} noStyle>\n {({ getFieldValue }: { getFieldValue: (name: string) => any }) => {\n const feedbackTags = getFieldValue('feedbackTags') || [];\n const feedbackDescription = getFieldValue('feedbackDescription');\n const disabled = !feedbackTags.length && !feedbackDescription;\n return (\n <Button\n type=\"primary\"\n block\n disabled={disabled}\n onClick={async () => {\n const formData = await form.validateFields();\n const res = await onSubmit(formData);\n if (res) {\n setShowFeedback(false);\n }\n }}\n >\n 提交反馈\n </Button>\n );\n }}\n </Form.Item>\n </Form>\n </div>\n )}\n >\n {(msg.raw?.isLike || msg.isLike) === -1\n ? (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<DislikeFilled style={{ color: activeColor }} />}\n />\n )\n : (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<DislikeOutlined style={{ color: '#949494' }} />}\n />\n )}\n </Popover>\n );\n};\n\nexport default DislikeFeedback;\n"],"mappings":";;;AAAA,SAASA,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,OAAO,QAAQ,MAAM;AAC5D,OAAOC,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAClE,OAAOC,YAAY;AAAuB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAQ1C,OAAO,IAAMC,eAA+C,GAAG,SAAlDA,eAA+CA,CAAAC,IAAA,EAAuC;EAAA,IAAAC,QAAA;EAAA,IAAjCC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IAAEC,WAAW,GAAAH,IAAA,CAAXG,WAAW;IAAEC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;EAC1F,IAAAC,aAAA,GAAenB,IAAI,CAACoB,OAAO,CAAC,CAAC;IAAAC,cAAA,GAAAC,cAAA,CAAAH,aAAA;IAAtBI,IAAI,GAAAF,cAAA;EACX,IAAAG,SAAA,GAAwCnB,QAAQ,CAAC,KAAK,CAAC;IAAAoB,UAAA,GAAAH,cAAA,CAAAE,SAAA;IAAhDE,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EACpC,oBACEf,IAAA,CAACP,OAAO;IACNyB,OAAO,EAAE,CAAC,OAAO,CAAE;IACnBC,IAAI,EAAEH,YAAa;IACnBI,YAAY,EAAE,SAAAA,aAACC,CAAU,EAAK;MAAA,IAAAC,WAAA;MAC5B,IAAMC,MAAM,IAAAD,WAAA,GAAGhB,GAAG,CAACiB,MAAM,cAAAD,WAAA,cAAAA,WAAA,GAAI,CAAC;MAC9B,IAAID,CAAC,IAAIE,MAAM,KAAK,CAAC,EAAE;QACrB/B,OAAO,CAACgC,OAAO,CAAC,gBAAgB,CAAC;QACjC;MACF;MACA,IAAIH,CAAC,EAAE;QACLR,IAAI,CAACY,WAAW,CAAC,CAAC;MACpB;MACAR,eAAe,CAACI,CAAC,CAAC;IACpB,CAAE;IACFK,KAAK,eACHxB,KAAA;MAAAyB,QAAA,gBACE3B,IAAA;QAAA2B,QAAA,EAAK;MAAW,CAAK,CAAC,eACtB3B,IAAA;QAAK4B,KAAK,EAAE;UAAEC,KAAK,EAAE,MAAM;UAAEC,UAAU,EAAE,QAAQ;UAAEC,YAAY,EAAE;QAAG,CAAE;QAAAJ,QAAA,EAAC;MAEvE,CAAK,CAAC;IAAA,CACH,CACL;IACFK,OAAO,eACLhC,IAAA;MAAA2B,QAAA,eACEzB,KAAA,CAACZ,IAAI;QAACuB,IAAI,EAAEA,IAAK;QAAAc,QAAA,gBACf3B,IAAA,CAACV,IAAI,CAAC2C,IAAI;UAACC,IAAI,EAAC,cAAc;UAACN,KAAK,EAAE;YAAEG,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,eACzD3B,IAAA,CAACF,YAAY,IAAE;QAAC,CACP,CAAC,eACZE,IAAA,CAACV,IAAI,CAAC2C,IAAI;UAACC,IAAI,EAAC,qBAAqB;UAACN,KAAK,EAAE;YAAEG,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,eAChE3B,IAAA,CAACT,KAAK,CAAC4C,QAAQ;YAACC,IAAI,EAAE,CAAE;YAACC,WAAW,EAAC;UAAU,CAAE;QAAC,CACzC,CAAC,eACZrC,IAAA,CAACV,IAAI,CAAC2C,IAAI;UAACK,YAAY,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAE;UAACC,OAAO;UAAAZ,QAAA,EACtE,SAAAA,SAAAa,KAAA,EAAiE;YAAA,IAA9DC,aAAa,GAAAD,KAAA,CAAbC,aAAa;YACf,IAAMC,YAAY,GAAGD,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE;YACxD,IAAME,mBAAmB,GAAGF,aAAa,CAAC,qBAAqB,CAAC;YAChE,IAAMG,QAAQ,GAAG,CAACF,YAAY,CAACG,MAAM,IAAI,CAACF,mBAAmB;YAC7D,oBACE3C,IAAA,CAACX,MAAM;cACLyD,IAAI,EAAC,SAAS;cACdC,KAAK;cACLH,QAAQ,EAAEA,QAAS;cACnBI,OAAO,eAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAC,QAAA;gBAAA,IAAAC,QAAA,EAAAC,GAAA;gBAAA,OAAAJ,mBAAA,GAAAK,IAAA,UAAAC,SAAAC,QAAA;kBAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;oBAAA;sBAAAF,QAAA,CAAAE,IAAA;sBAAA,OACgB9C,IAAI,CAAC+C,cAAc,CAAC,CAAC;oBAAA;sBAAtCP,QAAQ,GAAAI,QAAA,CAAAI,IAAA;sBAAAJ,QAAA,CAAAE,IAAA;sBAAA,OACInD,QAAQ,CAAC6C,QAAQ,CAAC;oBAAA;sBAA9BC,GAAG,GAAAG,QAAA,CAAAI,IAAA;sBACT,IAAIP,GAAG,EAAE;wBACPrC,eAAe,CAAC,KAAK,CAAC;sBACxB;oBAAC;oBAAA;sBAAA,OAAAwC,QAAA,CAAAK,IAAA;kBAAA;gBAAA,GAAAV,OAAA;cAAA,CACF,EAAC;cAAAzB,QAAA,EACH;YAED,CAAQ,CAAC;UAEb;QAAC,CACQ,CAAC;MAAA,CACR;IAAC,CACJ,CACL;IAAAA,QAAA,EAED,CAAC,EAAAtB,QAAA,GAAAC,GAAG,CAACyD,GAAG,cAAA1D,QAAA,uBAAPA,QAAA,CAASkB,MAAM,KAAIjB,GAAG,CAACiB,MAAM,MAAM,CAAC,CAAC,gBAEjCvB,IAAA,CAACX,MAAM;MACLyD,IAAI,EAAC,MAAM;MACXkB,IAAI,EAAC,OAAO;MACZC,IAAI,eAAEjE,IAAA,CAACJ,aAAa;QAACgC,KAAK,EAAE;UAAEC,KAAK,EAAEtB;QAAY;MAAE,CAAE;IAAE,CACxD,CAAC,gBAGFP,IAAA,CAACX,MAAM;MACLyD,IAAI,EAAC,MAAM;MACXkB,IAAI,EAAC,OAAO;MACZC,IAAI,eAAEjE,IAAA,CAACH,eAAe;QAAC+B,KAAK,EAAE;UAAEC,KAAK,EAAE;QAAU;MAAE,CAAE;IAAE,CACxD;EACJ,CACI,CAAC;AAEd,CAAC;AAED,eAAe1B,eAAe"}
@@ -1,7 +1,8 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
3
  import React, { useState, useEffect, useMemo } from "react";
4
- import { Image, Tooltip, Progress } from "antd";
4
+ import { Image as RawImage, Tooltip, Progress } from "antd";
5
+ var Image = RawImage;
5
6
  import { FileOutlined, FilePdfOutlined, FileWordOutlined, FileExcelOutlined, FilePptOutlined, FileImageOutlined, CloseOutlined, AudioOutlined, FileZipOutlined, VideoCameraOutlined, FileMarkdownOutlined, PictureOutlined } from "@ant-design/icons";
6
7
  import { useStyles } from "./styles";
7
8
 
@@ -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","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,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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 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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"}
1
+ {"version":3,"names":["React","useState","useEffect","useMemo","Image","RawImage","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 as RawImage, Tooltip, Progress } from \"antd\";\nimport type { ImageProps } from \"antd\";\nconst Image = RawImage as unknown as React.ComponentType<ImageProps>;\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 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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"}
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Tree","Dropdown","Input","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","useFolderDrag","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","InlineEditInput","_ref","editKey","value","className","onValueChange","onConfirm","onCancel","_useState","_useState2","_slicedToArray","draft","setDraft","committedRef","current","commit","size","onChange","e","target","onBlur","onPressEnter","onKeyDown","stopPropagation","key","autoFocus","onClick","onMouseDown","onSelect","onFocus","DirectoryTreeComponent","_ref2","treeData","selectedKeys","expandedKeys","onExpand","_ref2$showLine","showLine","switcherIcon","_ref2$defaultExpandAl","defaultExpandAll","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","editNode","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","onCreateNode","styles","getIcon","node","type","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","length","undefined","concat","_toConsumableArray","filter","s","renderInlineInput","treeNodeTitle","children","inlineInput","dragMode","handleDragDrop","dragNode","dropNode","dropPosition","dragNd","dropNd","originalDragNode","_originalNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","fileName","title","extra","oldPath","isLeaf","dropParentPath","includes","substring","lastIndexOf","handleDragEnterExpand","nodeKey","isExpanded","expanded","nativeEvent","_useFolderDrag","onDragEnterExpand","onDragStart","onDragEnd","onItemDragEnter","onItemDragOver","onItemDragLeave","onItemDrop","onContainerDragOver","onContainerDrop","canDragNode","convertToTreeData","nodes","parentKey","result","map","pathSegments","fullPath","join","replace","isEditing","nodeChildren","baseNode","currentValue","titleContent","treeNodeTitleHover","menu","startRename","createNode","options","trigger","placement","moreIcon","nodeData","draggableDiv","treeNodeWrapper","dragNodeHandle","onDragEnter","onDragOver","onDragLeave","mode","targetParentKey","tempNode","_isTempNode","push","treeDataConverted","handleSelect","keys","info","_info$nativeEvent","closest","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Tree, Dropdown, Input } from \"antd\";\nimport { FileOutlined, FolderOutlined, MoreOutlined } from \"@ant-design/icons\";\nimport type { TreeProps } from \"antd\";\nimport type { DataNode } from \"antd/es/tree\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport { useStyles } from \"./styles\";\nimport { useFolderDrag, type DropPosition } from \"./useFolderDrag\";\n\nconst { DirectoryTree: AntDirectoryTree } = Tree;\n\nexport interface DirectoryTreeComponentProps {\n treeData: FolderTreeData[];\n directoryIcons?: FolderTreeProps[\"directoryIcons\"];\n selectedKeys?: string[];\n expandedKeys?: string[];\n onSelect?: TreeProps[\"onSelect\"];\n onExpand?: TreeProps[\"onExpand\"];\n showLine?: FolderTreeProps[\"showLine\"];\n switcherIcon?: FolderTreeProps[\"switcherIcon\"];\n defaultExpandAll?: boolean;\n className?: string;\n directoryTitle?: FolderTreeProps[\"directoryTitle\"];\n moreActions?: FolderTreeProps[\"moreActions\"];\n width?: number | string;\n draggable?: FolderTreeProps[\"draggable\"];\n onDrop?: FolderTreeProps[\"onDrop\"];\n /** 当前编辑节点信息 */\n editNode?: EditNodeInfo | null;\n /** 编辑值变化回调 */\n onEditValueChange?: (value: string) => void;\n /** 编辑确认回调 */\n onEditConfirm?: (value?: string) => void;\n /** 编辑取消回调 */\n onEditCancel?: () => void;\n /** 新建上下文 */\n createInfo?: CreateNodeContext | null;\n /** 开始重命名回调(由父组件注入) */\n onStartRename?: (fullPath: string, node: FolderTreeData) => void;\n /** 创建节点回调(由父组件注入) */\n onCreateNode?: (\n parentPath: string,\n options: { type: \"file\" | \"folder\"; defaultName?: string; extra?: any },\n ) => void;\n}\n\ninterface InlineEditInputProps {\n editKey: string;\n value: string;\n className?: string;\n onValueChange?: (value: string) => void;\n onConfirm?: (value?: string) => void;\n onCancel?: () => void;\n}\n\nconst InlineEditInput: React.FC<InlineEditInputProps> = ({\n editKey,\n value,\n className,\n onValueChange,\n onConfirm,\n onCancel,\n}) => {\n const [draft, setDraft] = useState(value);\n const committedRef = useRef(false);\n\n useEffect(() => {\n setDraft(value);\n committedRef.current = false;\n }, [editKey, value]);\n\n const commit = useCallback(() => {\n if (committedRef.current) return;\n committedRef.current = true;\n onValueChange?.(draft);\n onConfirm?.(draft);\n }, [draft, onConfirm, onValueChange]);\n\n return (\n <Input\n size=\"small\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onPressEnter={commit}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Escape\") {\n committedRef.current = true;\n onCancel?.();\n }\n }}\n autoFocus\n className={className}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onSelect={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n />\n );\n};\n\nconst DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps> = ({\n treeData,\n selectedKeys,\n expandedKeys,\n onSelect,\n onExpand,\n showLine = false,\n switcherIcon,\n defaultExpandAll = true,\n className,\n directoryIcons,\n directoryTitle,\n moreActions,\n width,\n draggable,\n onDrop,\n editNode,\n onEditValueChange,\n onEditConfirm,\n onEditCancel,\n createInfo,\n onStartRename,\n onCreateNode,\n}) => {\n const styles = useStyles();\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (node.type == \"folder\") {\n const icon = directoryIcons?.directory;\n if (typeof icon === \"function\") return icon();\n return icon || <FolderOutlined />;\n }\n const filePath = node.path.toLowerCase();\n const extension = filePath.split(\".\").pop();\n if (extension) {\n const icon = directoryIcons?.[extension];\n if (icon) return typeof icon === \"function\" ? icon() : icon;\n }\n return <FileOutlined />;\n },\n [directoryIcons],\n );\n\n const buildPathSegments = useCallback(\n (node: FolderTreeData, parentSegments: string[] = []): string[] => {\n if (node.path === \"/\" && parentSegments.length === 0) {\n return [\"/\"];\n }\n return [...parentSegments, node.path].filter((s) => s !== \"\");\n },\n [],\n );\n\n const renderInlineInput = useCallback(\n (key: string, value: string) => (\n <span className={styles.treeNodeTitle}>\n <InlineEditInput\n editKey={key}\n value={value}\n className={styles.inlineInput}\n onValueChange={onEditValueChange}\n onConfirm={onEditConfirm}\n onCancel={onEditCancel}\n />\n </span>\n ),\n [onEditValueChange, onEditConfirm, onEditCancel, styles],\n );\n\n // ====== 拖拽模式 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n // ====== 自定义拖拽 hook ======\n const handleDragDrop = useCallback(\n (dragNode: DataNode, dropNode: DataNode, dropPosition: DropPosition) => {\n const dragNd = dragNode as DataNode & { _originalNode?: FolderTreeData };\n const dropNd = dropNode as DataNode & { _originalNode?: FolderTreeData };\n const originalDragNode = dragNd._originalNode;\n const originalDropNode = dropNd._originalNode;\n if (!originalDragNode) return;\n\n const dragKey = String(dragNode.key);\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n // 拖到底部 drop zone:放在根级别末尾\n if (!originalDropNode && dropKey === \"__bottom_placeholder__\") {\n newPath = dragFileName;\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: { title: \"\", path: \"\" },\n });\n return;\n }\n\n if (!originalDropNode) return;\n\n if (!dropNode.isLeaf && dropPosition === 0) {\n // 拖入文件夹内部\n newPath = `${dropKey}/${dragFileName}`;\n } else {\n // 拖到节点旁边(同级)\n const dropParentPath = dropKey.includes(\"/\")\n ? dropKey.substring(0, dropKey.lastIndexOf(\"/\"))\n : \"\";\n newPath = dropParentPath\n ? `${dropParentPath}/${dragFileName}`\n : dragFileName;\n }\n\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: originalDropNode,\n });\n },\n [onDrop],\n );\n\n const handleDragEnterExpand = useCallback(\n (nodeKey: string) => {\n const isExpanded = expandedKeys?.includes(nodeKey);\n if (!isExpanded) {\n onExpand?.([...(expandedKeys || []), nodeKey], {\n node: null as any,\n expanded: true,\n nativeEvent: null as any,\n });\n }\n },\n [expandedKeys, onExpand],\n );\n\n const {\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n onContainerDragOver,\n onContainerDrop,\n canDragNode,\n } = useFolderDrag({\n dragMode,\n onDrop: handleDragDrop,\n onDragEnterExpand: handleDragEnterExpand,\n });\n\n // ====== 转换树数据 ======\n // 注意:convertToTreeData 不依赖拖拽状态,拖拽效果通过 DOM 操作实现\n const convertToTreeData = useCallback(\n (\n nodes: FolderTreeData[],\n parentSegments: string[] = [],\n parentKey: string = \"\",\n ): DataNode[] => {\n const result = nodes.map((node) => {\n const pathSegments = buildPathSegments(node, parentSegments);\n const fullPath = pathSegments.join(\"/\").replace(/^\\/+/, \"\");\n\n const isEditing = editNode && editNode.key === fullPath;\n\n const nodeChildren = node.children\n ? convertToTreeData(node.children, pathSegments, fullPath)\n : undefined;\n\n const baseNode: any = {\n key: fullPath,\n path: fullPath,\n pathSegments,\n icon: getIcon(node),\n isLeaf: !(node.type === \"folder\"),\n _originalNode: node,\n children: nodeChildren,\n };\n\n // 编辑态:直接渲染 inline input\n if (isEditing) {\n baseNode.title = renderInlineInput(\n editNode!.key,\n editNode!.currentValue,\n );\n return baseNode;\n }\n\n // title 内容(按钮、菜单等)\n const titleContent = (\n <span\n className={clsx(\n styles.treeNodeTitle,\n moreActions && styles.treeNodeTitleHover,\n )}\n >\n <span>{node.title}</span>\n {moreActions && (\n <Dropdown\n menu={moreActions(node, {\n startRename: () => onStartRename?.(fullPath, node),\n createNode: (options) => onCreateNode?.(fullPath, options),\n })}\n trigger={[\"click\"]}\n placement=\"bottomRight\"\n >\n <span\n className={clsx(styles.moreIcon, \"folder-tree-more-icon\")}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreOutlined />\n </span>\n </Dropdown>\n )}\n </span>\n );\n\n // 启用拖拽时:在 title 外层包裹具有 data-node-key 属性的容器,\n // 用于 DOM 查询和事件绑定。拖拽状态通过 CSS class 控制。\n if (dragMode) {\n const nodeData = baseNode as DataNode & {\n _isTempNode?: boolean;\n };\n const draggableDiv = canDragNode(nodeData);\n\n baseNode.title = (\n <div\n className={clsx(\n styles.treeNodeWrapper,\n draggableDiv && styles.dragNodeHandle,\n )}\n data-node-key={fullPath}\n draggable={draggableDiv}\n onDragStart={\n draggableDiv ? (e) => onDragStart(e, baseNode) : undefined\n }\n onDragEnd={draggableDiv ? onDragEnd : undefined}\n onDragEnter={(e) => onItemDragEnter(e, baseNode)}\n onDragOver={(e) => onItemDragOver(e, baseNode)}\n onDragLeave={onItemDragLeave}\n onDrop={(e) => onItemDrop(e, baseNode)}\n >\n {titleContent}\n </div>\n );\n } else {\n baseNode.title = titleContent;\n }\n\n return baseNode;\n });\n\n // 新建模式:在目标父节点下插入临时节点\n if (createInfo && editNode && editNode.mode === \"create\") {\n const targetParentKey = createInfo.parentKey;\n if (\n targetParentKey === parentKey ||\n (targetParentKey === \"\" && parentKey === \"\") ||\n (targetParentKey === \"/\" && parentKey === \"\")\n ) {\n const tempNode: any = {\n key: editNode.key,\n title: renderInlineInput(editNode.key, editNode.currentValue),\n icon:\n createInfo.type === \"folder\" ? (\n <FolderOutlined />\n ) : (\n <FileOutlined />\n ),\n isLeaf: createInfo.type === \"file\",\n path: editNode.key,\n pathSegments: [editNode.key],\n _originalNode: null,\n _isTempNode: true,\n };\n result.push(tempNode);\n }\n }\n\n return result;\n },\n [\n buildPathSegments,\n getIcon,\n moreActions,\n styles,\n editNode,\n renderInlineInput,\n createInfo,\n onStartRename,\n onCreateNode,\n dragMode,\n canDragNode,\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n ],\n );\n\n const treeDataConverted = useMemo(\n () => convertToTreeData(treeData, [], \"\"),\n [treeData, convertToTreeData],\n );\n\n const handleSelect: TreeProps[\"onSelect\"] = useCallback(\n (keys: any, info: any) => {\n // 编辑态不响应选中\n if (editNode) return;\n // 临时节点不可选中\n const node = info.node as DataNode & { _isTempNode?: boolean };\n if (node._isTempNode) return;\n // 点击 moreActions 区域不触发选中\n const target = info.nativeEvent?.target as HTMLElement | null;\n if (\n target &&\n (target.closest(\".folder-tree-more-icon\") ||\n target.closest(\".ant-dropdown\"))\n ) {\n return;\n }\n onSelect?.(keys, info);\n },\n [onSelect, editNode],\n );\n\n const titleNode =\n directoryTitle === false || directoryTitle === null\n ? null\n : typeof directoryTitle === \"function\"\n ? directoryTitle()\n : directoryTitle;\n\n return (\n <div className={clsx(styles.directoryPanel, className)} style={{ width }}>\n {titleNode && <div className={styles.directoryTitle}>{titleNode}</div>}\n <div\n className={styles.directoryTreeContent}\n onDragOver={dragMode ? onContainerDragOver : undefined}\n onDrop={dragMode ? onContainerDrop : undefined}\n >\n <AntDirectoryTree\n style={\n {\n \"--ant-tree-directory-node-selected-bg\": \"rgba(0,0,0,0.03)\",\n \"--ant-tree-directory-node-selected-color\": \"#1a1c1e\",\n } as React.CSSProperties\n }\n treeData={treeDataConverted}\n selectedKeys={selectedKeys}\n expandedKeys={expandedKeys}\n onSelect={handleSelect}\n onExpand={onExpand}\n multiple={false}\n blockNode\n showLine={showLine as any}\n switcherIcon={switcherIcon}\n defaultExpandAll={defaultExpandAll}\n draggable={false}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Tree","Dropdown","Input","FileOutlined","FolderOutlined","MoreOutlined","clsx","useStyles","useFolderDrag","jsx","_jsx","jsxs","_jsxs","AntDirectoryTree","DirectoryTree","InlineEditInput","_ref","editKey","value","className","onValueChange","onConfirm","onCancel","_useState","_useState2","_slicedToArray","draft","setDraft","committedRef","current","commit","size","onChange","e","target","onBlur","onPressEnter","onKeyDown","stopPropagation","key","autoFocus","onClick","onMouseDown","onSelect","onFocus","DirectoryTreeComponent","_ref2","treeData","selectedKeys","expandedKeys","onExpand","_ref2$showLine","showLine","switcherIcon","_ref2$defaultExpandAl","defaultExpandAll","directoryIcons","directoryTitle","moreActions","width","draggable","onDrop","editNode","onEditValueChange","onEditConfirm","onEditCancel","createInfo","onStartRename","onCreateNode","styles","getIcon","node","type","icon","directory","filePath","path","toLowerCase","extension","split","pop","buildPathSegments","parentSegments","arguments","length","undefined","concat","_toConsumableArray","filter","s","renderInlineInput","treeNodeTitle","children","inlineInput","dragMode","handleDragDrop","dragNode","dropNode","dropPosition","dragNd","dropNd","originalDragNode","_originalNode","originalDropNode","dragKey","String","dropKey","dragFileName","newPath","fileName","title","extra","oldPath","isLeaf","dropParentPath","includes","substring","lastIndexOf","handleDragEnterExpand","nodeKey","isExpanded","expanded","nativeEvent","_useFolderDrag","onDragEnterExpand","onDragStart","onDragEnd","onItemDragEnter","onItemDragOver","onItemDragLeave","onItemDrop","onContainerDragOver","onContainerDrop","canDragNode","convertToTreeData","nodes","parentKey","result","map","pathSegments","fullPath","join","replace","isEditing","nodeChildren","baseNode","currentValue","titleContent","treeNodeTitleHover","menu","startRename","createNode","options","trigger","placement","moreIcon","nodeData","draggableDiv","treeNodeWrapper","dragNodeHandle","onDragEnter","onDragOver","onDragLeave","mode","targetParentKey","tempNode","_isTempNode","push","treeDataConverted","handleSelect","keys","info","_info$nativeEvent","closest","titleNode","directoryPanel","style","directoryTreeContent","multiple","blockNode"],"sources":["../../../../src/components/FolderTree/DirectoryTree.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Tree, Dropdown, Input } from \"antd\";\nimport { FileOutlined, FolderOutlined, MoreOutlined } from \"@ant-design/icons\";\nimport type { TreeProps } from \"antd\";\nimport type { DataNode } from \"antd/es/tree\";\nimport clsx from \"clsx\";\nimport type {\n FolderTreeData,\n FolderTreeProps,\n EditNodeInfo,\n CreateNodeContext,\n} from \"./types\";\nimport { useStyles } from \"./styles\";\nimport { useFolderDrag, type DropPosition } from \"./useFolderDrag\";\n\nconst { DirectoryTree: AntDirectoryTree } = Tree;\n\nexport interface DirectoryTreeComponentProps {\n treeData: FolderTreeData[];\n directoryIcons?: FolderTreeProps[\"directoryIcons\"];\n selectedKeys?: string[];\n expandedKeys?: string[];\n onSelect?: TreeProps[\"onSelect\"];\n onExpand?: TreeProps[\"onExpand\"];\n showLine?: FolderTreeProps[\"showLine\"];\n switcherIcon?: FolderTreeProps[\"switcherIcon\"];\n defaultExpandAll?: boolean;\n className?: string;\n directoryTitle?: FolderTreeProps[\"directoryTitle\"];\n moreActions?: FolderTreeProps[\"moreActions\"];\n width?: number | string;\n draggable?: FolderTreeProps[\"draggable\"];\n onDrop?: FolderTreeProps[\"onDrop\"];\n /** 当前编辑节点信息 */\n editNode?: EditNodeInfo | null;\n /** 编辑值变化回调 */\n onEditValueChange?: (value: string) => void;\n /** 编辑确认回调 */\n onEditConfirm?: (value?: string) => void;\n /** 编辑取消回调 */\n onEditCancel?: () => void;\n /** 新建上下文 */\n createInfo?: CreateNodeContext | null;\n /** 开始重命名回调(由父组件注入) */\n onStartRename?: (fullPath: string, node: FolderTreeData) => void;\n /** 创建节点回调(由父组件注入) */\n onCreateNode?: (\n parentPath: string,\n options: { type: \"file\" | \"folder\"; defaultName?: string; extra?: any },\n ) => void;\n}\n\ninterface InlineEditInputProps {\n editKey: string;\n value: string;\n className?: string;\n onValueChange?: (value: string) => void;\n onConfirm?: (value?: string) => void;\n onCancel?: () => void;\n}\n\nconst InlineEditInput: React.FC<InlineEditInputProps> = ({\n editKey,\n value,\n className,\n onValueChange,\n onConfirm,\n onCancel,\n}) => {\n const [draft, setDraft] = useState(value);\n const committedRef = useRef(false);\n\n useEffect(() => {\n setDraft(value);\n committedRef.current = false;\n }, [editKey, value]);\n\n const commit = useCallback(() => {\n if (committedRef.current) return;\n committedRef.current = true;\n onValueChange?.(draft);\n onConfirm?.(draft);\n }, [draft, onConfirm, onValueChange]);\n\n return (\n <Input\n size=\"small\"\n value={draft}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setDraft(e.target.value)}\n onBlur={commit}\n onPressEnter={commit}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.stopPropagation();\n if (e.key === \"Escape\") {\n committedRef.current = true;\n onCancel?.();\n }\n }}\n autoFocus\n className={className}\n onClick={(e: React.MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n onMouseDown={(e: React.MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n onSelect={(e: React.SyntheticEvent<HTMLInputElement>) => e.stopPropagation()}\n onFocus={(e: React.FocusEvent<HTMLInputElement>) => e.stopPropagation()}\n />\n );\n};\n\nconst DirectoryTreeComponent: React.FC<DirectoryTreeComponentProps> = ({\n treeData,\n selectedKeys,\n expandedKeys,\n onSelect,\n onExpand,\n showLine = false,\n switcherIcon,\n defaultExpandAll = true,\n className,\n directoryIcons,\n directoryTitle,\n moreActions,\n width,\n draggable,\n onDrop,\n editNode,\n onEditValueChange,\n onEditConfirm,\n onEditCancel,\n createInfo,\n onStartRename,\n onCreateNode,\n}) => {\n const styles = useStyles();\n\n const getIcon = useCallback(\n (node: FolderTreeData) => {\n if (directoryIcons === false || directoryIcons === null) {\n return null;\n }\n if (node.type == \"folder\") {\n const icon = directoryIcons?.directory;\n if (typeof icon === \"function\") return icon();\n return icon || <FolderOutlined />;\n }\n const filePath = node.path.toLowerCase();\n const extension = filePath.split(\".\").pop();\n if (extension) {\n const icon = directoryIcons?.[extension];\n if (icon) return typeof icon === \"function\" ? icon() : icon;\n }\n return <FileOutlined />;\n },\n [directoryIcons],\n );\n\n const buildPathSegments = useCallback(\n (node: FolderTreeData, parentSegments: string[] = []): string[] => {\n if (node.path === \"/\" && parentSegments.length === 0) {\n return [\"/\"];\n }\n return [...parentSegments, node.path].filter((s) => s !== \"\");\n },\n [],\n );\n\n const renderInlineInput = useCallback(\n (key: string, value: string) => (\n <span className={styles.treeNodeTitle}>\n <InlineEditInput\n editKey={key}\n value={value}\n className={styles.inlineInput}\n onValueChange={onEditValueChange}\n onConfirm={onEditConfirm}\n onCancel={onEditCancel}\n />\n </span>\n ),\n [onEditValueChange, onEditConfirm, onEditCancel, styles],\n );\n\n // ====== 拖拽模式 ======\n const dragMode = draggable === true ? \"file\" : draggable || false;\n\n // ====== 自定义拖拽 hook ======\n const handleDragDrop = useCallback(\n (dragNode: DataNode, dropNode: DataNode, dropPosition: DropPosition) => {\n const dragNd = dragNode as DataNode & { _originalNode?: FolderTreeData };\n const dropNd = dropNode as DataNode & { _originalNode?: FolderTreeData };\n const originalDragNode = dragNd._originalNode;\n const originalDropNode = dropNd._originalNode;\n if (!originalDragNode) return;\n\n const dragKey = String(dragNode.key);\n const dropKey = String(dropNode.key);\n const dragFileName = originalDragNode.path;\n let newPath: string;\n\n // 拖到底部 drop zone:放在根级别末尾\n if (!originalDropNode && dropKey === \"__bottom_placeholder__\") {\n newPath = dragFileName;\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: { title: \"\", path: \"\" },\n });\n return;\n }\n\n if (!originalDropNode) return;\n\n if (!dropNode.isLeaf && dropPosition === 0) {\n // 拖入文件夹内部\n newPath = `${dropKey}/${dragFileName}`;\n } else {\n // 拖到节点旁边(同级)\n const dropParentPath = dropKey.includes(\"/\")\n ? dropKey.substring(0, dropKey.lastIndexOf(\"/\"))\n : \"\";\n newPath = dropParentPath\n ? `${dropParentPath}/${dragFileName}`\n : dragFileName;\n }\n\n onDrop?.({\n fileName: originalDragNode.title,\n extra: originalDragNode.extra,\n oldPath: dragKey,\n newPath,\n dragNode: originalDragNode,\n dropNode: originalDropNode,\n });\n },\n [onDrop],\n );\n\n const handleDragEnterExpand = useCallback(\n (nodeKey: string) => {\n const isExpanded = expandedKeys?.includes(nodeKey);\n if (!isExpanded) {\n onExpand?.([...(expandedKeys || []), nodeKey], {\n node: null as any,\n expanded: true,\n nativeEvent: null as any,\n });\n }\n },\n [expandedKeys, onExpand],\n );\n\n const {\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n onContainerDragOver,\n onContainerDrop,\n canDragNode,\n } = useFolderDrag({\n dragMode,\n onDrop: handleDragDrop,\n onDragEnterExpand: handleDragEnterExpand,\n });\n\n // ====== 转换树数据 ======\n // 注意:convertToTreeData 不依赖拖拽状态,拖拽效果通过 DOM 操作实现\n const convertToTreeData = useCallback(\n (\n nodes: FolderTreeData[],\n parentSegments: string[] = [],\n parentKey: string = \"\",\n ): DataNode[] => {\n const result = nodes.map((node) => {\n const pathSegments = buildPathSegments(node, parentSegments);\n const fullPath = pathSegments.join(\"/\").replace(/^\\/+/, \"\");\n\n const isEditing = editNode && editNode.key === fullPath;\n\n const nodeChildren = node.children\n ? convertToTreeData(node.children, pathSegments, fullPath)\n : undefined;\n\n const baseNode: any = {\n key: fullPath,\n path: fullPath,\n pathSegments,\n icon: getIcon(node),\n isLeaf: !(node.type === \"folder\"),\n _originalNode: node,\n children: nodeChildren,\n };\n\n // 编辑态:直接渲染 inline input\n if (isEditing) {\n baseNode.title = renderInlineInput(\n editNode!.key,\n editNode!.currentValue,\n );\n return baseNode;\n }\n\n // title 内容(按钮、菜单等)\n const titleContent = (\n <span\n className={clsx(\n styles.treeNodeTitle,\n moreActions && styles.treeNodeTitleHover,\n )}\n >\n <span>{node.title}</span>\n {moreActions && (\n <Dropdown\n menu={moreActions(node, {\n startRename: () => onStartRename?.(fullPath, node),\n createNode: (options) => onCreateNode?.(fullPath, options),\n })}\n trigger={[\"click\"]}\n placement=\"bottomRight\"\n >\n <span\n className={clsx(styles.moreIcon, \"folder-tree-more-icon\")}\n onClick={(e) => e.stopPropagation()}\n >\n <MoreOutlined />\n </span>\n </Dropdown>\n )}\n </span>\n );\n\n // 启用拖拽时:在 title 外层包裹具有 data-node-key 属性的容器,\n // 用于 DOM 查询和事件绑定。拖拽状态通过 CSS class 控制。\n if (dragMode) {\n const nodeData = baseNode as DataNode & {\n _isTempNode?: boolean;\n };\n const draggableDiv = canDragNode(nodeData);\n\n baseNode.title = (\n <div\n className={clsx(\n styles.treeNodeWrapper,\n draggableDiv && styles.dragNodeHandle,\n )}\n data-node-key={fullPath}\n draggable={draggableDiv}\n onDragStart={\n draggableDiv ? (e) => onDragStart(e, baseNode) : undefined\n }\n onDragEnd={draggableDiv ? onDragEnd : undefined}\n onDragEnter={(e) => onItemDragEnter(e, baseNode)}\n onDragOver={(e) => onItemDragOver(e, baseNode)}\n onDragLeave={onItemDragLeave}\n onDrop={(e) => onItemDrop(e, baseNode)}\n >\n {titleContent}\n </div>\n );\n } else {\n baseNode.title = titleContent;\n }\n\n return baseNode;\n });\n\n // 新建模式:在目标父节点下插入临时节点\n if (createInfo && editNode && editNode.mode === \"create\") {\n const targetParentKey = createInfo.parentKey;\n if (\n targetParentKey === parentKey ||\n (targetParentKey === \"\" && parentKey === \"\") ||\n (targetParentKey === \"/\" && parentKey === \"\")\n ) {\n const tempNode: any = {\n key: editNode.key,\n title: renderInlineInput(editNode.key, editNode.currentValue),\n icon:\n createInfo.type === \"folder\" ? (\n <FolderOutlined />\n ) : (\n <FileOutlined />\n ),\n isLeaf: createInfo.type === \"file\",\n path: editNode.key,\n pathSegments: [editNode.key],\n _originalNode: null,\n _isTempNode: true,\n };\n result.push(tempNode);\n }\n }\n\n return result;\n },\n [\n buildPathSegments,\n getIcon,\n moreActions,\n styles,\n editNode,\n renderInlineInput,\n createInfo,\n onStartRename,\n onCreateNode,\n dragMode,\n canDragNode,\n onDragStart,\n onDragEnd,\n onItemDragEnter,\n onItemDragOver,\n onItemDragLeave,\n onItemDrop,\n ],\n );\n\n const treeDataConverted = useMemo(\n () => convertToTreeData(treeData, [], \"\"),\n [treeData, convertToTreeData],\n );\n\n const handleSelect: TreeProps[\"onSelect\"] = useCallback(\n (keys: any, info: any) => {\n // 编辑态不响应选中\n if (editNode) return;\n // 临时节点不可选中\n const node = info.node as DataNode & { _isTempNode?: boolean };\n if (node._isTempNode) return;\n // 点击 moreActions 区域不触发选中\n const target = info.nativeEvent?.target as HTMLElement | null;\n if (\n target &&\n (target.closest(\".folder-tree-more-icon\") ||\n target.closest(\".ant-dropdown\"))\n ) {\n return;\n }\n onSelect?.(keys, info);\n },\n [onSelect, editNode],\n );\n\n const titleNode =\n directoryTitle === false || directoryTitle === null\n ? null\n : typeof directoryTitle === \"function\"\n ? directoryTitle()\n : directoryTitle;\n\n return (\n <div className={clsx(styles.directoryPanel, className)} style={{ width }}>\n {titleNode && <div className={styles.directoryTitle}>{titleNode}</div>}\n <div\n className={styles.directoryTreeContent}\n onDragOver={dragMode ? onContainerDragOver : undefined}\n onDrop={dragMode ? onContainerDrop : undefined}\n >\n <AntDirectoryTree\n style={\n {\n \"--ant-tree-directory-node-selected-bg\": \"rgba(0,0,0,0.03)\",\n \"--ant-tree-directory-node-selected-color\": \"#1a1c1e\",\n } as React.CSSProperties\n }\n treeData={treeDataConverted}\n selectedKeys={selectedKeys}\n expandedKeys={expandedKeys}\n onSelect={handleSelect}\n onExpand={onExpand}\n multiple={false}\n blockNode\n showLine={showLine as any}\n switcherIcon={switcherIcon}\n defaultExpandAll={defaultExpandAll}\n draggable={false}\n />\n </div>\n </div>\n );\n};\n\nexport default DirectoryTreeComponent;\n"],"mappings":"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"}
@@ -1 +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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"}
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<any>(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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"}