@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha2

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 (78) hide show
  1. package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
  2. package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
  3. package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
  4. package/dist/cjs/components/Sources/index.d.ts +5 -0
  5. package/dist/cjs/components/Sources/index.js +162 -0
  6. package/dist/cjs/components/Sources/index.js.map +7 -0
  7. package/dist/cjs/components/Sources/styles.d.ts +59 -0
  8. package/dist/cjs/components/Sources/styles.js +179 -0
  9. package/dist/cjs/components/Sources/styles.js.map +7 -0
  10. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +25 -0
  11. package/dist/cjs/components/XAdkSender/InlineTagInput.js +485 -0
  12. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
  13. package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
  14. package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
  15. package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
  16. package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
  17. package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
  18. package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
  19. package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
  20. package/dist/cjs/components/XAdkSender/index.js +350 -84
  21. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  22. package/dist/cjs/components/XAdkSender/styles.d.ts +15 -0
  23. package/dist/cjs/components/XAdkSender/styles.js +184 -5
  24. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  25. package/dist/cjs/index.d.ts +4 -2
  26. package/dist/cjs/index.js +3 -3
  27. package/dist/cjs/index.js.map +3 -3
  28. package/dist/cjs/types/Sources.d.ts +30 -0
  29. package/dist/cjs/types/Sources.js +18 -0
  30. package/dist/cjs/types/Sources.js.map +7 -0
  31. package/dist/cjs/types/XAdkSender.d.ts +92 -4
  32. package/dist/cjs/types/XAdkSender.js.map +1 -1
  33. package/dist/cjs/types/index.d.ts +1 -0
  34. package/dist/cjs/types/index.js +3 -1
  35. package/dist/cjs/types/index.js.map +2 -2
  36. package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
  37. package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
  38. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
  39. package/dist/esm/components/Sources/index.d.ts +5 -0
  40. package/dist/esm/components/Sources/index.js +127 -0
  41. package/dist/esm/components/Sources/index.js.map +1 -0
  42. package/dist/esm/components/Sources/styles.d.ts +59 -0
  43. package/dist/esm/components/Sources/styles.js +34 -0
  44. package/dist/esm/components/Sources/styles.js.map +1 -0
  45. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +25 -0
  46. package/dist/esm/components/XAdkSender/InlineTagInput.js +467 -0
  47. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
  48. package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
  49. package/dist/esm/components/XAdkSender/InputTags.js +36 -0
  50. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
  51. package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
  52. package/dist/esm/components/XAdkSender/QuickList.js +96 -0
  53. package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
  54. package/dist/esm/components/XAdkSender/index.d.ts +1 -6
  55. package/dist/esm/components/XAdkSender/index.js +407 -88
  56. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  57. package/dist/esm/components/XAdkSender/styles.d.ts +15 -0
  58. package/dist/esm/components/XAdkSender/styles.js +29 -11
  59. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  60. package/dist/esm/index.d.ts +4 -2
  61. package/dist/esm/index.js +4 -2
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/types/Sources.d.ts +30 -0
  64. package/dist/esm/types/Sources.js +2 -0
  65. package/dist/esm/types/Sources.js.map +1 -0
  66. package/dist/esm/types/XAdkSender.d.ts +92 -4
  67. package/dist/esm/types/XAdkSender.js.map +1 -1
  68. package/dist/esm/types/index.d.ts +1 -0
  69. package/dist/esm/types/index.js +1 -0
  70. package/dist/esm/types/index.js.map +1 -1
  71. package/dist/umd/chat-sdk.min.js +1 -1
  72. package/package.json +1 -1
  73. package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
  74. package/dist/cjs/components/XAdkSender/Switch.js +0 -95
  75. package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
  76. package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
  77. package/dist/esm/components/XAdkSender/Switch.js +0 -53
  78. package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+
15
+ // src/types/Sources.ts
16
+ var Sources_exports = {};
17
+ module.exports = __toCommonJS(Sources_exports);
18
+ //# sourceMappingURL=Sources.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/Sources.ts"],
4
+ "sourcesContent": ["export type SemanticType = 'root' | 'title' | 'content';\n\nexport interface SourcesItem {\n key?: React.Key;\n title: React.ReactNode;\n url?: string;\n icon?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport interface SourcesProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onClick'> {\n prefixCls?: string;\n style?: React.CSSProperties;\n styles?: Partial<Record<SemanticType, React.CSSProperties>>;\n className?: string;\n classNames?: Partial<Record<SemanticType, string>>;\n rootClassName?: string;\n inline?: boolean;\n items?: Array<SourcesItem>;\n title?: React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n onClick?: (item: SourcesItem) => void;\n popoverOverlayWidth?: number | string;\n activeKey?: React.Key;\n expanded?: boolean;\n onExpand?: (expand: boolean) => void;\n defaultExpanded?: boolean;\n}\n\nexport type SourcesRef = {\n nativeElement: HTMLElement;\n};"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -1,4 +1,69 @@
1
1
  import React from "react";
2
+ /** 快捷键触发的列表项 */
3
+ export interface QuickListOption {
4
+ id: string;
5
+ label: string;
6
+ description?: string;
7
+ icon?: React.ReactNode;
8
+ /** 分组名(用于聚合列表,子分组通过下划线分割) */
9
+ group?: string;
10
+ [key: string]: any;
11
+ }
12
+ /** 快捷键配置 */
13
+ export interface QuickKeyConfig {
14
+ /** 触发字符,如 '@', '#', '$' */
15
+ key: string;
16
+ /** 列表标题 */
17
+ title?: string;
18
+ /** 列表数据 */
19
+ options: QuickListOption[];
20
+ /** 自定义列表项渲染 */
21
+ renderItem?: (option: QuickListOption) => React.ReactNode;
22
+ /** 选中回调 */
23
+ onSelect?: (option: QuickListOption) => void;
24
+ }
25
+ /** 输入框内标签 */
26
+ export interface InputTag {
27
+ id: string;
28
+ label: string;
29
+ /** 标签类型,如 'aggregation', 'skill', 'app' */
30
+ type: string;
31
+ /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 label */
32
+ value?: string;
33
+ /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */
34
+ trigger?: string;
35
+ color?: string;
36
+ icon?: React.ReactNode;
37
+ /** 原始数据 */
38
+ data?: any;
39
+ }
40
+ export interface InlineTagRenderInfo {
41
+ onRemove: () => void;
42
+ }
43
+ export type XAdkSenderSubmitFormat = "text" | "structured" | "markdown" | "xml";
44
+ export type XAdkSenderSubmitPart = {
45
+ type: "text";
46
+ text: string;
47
+ } | {
48
+ type: "tag";
49
+ tag: InputTag;
50
+ };
51
+ export interface XAdkSenderFormatTagContext {
52
+ format: Exclude<XAdkSenderSubmitFormat, "structured">;
53
+ index: number;
54
+ }
55
+ export interface XAdkSenderSubmitData {
56
+ /** 根据 submitFormat 生成的最终内容,默认是纯文本 */
57
+ text: string;
58
+ /** 去掉标签后的用户原始输入文本 */
59
+ rawText: string;
60
+ /** 当前提交格式 */
61
+ format: XAdkSenderSubmitFormat;
62
+ /** 文本与标签的有序片段,inlineTags 模式下可还原标签在输入框中的位置 */
63
+ parts: XAdkSenderSubmitPart[];
64
+ files: ServerFile[];
65
+ tags?: InputTag[];
66
+ }
2
67
  export interface UploadFileResult {
3
68
  fileName?: string;
4
69
  fileId?: string | number;
@@ -76,16 +141,14 @@ export interface SenderUIProps {
76
141
  draggable?: boolean;
77
142
  loading?: boolean;
78
143
  disabled?: boolean;
144
+ placeholder?: string;
79
145
  /** 受控:输入框的值 */
80
146
  value?: string;
81
147
  /** 非受控:输入框默认值 */
82
148
  defaultValue?: string;
83
149
  onClear?: () => void;
84
150
  onChange?: (value: string) => void;
85
- onSubmit?: (data: {
86
- text: string;
87
- files: ServerFile[];
88
- }) => void;
151
+ onSubmit?: (data: XAdkSenderSubmitData) => void;
89
152
  onStop?: () => void;
90
153
  /** 自定义发送按钮渲染 */
91
154
  sendButtonRender?: (info: {
@@ -104,6 +167,31 @@ export interface SenderUIProps {
104
167
  prefix?: React.ReactNode | false | SlotRenderFunction;
105
168
  /** 底部内容 */
106
169
  footer?: React.ReactNode | false | SlotRenderFunction;
170
+ /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */
171
+ footerLeft?: React.ReactNode | false | SlotRenderFunction;
172
+ /** 快捷键配置列表 */
173
+ quickKeys?: QuickKeyConfig[];
174
+ /** 是否把标签以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */
175
+ inlineTags?: boolean;
176
+ /** 自定义内联标签渲染 */
177
+ renderTag?: (tag: InputTag, info: InlineTagRenderInfo) => React.ReactNode;
178
+ /** 受控:标签列表 */
179
+ tags?: InputTag[];
180
+ /** 非受控:默认标签列表 */
181
+ defaultTags?: InputTag[];
182
+ /** 标签变化回调 */
183
+ onTagsChange?: (tags: InputTag[]) => void;
184
+ /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
185
+ onQuickKeyTrigger?: (key: string, keyword: string) => void;
186
+ /**
187
+ * 提交内容格式:
188
+ * - text: 默认,输出文字 + 标签文本(如 /生图技能)
189
+ * - structured: 保留 parts/tags/files 结构化数据,text 为 rawText
190
+ * - markdown/xml: 输出对应标记文本
191
+ */
192
+ submitFormat?: XAdkSenderSubmitFormat;
193
+ /** 自定义标签在 text/markdown/xml 格式中的序列化结果 */
194
+ formatTag?: (tag: InputTag, context: XAdkSenderFormatTagContext) => string;
107
195
  }
108
196
  export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
109
197
  export interface XAdkSenderHandle {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAdkSender.ts"],
4
- "sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n UploadButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 头部面板 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],
4
+ "sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/标签相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内标签 */\nexport interface InputTag {\n id: string;\n label: string;\n /** 标签类型,如 'aggregation', 'skill', 'app' */\n type: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 原始数据 */\n data?: any;\n}\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"tag\"; tag: InputTag };\n\nexport interface XAdkSenderFormatTagContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\nexport interface XAdkSenderSubmitData {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与标签的有序片段,inlineTags 模式下可还原标签在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n tags?: InputTag[];\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n UploadButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 头部面板 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/标签功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把标签以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联标签渲染 */\n renderTag?: (\n tag: InputTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:标签列表 */\n tags?: InputTag[];\n /** 非受控:默认标签列表 */\n defaultTags?: InputTag[];\n /** 标签变化回调 */\n onTagsChange?: (tags: InputTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + 标签文本(如 /生图技能)\n * - structured: 保留 parts/tags/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义标签在 text/markdown/xml 格式中的序列化结果 */\n formatTag?: (\n tag: InputTag,\n context: XAdkSenderFormatTagContext,\n ) => string;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -11,3 +11,4 @@ export * from "./FileGallery";
11
11
  export * from "./common";
12
12
  export * from "./FunctionCallRender";
13
13
  export * from "./ChatStrategies";
14
+ export * from "./Sources";
@@ -29,6 +29,7 @@ __reExport(types_exports, require("./FileGallery"), module.exports);
29
29
  __reExport(types_exports, require("./common"), module.exports);
30
30
  __reExport(types_exports, require("./FunctionCallRender"), module.exports);
31
31
  __reExport(types_exports, require("./ChatStrategies"), module.exports);
32
+ __reExport(types_exports, require("./Sources"), module.exports);
32
33
  // Annotate the CommonJS export names for ESM import in node:
33
34
  0 && (module.exports = {
34
35
  ...require("./XAiChatbot"),
@@ -43,6 +44,7 @@ __reExport(types_exports, require("./ChatStrategies"), module.exports);
43
44
  ...require("./FileGallery"),
44
45
  ...require("./common"),
45
46
  ...require("./FunctionCallRender"),
46
- ...require("./ChatStrategies")
47
+ ...require("./ChatStrategies"),
48
+ ...require("./Sources")
47
49
  });
48
50
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/index.ts"],
4
- "sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;AAWA,0BAAc,iCAXd;AAYA,0BAAc,6BAZd;",
4
+ "sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\nexport * from \"./Sources\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;AAWA,0BAAc,iCAXd;AAYA,0BAAc,6BAZd;AAaA,0BAAc,sBAbd;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { SourcesItem, SourcesProps } from "../../../types/Sources";
3
+ export interface CarouselCardProps {
4
+ activeKey?: SourcesProps['activeKey'];
5
+ prefixCls: string;
6
+ items?: SourcesProps['items'];
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ onClick?: (item: SourcesItem) => void;
10
+ }
11
+ declare const CarouselCard: React.FC<CarouselCardProps>;
12
+ export default CarouselCard;
@@ -0,0 +1,107 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import { LeftOutlined, RightOutlined } from '@ant-design/icons';
4
+ import { Carousel } from 'antd';
5
+ import { clsx } from 'clsx';
6
+ import React, { useEffect, useRef, useState } from 'react';
7
+ import useStyle from "../styles";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsxs as _jsxs } from "react/jsx-runtime";
10
+ var CarouselCard = function CarouselCard(props) {
11
+ var prefixCls = props.prefixCls,
12
+ items = props.items,
13
+ activeKey = props.activeKey,
14
+ className = props.className,
15
+ style = props.style;
16
+ var styles = useStyle();
17
+
18
+ // Derive the target slide index from activeKey
19
+ var activeSlideIndex = React.useMemo(function () {
20
+ var _items$findIndex;
21
+ return Math.max(0, (_items$findIndex = items === null || items === void 0 ? void 0 : items.findIndex(function (_ref) {
22
+ var key = _ref.key;
23
+ return key === activeKey;
24
+ })) !== null && _items$findIndex !== void 0 ? _items$findIndex : 0);
25
+ }, [items, activeKey]);
26
+ var _useState = useState(activeSlideIndex),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ slide = _useState2[0],
29
+ setSlide = _useState2[1];
30
+ var carouselRef = useRef(null);
31
+ useEffect(function () {
32
+ setSlide(activeSlideIndex);
33
+ if (carouselRef.current) {
34
+ carouselRef.current.goTo(activeSlideIndex, false);
35
+ }
36
+ }, [activeSlideIndex]);
37
+ var handleClick = function handleClick(item) {
38
+ var _props$onClick;
39
+ item.url && window.open(item.url, '_blank', 'noopener,noreferrer');
40
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, item);
41
+ };
42
+ return /*#__PURE__*/_jsxs("div", {
43
+ style: style,
44
+ className: clsx(styles.carouselWrapper, className),
45
+ children: [/*#__PURE__*/_jsxs("div", {
46
+ className: styles.carouselTitle,
47
+ children: [/*#__PURE__*/_jsxs("div", {
48
+ className: styles.carouselBtnWrapper,
49
+ children: [/*#__PURE__*/_jsx("span", {
50
+ className: clsx(styles.carouselBtn, _defineProperty({}, styles.carouselBtnDisabled, slide === 0)),
51
+ onClick: function onClick() {
52
+ if (slide > 0) {
53
+ var _carouselRef$current;
54
+ var next = slide - 1;
55
+ setSlide(next);
56
+ (_carouselRef$current = carouselRef.current) === null || _carouselRef$current === void 0 || _carouselRef$current.goTo(next, false);
57
+ }
58
+ },
59
+ children: /*#__PURE__*/_jsx(LeftOutlined, {})
60
+ }), /*#__PURE__*/_jsx("span", {
61
+ className: clsx(styles.carouselBtn, _defineProperty({}, styles.carouselBtnDisabled, slide === ((items === null || items === void 0 ? void 0 : items.length) || 1) - 1)),
62
+ onClick: function onClick() {
63
+ var max = ((items === null || items === void 0 ? void 0 : items.length) || 1) - 1;
64
+ if (slide < max) {
65
+ var _carouselRef$current2;
66
+ var next = slide + 1;
67
+ setSlide(next);
68
+ (_carouselRef$current2 = carouselRef.current) === null || _carouselRef$current2 === void 0 || _carouselRef$current2.goTo(next, false);
69
+ }
70
+ },
71
+ children: /*#__PURE__*/_jsx(RightOutlined, {})
72
+ })]
73
+ }), /*#__PURE__*/_jsx("div", {
74
+ className: styles.carouselPage,
75
+ children: "".concat(slide + 1, "/").concat((items === null || items === void 0 ? void 0 : items.length) || 1)
76
+ })]
77
+ }), /*#__PURE__*/_jsx(Carousel, {
78
+ ref: carouselRef,
79
+ arrows: false,
80
+ infinite: false,
81
+ dots: false,
82
+ afterChange: setSlide,
83
+ children: items === null || items === void 0 ? void 0 : items.map(function (item, index) {
84
+ return /*#__PURE__*/_jsxs("div", {
85
+ className: styles.carouselItem,
86
+ onClick: function onClick() {
87
+ return handleClick(item);
88
+ },
89
+ children: [/*#__PURE__*/_jsxs("div", {
90
+ className: styles.carouselItemTitleWrapper,
91
+ children: [item.icon && /*#__PURE__*/_jsx("span", {
92
+ children: item.icon
93
+ }), /*#__PURE__*/_jsx("span", {
94
+ className: styles.carouselItemTitle,
95
+ children: item.title
96
+ })]
97
+ }), item.description && /*#__PURE__*/_jsx("div", {
98
+ className: styles.carouselItemDescription,
99
+ children: item.description
100
+ })]
101
+ }, item.key || index);
102
+ })
103
+ })]
104
+ });
105
+ };
106
+ export default CarouselCard;
107
+ //# sourceMappingURL=CarouselCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LeftOutlined","RightOutlined","Carousel","clsx","React","useEffect","useRef","useState","useStyle","jsx","_jsx","jsxs","_jsxs","CarouselCard","props","prefixCls","items","activeKey","className","style","styles","activeSlideIndex","useMemo","_items$findIndex","Math","max","findIndex","_ref","key","_useState","_useState2","_slicedToArray","slide","setSlide","carouselRef","current","goTo","handleClick","item","_props$onClick","url","window","open","onClick","call","carouselWrapper","children","carouselTitle","carouselBtnWrapper","carouselBtn","_defineProperty","carouselBtnDisabled","_carouselRef$current","next","length","_carouselRef$current2","carouselPage","concat","ref","arrows","infinite","dots","afterChange","map","index","carouselItem","carouselItemTitleWrapper","icon","carouselItemTitle","title","description","carouselItemDescription"],"sources":["../../../../../src/components/Sources/components/CarouselCard.tsx"],"sourcesContent":["import { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { Carousel } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { SourcesItem, SourcesProps } from '@/types/Sources';\nimport useStyle from '../styles';\n\nexport interface CarouselCardProps {\n activeKey?: SourcesProps['activeKey'];\n prefixCls: string;\n items?: SourcesProps['items'];\n className?: string;\n style?: React.CSSProperties;\n onClick?: (item: SourcesItem) => void;\n}\n\nconst CarouselCard: React.FC<CarouselCardProps> = (props) => {\n const { prefixCls, items, activeKey, className, style } = props;\n const styles = useStyle();\n\n // Derive the target slide index from activeKey\n const activeSlideIndex = React.useMemo(\n () => Math.max(0, items?.findIndex(({ key }) => key === activeKey) ?? 0),\n [items, activeKey],\n );\n\n const [slide, setSlide] = useState<number>(activeSlideIndex);\n\n const carouselRef = useRef<React.ComponentRef<typeof Carousel>>(null);\n\n useEffect(() => {\n setSlide(activeSlideIndex);\n if (carouselRef.current) {\n carouselRef.current.goTo(activeSlideIndex, false);\n }\n }, [activeSlideIndex]);\n\n const handleClick = (item: SourcesItem) => {\n item.url && window.open(item.url, '_blank', 'noopener,noreferrer');\n props.onClick?.(item);\n };\n\n return (\n <div style={style} className={clsx(styles.carouselWrapper, className)}>\n <div className={styles.carouselTitle}>\n <div className={styles.carouselBtnWrapper}>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === 0,\n })}\n onClick={() => {\n if (slide > 0) {\n const next = slide - 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <LeftOutlined />\n </span>\n <span\n className={clsx(styles.carouselBtn, {\n [styles.carouselBtnDisabled]: slide === (items?.length || 1) - 1,\n })}\n onClick={() => {\n const max = (items?.length || 1) - 1;\n if (slide < max) {\n const next = slide + 1;\n setSlide(next);\n carouselRef.current?.goTo(next, false);\n }\n }}\n >\n <RightOutlined />\n </span>\n </div>\n <div className={styles.carouselPage}>{`${slide + 1}/${items?.length || 1}`}</div>\n </div>\n <Carousel\n ref={carouselRef}\n arrows={false}\n infinite={false}\n dots={false}\n afterChange={setSlide}\n >\n {items?.map((item, index) => (\n <div\n key={item.key || index}\n className={styles.carouselItem}\n onClick={() => handleClick(item)}\n >\n <div className={styles.carouselItemTitleWrapper}>\n {item.icon && <span>{item.icon}</span>}\n <span className={styles.carouselItemTitle}>{item.title}</span>\n </div>\n {item.description && (\n <div className={styles.carouselItemDescription}>{item.description}</div>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n );\n};\n\nexport default CarouselCard;"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,aAAa,QAAQ,mBAAmB;AAC/D,SAASC,QAAQ,QAAQ,MAAM;AAC/B,SAASC,IAAI,QAAQ,MAAM;AAC3B,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE1D,OAAOC,QAAQ;AAAkB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAWjC,IAAMC,YAAyC,GAAG,SAA5CA,YAAyCA,CAAIC,KAAK,EAAK;EAC3D,IAAQC,SAAS,GAAyCD,KAAK,CAAvDC,SAAS;IAAEC,KAAK,GAAkCF,KAAK,CAA5CE,KAAK;IAAEC,SAAS,GAAuBH,KAAK,CAArCG,SAAS;IAAEC,SAAS,GAAYJ,KAAK,CAA1BI,SAAS;IAAEC,KAAK,GAAKL,KAAK,CAAfK,KAAK;EACrD,IAAMC,MAAM,GAAGZ,QAAQ,CAAC,CAAC;;EAEzB;EACA,IAAMa,gBAAgB,GAAGjB,KAAK,CAACkB,OAAO,CACpC;IAAA,IAAAC,gBAAA;IAAA,OAAMC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAAF,gBAAA,GAAEP,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEU,SAAS,CAAC,UAAAC,IAAA;MAAA,IAAGC,GAAG,GAAAD,IAAA,CAAHC,GAAG;MAAA,OAAOA,GAAG,KAAKX,SAAS;IAAA,EAAC,cAAAM,gBAAA,cAAAA,gBAAA,GAAI,CAAC,CAAC;EAAA,GACxE,CAACP,KAAK,EAAEC,SAAS,CACnB,CAAC;EAED,IAAAY,SAAA,GAA0BtB,QAAQ,CAASc,gBAAgB,CAAC;IAAAS,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAArDG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EAEtB,IAAMI,WAAW,GAAG5B,MAAM,CAAsC,IAAI,CAAC;EAErED,SAAS,CAAC,YAAM;IACd4B,QAAQ,CAACZ,gBAAgB,CAAC;IAC1B,IAAIa,WAAW,CAACC,OAAO,EAAE;MACvBD,WAAW,CAACC,OAAO,CAACC,IAAI,CAACf,gBAAgB,EAAE,KAAK,CAAC;IACnD;EACF,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;EAEtB,IAAMgB,WAAW,GAAG,SAAdA,WAAWA,CAAIC,IAAiB,EAAK;IAAA,IAAAC,cAAA;IACzCD,IAAI,CAACE,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAACE,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC;IAClE,CAAAD,cAAA,GAAAzB,KAAK,CAAC6B,OAAO,cAAAJ,cAAA,eAAbA,cAAA,CAAAK,IAAA,CAAA9B,KAAK,EAAWwB,IAAI,CAAC;EACvB,CAAC;EAED,oBACE1B,KAAA;IAAKO,KAAK,EAAEA,KAAM;IAACD,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAACyB,eAAe,EAAE3B,SAAS,CAAE;IAAA4B,QAAA,gBACpElC,KAAA;MAAKM,SAAS,EAAEE,MAAM,CAAC2B,aAAc;MAAAD,QAAA,gBACnClC,KAAA;QAAKM,SAAS,EAAEE,MAAM,CAAC4B,kBAAmB;QAAAF,QAAA,gBACxCpC,IAAA;UACEQ,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAAC6B,WAAW,EAAAC,eAAA,KAC/B9B,MAAM,CAAC+B,mBAAmB,EAAGnB,KAAK,KAAK,CAAC,CAC1C,CAAE;UACHW,OAAO,EAAE,SAAAA,QAAA,EAAM;YACb,IAAIX,KAAK,GAAG,CAAC,EAAE;cAAA,IAAAoB,oBAAA;cACb,IAAMC,IAAI,GAAGrB,KAAK,GAAG,CAAC;cACtBC,QAAQ,CAACoB,IAAI,CAAC;cACd,CAAAD,oBAAA,GAAAlB,WAAW,CAACC,OAAO,cAAAiB,oBAAA,eAAnBA,oBAAA,CAAqBhB,IAAI,CAACiB,IAAI,EAAE,KAAK,CAAC;YACxC;UACF,CAAE;UAAAP,QAAA,eAEFpC,IAAA,CAACV,YAAY,IAAE;QAAC,CACZ,CAAC,eACPU,IAAA;UACEQ,SAAS,EAAEf,IAAI,CAACiB,MAAM,CAAC6B,WAAW,EAAAC,eAAA,KAC/B9B,MAAM,CAAC+B,mBAAmB,EAAGnB,KAAK,KAAK,CAAC,CAAAhB,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC,IAAI,CAAC,CACjE,CAAE;UACHX,OAAO,EAAE,SAAAA,QAAA,EAAM;YACb,IAAMlB,GAAG,GAAG,CAAC,CAAAT,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC,IAAI,CAAC;YACpC,IAAItB,KAAK,GAAGP,GAAG,EAAE;cAAA,IAAA8B,qBAAA;cACf,IAAMF,IAAI,GAAGrB,KAAK,GAAG,CAAC;cACtBC,QAAQ,CAACoB,IAAI,CAAC;cACd,CAAAE,qBAAA,GAAArB,WAAW,CAACC,OAAO,cAAAoB,qBAAA,eAAnBA,qBAAA,CAAqBnB,IAAI,CAACiB,IAAI,EAAE,KAAK,CAAC;YACxC;UACF,CAAE;UAAAP,QAAA,eAEFpC,IAAA,CAACT,aAAa,IAAE;QAAC,CACb,CAAC;MAAA,CACJ,CAAC,eACNS,IAAA;QAAKQ,SAAS,EAAEE,MAAM,CAACoC,YAAa;QAAAV,QAAA,KAAAW,MAAA,CAAKzB,KAAK,GAAG,CAAC,OAAAyB,MAAA,CAAI,CAAAzC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,MAAM,KAAI,CAAC;MAAA,CAAQ,CAAC;IAAA,CAC9E,CAAC,eACN5C,IAAA,CAACR,QAAQ;MACPwD,GAAG,EAAExB,WAAY;MACjByB,MAAM,EAAE,KAAM;MACdC,QAAQ,EAAE,KAAM;MAChBC,IAAI,EAAE,KAAM;MACZC,WAAW,EAAE7B,QAAS;MAAAa,QAAA,EAErB9B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAE+C,GAAG,CAAC,UAACzB,IAAI,EAAE0B,KAAK;QAAA,oBACtBpD,KAAA;UAEEM,SAAS,EAAEE,MAAM,CAAC6C,YAAa;UAC/BtB,OAAO,EAAE,SAAAA,QAAA;YAAA,OAAMN,WAAW,CAACC,IAAI,CAAC;UAAA,CAAC;UAAAQ,QAAA,gBAEjClC,KAAA;YAAKM,SAAS,EAAEE,MAAM,CAAC8C,wBAAyB;YAAApB,QAAA,GAC7CR,IAAI,CAAC6B,IAAI,iBAAIzD,IAAA;cAAAoC,QAAA,EAAOR,IAAI,CAAC6B;YAAI,CAAO,CAAC,eACtCzD,IAAA;cAAMQ,SAAS,EAAEE,MAAM,CAACgD,iBAAkB;cAAAtB,QAAA,EAAER,IAAI,CAAC+B;YAAK,CAAO,CAAC;UAAA,CAC3D,CAAC,EACL/B,IAAI,CAACgC,WAAW,iBACf5D,IAAA;YAAKQ,SAAS,EAAEE,MAAM,CAACmD,uBAAwB;YAAAzB,QAAA,EAAER,IAAI,CAACgC;UAAW,CAAM,CACxE;QAAA,GAVIhC,IAAI,CAACV,GAAG,IAAIoC,KAWd,CAAC;MAAA,CACP;IAAC,CACM,CAAC;EAAA,CACR,CAAC;AAEV,CAAC;AAED,eAAenD,YAAY"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { SourcesProps, SourcesRef } from "../../types/Sources";
3
+ declare const ForwardSources: React.ForwardRefExoticComponent<SourcesProps & React.RefAttributes<SourcesRef>>;
4
+ export default ForwardSources;
5
+ export type { SourcesProps, SourcesItem, SourcesRef } from "../../types/Sources";
@@ -0,0 +1,127 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5
+ var _excluded = ["style", "className", "rootClassName", "title", "expandIconPosition", "inline", "expanded", "defaultExpanded", "onExpand", "activeKey", "items", "onClick", "popoverOverlayWidth"];
6
+ import { RightOutlined } from '@ant-design/icons';
7
+ import { Popover } from 'antd';
8
+ import { clsx } from 'clsx';
9
+ import React, { useState, useCallback } from 'react';
10
+ import CarouselCard from "./components/CarouselCard";
11
+ import useStyle from "./styles";
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { Fragment as _Fragment } from "react/jsx-runtime";
15
+ var Sources = function Sources(props, ref) {
16
+ var style = props.style,
17
+ className = props.className,
18
+ rootClassName = props.rootClassName,
19
+ title = props.title,
20
+ _props$expandIconPosi = props.expandIconPosition,
21
+ expandIconPosition = _props$expandIconPosi === void 0 ? 'start' : _props$expandIconPosi,
22
+ _props$inline = props.inline,
23
+ inline = _props$inline === void 0 ? false : _props$inline,
24
+ expanded = props.expanded,
25
+ defaultExpanded = props.defaultExpanded,
26
+ onExpand = props.onExpand,
27
+ activeKey = props.activeKey,
28
+ items = props.items,
29
+ _onClick = props.onClick,
30
+ _props$popoverOverlay = props.popoverOverlayWidth,
31
+ popoverOverlayWidth = _props$popoverOverlay === void 0 ? 300 : _props$popoverOverlay,
32
+ restProps = _objectWithoutProperties(props, _excluded);
33
+ var styles = useStyle();
34
+ var sourcesRef = React.useRef(null);
35
+ React.useImperativeHandle(ref, function () {
36
+ return {
37
+ nativeElement: sourcesRef.current
38
+ };
39
+ });
40
+
41
+ // ============================ Collapsible ============================
42
+ var _useState = useState(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : true),
43
+ _useState2 = _slicedToArray(_useState, 2),
44
+ isExpand = _useState2[0],
45
+ setIsExpand = _useState2[1];
46
+ var isControlled = expanded !== undefined;
47
+ var actualExpanded = isControlled ? expanded : isExpand;
48
+ var handleToggle = useCallback(function () {
49
+ var newExpand = !actualExpanded;
50
+ if (!isControlled) {
51
+ setIsExpand(newExpand);
52
+ }
53
+ onExpand === null || onExpand === void 0 || onExpand(newExpand);
54
+ }, [actualExpanded, isControlled, onExpand]);
55
+ var mergedCls = clsx(styles.sources, className, rootClassName, _defineProperty({}, styles.sourcesInline, inline));
56
+ var ContentNode = items ? /*#__PURE__*/_jsx("ul", {
57
+ className: styles.sourcesList,
58
+ children: items.map(function (item, index) {
59
+ return /*#__PURE__*/_jsx("li", {
60
+ className: styles.sourcesListItem,
61
+ onClick: function onClick() {
62
+ return _onClick === null || _onClick === void 0 ? void 0 : _onClick(item);
63
+ },
64
+ children: /*#__PURE__*/_jsxs("a", {
65
+ className: styles.sourcesLink,
66
+ href: item.url,
67
+ target: "_blank",
68
+ rel: "noopener noreferrer",
69
+ children: [item.icon && /*#__PURE__*/_jsx("span", {
70
+ className: styles.sourcesLinkIcon,
71
+ children: item.icon
72
+ }), /*#__PURE__*/_jsx("span", {
73
+ className: styles.sourcesLinkTitle,
74
+ children: item.title
75
+ })]
76
+ })
77
+ }, item.key || index);
78
+ })
79
+ }) : null;
80
+ return /*#__PURE__*/_jsx("div", _objectSpread(_objectSpread({
81
+ ref: sourcesRef,
82
+ className: mergedCls,
83
+ style: style
84
+ }, restProps), {}, {
85
+ children: inline ? /*#__PURE__*/_jsx(Popover, {
86
+ content: /*#__PURE__*/_jsx(CarouselCard, {
87
+ className: clsx(styles.sources, className),
88
+ style: style,
89
+ activeKey: activeKey,
90
+ prefixCls: "sources",
91
+ items: items,
92
+ onClick: _onClick
93
+ }),
94
+ open: inline ? undefined : false,
95
+ overlayStyle: {
96
+ width: popoverOverlayWidth
97
+ },
98
+ placement: "top",
99
+ forceRender: true,
100
+ children: /*#__PURE__*/_jsx("div", {
101
+ className: styles.sourcesTitleWrapper,
102
+ children: /*#__PURE__*/_jsx("span", {
103
+ children: title
104
+ })
105
+ })
106
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
107
+ children: [/*#__PURE__*/_jsxs("div", {
108
+ className: clsx(styles.sourcesTitleWrapper, expandIconPosition === 'end' && styles.sourcesIconPositionEnd),
109
+ onClick: handleToggle,
110
+ children: [/*#__PURE__*/_jsx(RightOutlined, {
111
+ className: clsx(styles.sourcesTitleDownIcon, _defineProperty({}, styles.sourcesTitleDownIconExpanded, actualExpanded))
112
+ }), /*#__PURE__*/_jsx("span", {
113
+ children: title
114
+ })]
115
+ }), actualExpanded && /*#__PURE__*/_jsx("div", {
116
+ className: styles.sourcesContent,
117
+ children: ContentNode
118
+ })]
119
+ })
120
+ }));
121
+ };
122
+ var ForwardSources = /*#__PURE__*/React.forwardRef(Sources);
123
+ if (process.env.NODE_ENV !== 'production') {
124
+ ForwardSources.displayName = 'Sources';
125
+ }
126
+ export default ForwardSources;
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RightOutlined","Popover","clsx","React","useState","useCallback","CarouselCard","useStyle","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Sources","props","ref","style","className","rootClassName","title","_props$expandIconPosi","expandIconPosition","_props$inline","inline","expanded","defaultExpanded","onExpand","activeKey","items","onClick","_props$popoverOverlay","popoverOverlayWidth","restProps","_objectWithoutProperties","_excluded","styles","sourcesRef","useRef","useImperativeHandle","nativeElement","current","_useState","_useState2","_slicedToArray","isExpand","setIsExpand","isControlled","undefined","actualExpanded","handleToggle","newExpand","mergedCls","sources","_defineProperty","sourcesInline","ContentNode","sourcesList","children","map","item","index","sourcesListItem","sourcesLink","href","url","target","rel","icon","sourcesLinkIcon","sourcesLinkTitle","key","_objectSpread","content","prefixCls","open","overlayStyle","width","placement","forceRender","sourcesTitleWrapper","sourcesIconPositionEnd","sourcesTitleDownIcon","sourcesTitleDownIconExpanded","sourcesContent","ForwardSources","forwardRef","process","env","NODE_ENV","displayName"],"sources":["../../../../src/components/Sources/index.tsx"],"sourcesContent":["import { RightOutlined } from '@ant-design/icons';\nimport { Popover } from 'antd';\nimport { clsx } from 'clsx';\nimport React, { useState, useCallback } from 'react';\nimport type { SourcesProps, SourcesRef } from '@/types/Sources';\nimport CarouselCard from './components/CarouselCard';\nimport useStyle from './styles';\n\nconst Sources: React.ForwardRefRenderFunction<SourcesRef, SourcesProps> = (props, ref) => {\n const {\n style,\n className,\n rootClassName,\n title,\n expandIconPosition = 'start',\n inline = false,\n expanded,\n defaultExpanded,\n onExpand,\n activeKey,\n items,\n onClick,\n popoverOverlayWidth = 300,\n ...restProps\n } = props;\n\n const styles = useStyle();\n\n const sourcesRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => ({\n nativeElement: sourcesRef.current!,\n }));\n\n // ============================ Collapsible ============================\n const [isExpand, setIsExpand] = useState<boolean>(defaultExpanded ?? true);\n const isControlled = expanded !== undefined;\n const actualExpanded = isControlled ? expanded : isExpand;\n\n const handleToggle = useCallback(() => {\n const newExpand = !actualExpanded;\n if (!isControlled) {\n setIsExpand(newExpand);\n }\n onExpand?.(newExpand);\n }, [actualExpanded, isControlled, onExpand]);\n\n const mergedCls = clsx(\n styles.sources,\n className,\n rootClassName,\n {\n [styles.sourcesInline]: inline,\n },\n );\n\n const ContentNode = items ? (\n <ul className={styles.sourcesList}>\n {items.map((item, index) => (\n <li\n key={item.key || index}\n className={styles.sourcesListItem}\n onClick={() => onClick?.(item)}\n >\n <a\n className={styles.sourcesLink}\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {item.icon && <span className={styles.sourcesLinkIcon}>{item.icon}</span>}\n <span className={styles.sourcesLinkTitle}>{item.title}</span>\n </a>\n </li>\n ))}\n </ul>\n ) : null;\n\n return (\n <div\n ref={sourcesRef}\n className={mergedCls}\n style={style}\n {...restProps}\n >\n {inline ? (\n <Popover\n content={\n <CarouselCard\n className={clsx(styles.sources, className)}\n style={style}\n activeKey={activeKey}\n prefixCls=\"sources\"\n items={items}\n onClick={onClick}\n />\n }\n open={inline ? undefined : false}\n overlayStyle={{ width: popoverOverlayWidth }}\n placement=\"top\"\n forceRender\n >\n <div className={styles.sourcesTitleWrapper}>\n <span>{title}</span>\n </div>\n </Popover>\n ) : (\n <>\n <div\n className={clsx(\n styles.sourcesTitleWrapper,\n expandIconPosition === 'end' && styles.sourcesIconPositionEnd,\n )}\n onClick={handleToggle}\n >\n <RightOutlined\n className={clsx(styles.sourcesTitleDownIcon, {\n [styles.sourcesTitleDownIconExpanded]: actualExpanded,\n })}\n />\n <span>{title}</span>\n </div>\n {actualExpanded && (\n <div className={styles.sourcesContent}>\n {ContentNode}\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst ForwardSources = React.forwardRef(Sources);\n\nif (process.env.NODE_ENV !== 'production') {\n ForwardSources.displayName = 'Sources';\n}\n\nexport default ForwardSources;\nexport type { SourcesProps, SourcesItem, SourcesRef } from '@/types/Sources';"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export declare const useStyles: () => {
2
+ sources: string;
3
+ sourcesTitleWrapper: string;
4
+ sourcesTitleDownIcon: string;
5
+ sourcesTitleDownIconExpanded: string;
6
+ sourcesIconPositionEnd: string;
7
+ sourcesList: string;
8
+ sourcesListItem: string;
9
+ sourcesLink: string;
10
+ sourcesLinkIcon: string;
11
+ sourcesLinkTitle: string;
12
+ sourcesContent: string;
13
+ sourcesContentHidden: string;
14
+ sourcesInline: string;
15
+ carouselWrapper: string;
16
+ carouselTitle: string;
17
+ carouselBtnWrapper: string;
18
+ carouselBtn: string;
19
+ carouselBtnDisabled: string;
20
+ carouselPage: string;
21
+ carouselItem: string;
22
+ carouselItemTitleWrapper: string;
23
+ carouselItemTitle: string;
24
+ carouselItemDescription: string;
25
+ } & {
26
+ w: (width: string | number) => string;
27
+ h: (height: string | number) => string;
28
+ p: (padding: string) => string;
29
+ pb: (padding: string | number) => string;
30
+ pt: (padding: string | number) => string;
31
+ pl: (padding: string | number) => string;
32
+ pr: (padding: string | number) => string;
33
+ m: (margin: string) => string;
34
+ mb: (margin: string | number) => string;
35
+ mt: (margin: string | number) => string;
36
+ ml: (margin: string | number) => string;
37
+ mr: (margin: string | number) => string;
38
+ text: (size: string | number) => string;
39
+ weight: (size: number) => string;
40
+ textColor: (c: string) => string;
41
+ bg: (c: string) => string;
42
+ rs: (radius: string | number) => string;
43
+ gap: (g: string | number) => string;
44
+ flex: string;
45
+ flexCenter: string;
46
+ flexBetween: string;
47
+ flexColumn: string;
48
+ flex1: string;
49
+ cursor: (type: string) => string;
50
+ border: (color: string, width?: string) => string;
51
+ boxShadow: (shadow: string) => string;
52
+ transition: (property?: string, duration?: string) => string;
53
+ overflow: (type: string) => string;
54
+ position: (type: string) => string;
55
+ zIndex: (index: number) => string;
56
+ flexCenterGap2: string;
57
+ flexCenterGap4: string;
58
+ };
59
+ export default useStyles;
@@ -0,0 +1,34 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23;
3
+ import { css } from "@emotion/css";
4
+ import { withBasicStyles } from "../../styles/common";
5
+ export var useStyles = withBasicStyles(function () {
6
+ return {
7
+ sources: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: relative;\n "]))),
8
+ sourcesTitleWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #888;\n line-height: 1.5;\n cursor: pointer;\n margin-bottom: 12px;\n width: fit-content;\n "]))),
9
+ sourcesTitleDownIcon: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n font-size: 12px;\n transition: transform 0.3s ease;\n "]))),
10
+ sourcesTitleDownIconExpanded: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n transform: rotate(90deg);\n "]))),
11
+ sourcesIconPositionEnd: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n .sources-title-down-icon {\n order: 1;\n }\n "]))),
12
+ sourcesList: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n list-style: none;\n margin: 0;\n padding: 0;\n ul, ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n "]))),
13
+ sourcesListItem: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n margin-bottom: 8px;\n "]))),
14
+ sourcesLink: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n color: #333;\n display: flex;\n gap: 4px;\n text-decoration: none;\n &:hover {\n color: #1677ff;\n }\n "]))),
15
+ sourcesLinkIcon: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n flex-shrink: 0;\n "]))),
16
+ sourcesLinkTitle: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n "]))),
17
+ sourcesContent: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n overflow: hidden;\n transition: all 0.3s ease;\n "]))),
18
+ sourcesContentHidden: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: none;\n "]))),
19
+ sourcesInline: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: inline-flex;\n .sources-title-wrapper {\n background: #f5f5f5;\n border-radius: 10px;\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n color: #888;\n font-weight: 400;\n padding-inline: 6px;\n padding-block: 0;\n margin-inline: 4px;\n margin-block: 0;\n }\n "]))),
20
+ // ========== Carousel 相关 ==========
21
+ carouselWrapper: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n min-width: 260px;\n "]))),
22
+ carouselTitle: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n "]))),
23
+ carouselBtnWrapper: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n display: flex;\n gap: 4px;\n "]))),
24
+ carouselBtn: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n height: 32px;\n width: 32px;\n border-radius: 6px;\n transition: background 0.2s ease;\n &:not(.carousel-btn-disabled):hover {\n background: #f5f5f5;\n }\n "]))),
25
+ carouselBtnDisabled: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n "]))),
26
+ carouselPage: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n font-size: 12px;\n color: #888;\n "]))),
27
+ carouselItem: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n padding: 8px;\n box-sizing: border-box;\n font-size: 14px;\n line-height: 1.5;\n cursor: pointer;\n "]))),
28
+ carouselItemTitleWrapper: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n display: flex;\n gap: 4px;\n align-items: center;\n "]))),
29
+ carouselItemTitle: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n "]))),
30
+ carouselItemDescription: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n opacity: 0.8;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n text-overflow: ellipsis;\n margin-top: 4px;\n font-size: 12px;\n color: #888;\n "])))
31
+ };
32
+ });
33
+ export default useStyles;
34
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","sources","_templateObject","_taggedTemplateLiteral","sourcesTitleWrapper","_templateObject2","sourcesTitleDownIcon","_templateObject3","sourcesTitleDownIconExpanded","_templateObject4","sourcesIconPositionEnd","_templateObject5","sourcesList","_templateObject6","sourcesListItem","_templateObject7","sourcesLink","_templateObject8","sourcesLinkIcon","_templateObject9","sourcesLinkTitle","_templateObject10","sourcesContent","_templateObject11","sourcesContentHidden","_templateObject12","sourcesInline","_templateObject13","carouselWrapper","_templateObject14","carouselTitle","_templateObject15","carouselBtnWrapper","_templateObject16","carouselBtn","_templateObject17","carouselBtnDisabled","_templateObject18","carouselPage","_templateObject19","carouselItem","_templateObject20","carouselItemTitleWrapper","_templateObject21","carouselItemTitle","_templateObject22","carouselItemDescription","_templateObject23"],"sources":["../../../../src/components/Sources/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n sources: css`\n position: relative;\n `,\n\n sourcesTitleWrapper: css`\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #888;\n line-height: 1.5;\n cursor: pointer;\n margin-bottom: 12px;\n width: fit-content;\n `,\n\n sourcesTitleDownIcon: css`\n font-size: 12px;\n transition: transform 0.3s ease;\n `,\n\n sourcesTitleDownIconExpanded: css`\n transform: rotate(90deg);\n `,\n\n sourcesIconPositionEnd: css`\n .sources-title-down-icon {\n order: 1;\n }\n `,\n\n sourcesList: css`\n list-style: none;\n margin: 0;\n padding: 0;\n ul, ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n `,\n\n sourcesListItem: css`\n margin-bottom: 8px;\n `,\n\n sourcesLink: css`\n color: #333;\n display: flex;\n gap: 4px;\n text-decoration: none;\n &:hover {\n color: #1677ff;\n }\n `,\n\n sourcesLinkIcon: css`\n flex-shrink: 0;\n `,\n\n sourcesLinkTitle: css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n sourcesContent: css`\n overflow: hidden;\n transition: all 0.3s ease;\n `,\n\n sourcesContentHidden: css`\n display: none;\n `,\n\n sourcesInline: css`\n display: inline-flex;\n .sources-title-wrapper {\n background: #f5f5f5;\n border-radius: 10px;\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n color: #888;\n font-weight: 400;\n padding-inline: 6px;\n padding-block: 0;\n margin-inline: 4px;\n margin-block: 0;\n }\n `,\n\n // ========== Carousel 相关 ==========\n carouselWrapper: css`\n min-width: 260px;\n `,\n\n carouselTitle: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n `,\n\n carouselBtnWrapper: css`\n display: flex;\n gap: 4px;\n `,\n\n carouselBtn: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n height: 32px;\n width: 32px;\n border-radius: 6px;\n transition: background 0.2s ease;\n &:not(.carousel-btn-disabled):hover {\n background: #f5f5f5;\n }\n `,\n\n carouselBtnDisabled: css`\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n `,\n\n carouselPage: css`\n font-size: 12px;\n color: #888;\n `,\n\n carouselItem: css`\n padding: 8px;\n box-sizing: border-box;\n font-size: 14px;\n line-height: 1.5;\n cursor: pointer;\n `,\n\n carouselItemTitleWrapper: css`\n display: flex;\n gap: 4px;\n align-items: center;\n `,\n\n carouselItemTitle: css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n carouselItemDescription: css`\n opacity: 0.8;\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n text-overflow: ellipsis;\n margin-top: 4px;\n font-size: 12px;\n color: #888;\n `,\n}));\n\nexport default useStyles;"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,qCAEX;IAEDC,mBAAmB,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,2OAWvB;IAEDG,oBAAoB,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,wEAGxB;IAEDK,4BAA4B,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,2CAEhC;IAEDO,sBAAsB,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,oEAI1B;IAEDS,WAAW,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,uJASf;IAEDW,eAAe,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,qCAEnB;IAEDa,WAAW,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,0IAQf;IAEDe,eAAe,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,iCAEnB;IAEDiB,gBAAgB,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,2FAIpB;IAEDmB,cAAc,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,mEAGlB;IAEDqB,oBAAoB,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,gCAExB;IAEDuB,aAAa,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,gWAejB;IAED;IACAyB,eAAe,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,mCAEnB;IAED2B,aAAa,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,wHAKjB;IAED6B,kBAAkB,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,+CAGtB;IAED+B,WAAW,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,wSAYf;IAEDiC,mBAAmB,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,oFAIvB;IAEDmC,YAAY,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,oDAGhB;IAEDqC,YAAY,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,+HAMhB;IAEDuC,wBAAwB,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,yEAI5B;IAEDyC,iBAAiB,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,2FAIrB;IAED2C,uBAAuB,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA;EAW9B,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}