@ai-group/chat-sdk 3.7.1-alpha1 → 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 (52) 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 +2 -1
  11. package/dist/cjs/components/XAdkSender/InlineTagInput.js +26 -2
  12. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  13. package/dist/cjs/components/XAdkSender/index.js +66 -11
  14. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  15. package/dist/cjs/index.d.ts +3 -0
  16. package/dist/cjs/index.js +3 -0
  17. package/dist/cjs/index.js.map +3 -3
  18. package/dist/cjs/types/Sources.d.ts +30 -0
  19. package/dist/cjs/types/Sources.js +18 -0
  20. package/dist/cjs/types/Sources.js.map +7 -0
  21. package/dist/cjs/types/XAdkSender.d.ts +38 -5
  22. package/dist/cjs/types/XAdkSender.js.map +1 -1
  23. package/dist/cjs/types/index.d.ts +1 -0
  24. package/dist/cjs/types/index.js +3 -1
  25. package/dist/cjs/types/index.js.map +2 -2
  26. package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
  27. package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
  28. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
  29. package/dist/esm/components/Sources/index.d.ts +5 -0
  30. package/dist/esm/components/Sources/index.js +127 -0
  31. package/dist/esm/components/Sources/index.js.map +1 -0
  32. package/dist/esm/components/Sources/styles.d.ts +59 -0
  33. package/dist/esm/components/Sources/styles.js +34 -0
  34. package/dist/esm/components/Sources/styles.js.map +1 -0
  35. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +2 -1
  36. package/dist/esm/components/XAdkSender/InlineTagInput.js +32 -2
  37. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  38. package/dist/esm/components/XAdkSender/index.js +96 -26
  39. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  40. package/dist/esm/index.d.ts +3 -0
  41. package/dist/esm/index.js +3 -0
  42. package/dist/esm/index.js.map +1 -1
  43. package/dist/esm/types/Sources.d.ts +30 -0
  44. package/dist/esm/types/Sources.js +2 -0
  45. package/dist/esm/types/Sources.js.map +1 -0
  46. package/dist/esm/types/XAdkSender.d.ts +38 -5
  47. package/dist/esm/types/XAdkSender.js.map +1 -1
  48. package/dist/esm/types/index.d.ts +1 -0
  49. package/dist/esm/types/index.js +1 -0
  50. package/dist/esm/types/index.js.map +1 -1
  51. package/dist/umd/chat-sdk.min.js +1 -1
  52. package/package.json +1 -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
+ }
@@ -28,6 +28,10 @@ export interface InputTag {
28
28
  label: string;
29
29
  /** 标签类型,如 'aggregation', 'skill', 'app' */
30
30
  type: string;
31
+ /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 label */
32
+ value?: string;
33
+ /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */
34
+ trigger?: string;
31
35
  color?: string;
32
36
  icon?: React.ReactNode;
33
37
  /** 原始数据 */
@@ -36,6 +40,30 @@ export interface InputTag {
36
40
  export interface InlineTagRenderInfo {
37
41
  onRemove: () => void;
38
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
+ }
39
67
  export interface UploadFileResult {
40
68
  fileName?: string;
41
69
  fileId?: string | number;
@@ -120,11 +148,7 @@ export interface SenderUIProps {
120
148
  defaultValue?: string;
121
149
  onClear?: () => void;
122
150
  onChange?: (value: string) => void;
123
- onSubmit?: (data: {
124
- text: string;
125
- files: ServerFile[];
126
- tags?: InputTag[];
127
- }) => void;
151
+ onSubmit?: (data: XAdkSenderSubmitData) => void;
128
152
  onStop?: () => void;
129
153
  /** 自定义发送按钮渲染 */
130
154
  sendButtonRender?: (info: {
@@ -159,6 +183,15 @@ export interface SenderUIProps {
159
183
  onTagsChange?: (tags: InputTag[]) => void;
160
184
  /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
161
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;
162
195
  }
163
196
  export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
164
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\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 color?: string;\n icon?: React.ReactNode;\n /** 原始数据 */\n data?: any;\n}\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\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: {\n text: string;\n files: ServerFile[];\n tags?: InputTag[];\n }) => 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\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":"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"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { SourcesProps, SourcesRef } from "../../types/Sources";
3
+ declare const ForwardSources: React.ForwardRefExoticComponent<SourcesProps & React.RefAttributes<SourcesRef>>;
4
+ export default ForwardSources;
5
+ export type { SourcesProps, SourcesItem, SourcesRef } from "../../types/Sources";
@@ -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"}
@@ -1,8 +1,9 @@
1
1
  import React from "react";
2
- import type { InlineTagRenderInfo, InputTag } from "../../types";
2
+ import type { InlineTagRenderInfo, InputTag, XAdkSenderSubmitPart } from "../../types";
3
3
  export interface InlineTagInputRef {
4
4
  focus: () => void;
5
5
  getText: () => string;
6
+ getParts: () => XAdkSenderSubmitPart[];
6
7
  getCursorOffset: () => number;
7
8
  insertTag: (tag: InputTag, replace?: {
8
9
  start: number;