@opentiny/genui-sdk-vue 1.2.1 → 1.3.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/ConfigProvider-BzxW9L3f.js +95 -0
- package/dist/ConfigProvider-BzxW9L3f.js.map +1 -0
- package/dist/GenuiRenderer-B9wcUl25.js +15164 -0
- package/dist/GenuiRenderer-B9wcUl25.js.map +1 -0
- package/dist/___vite-browser-external_commonjs-proxy-4gYZYw55.js +1 -0
- package/dist/___vite-browser-external_commonjs-proxy-4gYZYw55.js.map +1 -0
- package/dist/chat.d.ts +82 -2410
- package/dist/chat.js +18 -19
- package/dist/chat.js.map +1 -0
- package/dist/chat.types-BRLoMarP.js +1792 -0
- package/dist/chat.types-BRLoMarP.js.map +1 -0
- package/dist/config-provider.d.ts +9 -0
- package/dist/config-provider.js +6 -1
- package/dist/config-provider.js.map +1 -0
- package/dist/index.d.ts +89 -2407
- package/dist/index.js +28 -26
- package/dist/index.js.map +1 -0
- package/dist/{injection-tokens-D8CFCpjy.js → injection-tokens-CuDQs1ne.js} +49 -49
- package/dist/injection-tokens-CuDQs1ne.js.map +1 -0
- package/dist/legacy-chat.d.ts +1277 -0
- package/dist/legacy-chat.js +67 -0
- package/dist/legacy-chat.js.map +1 -0
- package/dist/legacy-renderer.d.ts +59 -0
- package/dist/legacy-renderer.js +41 -0
- package/dist/legacy-renderer.js.map +1 -0
- package/dist/renderer.d.ts +6 -2031
- package/dist/renderer.js +2 -1
- package/dist/renderer.js.map +1 -0
- package/dist/transform-jsx.d.ts +3 -1
- package/dist/transform-jsx.js +1 -0
- package/dist/transform-jsx.js.map +1 -0
- package/package.json +30 -33
- package/dist/ConfigProvider-BaJsiFgd.js +0 -86
- package/dist/SchemaCardRenderer-Bjn61C0M.js +0 -13440
- package/dist/chat.types-Cqd67Yp-.js +0 -1753
package/dist/index.js
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { G as
|
|
4
|
-
import { C as
|
|
1
|
+
import { C as s, D as r, E as t, G as o, I as n, M as E, T as i, d as u, e as d, s as I, b as G, t as l, u as m, a as T } from "./chat.types-BRLoMarP.js";
|
|
2
|
+
import { a as M, G as p, b as N, c as R, u as S } from "./injection-tokens-CuDQs1ne.js";
|
|
3
|
+
import { G as f, I as g, r as c } from "./GenuiRenderer-B9wcUl25.js";
|
|
4
|
+
import { C as A, u as F } from "./ConfigProvider-BzxW9L3f.js";
|
|
5
5
|
export {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
6
|
+
s as CustomModelProvider,
|
|
7
|
+
r as DEFAULT_IMAGE_FEATURES,
|
|
8
|
+
t as EventEmitter,
|
|
9
|
+
M as GENUI_CONFIG,
|
|
10
|
+
p as GENUI_I18N,
|
|
11
|
+
N as GENUI_MATERIALS,
|
|
12
|
+
o as GenuiChat,
|
|
13
|
+
A as GenuiConfigProvider,
|
|
14
|
+
f as GenuiRenderer,
|
|
15
|
+
n as IndexedDBStrategy,
|
|
16
|
+
E as MessageManager,
|
|
17
|
+
g as RENDERER_SETTINGS_KEY,
|
|
18
|
+
i as ThinkTagWrapPattern,
|
|
19
|
+
R as createI18n,
|
|
20
|
+
u as defaultResponseHandlers,
|
|
21
|
+
d as emitter,
|
|
22
|
+
c as requiredCompleteFieldSelectors,
|
|
23
|
+
I as scrollEnd,
|
|
23
24
|
G as throttle,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
l as toSlotFunction,
|
|
26
|
+
m as useConversation,
|
|
27
|
+
S as useI18n,
|
|
28
|
+
F as useMediaTheme,
|
|
29
|
+
T as useMessage
|
|
29
30
|
};
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { ref as
|
|
2
|
-
const
|
|
3
|
-
loading:
|
|
1
|
+
import { ref as h, reactive as x, readonly as S } from "vue";
|
|
2
|
+
const E = { response: "响应中...", generatingCard: "正在生成卡片...", thinking: "正在思考中..." }, F = { thinking: "正在思考", thinkingEnd: "已思考" }, v = { running: "正在调用", success: "已调用", failed: "调用失败", cancelled: "已取消" }, M = { title: "出错了" }, z = { thinking: "正在思考中...", input: "请输入您的问题~" }, I = { aiGenerated: "内容由AI生成,仅供参考" }, N = { newConversation: "新会话" }, _ = { description: "继续对话,用于表单的提交按钮等", messageParam: "相关参数为:", paramDescription: "对话消息,可以是按钮文本等,也可以是其他内容" }, b = { description: "保存状态,用于保存组件状态" }, k = { context: "工具名称:{toolName},工具参数:{toolParams},工具结果:{toolResult}" }, U = { error: { processFailed: "文件处理失败", validationFailed: "文件验证失败", unknownError: "未知错误", fileSizeExceeded: "文件大小不能超过 {maxSizeMB}MB,当前文件大小:{currentSizeMB}MB", unsupportedModel: "不支持的模型", unsupportedFormat: "模型不支持 .{extension} 文件格式", sizeLimitExceeded: "文件大小超过限制(最大 {maxSize}MB)", maxFilesExceeded: "单次最多支持 {maxFiles} 个文件", unsupportedFileType: "模型不支持处理此类型的文件: {fileCategory}" } }, $ = { error: { displayError: "[显示异常]" } }, G = { requestFailed: "请求失败,请稍后重试" }, T = {
|
|
3
|
+
loading: E,
|
|
4
4
|
reasoning: F,
|
|
5
|
-
toolStatus:
|
|
6
|
-
error:
|
|
7
|
-
placeholder:
|
|
8
|
-
footer:
|
|
9
|
-
conversation:
|
|
10
|
-
continueChat:
|
|
11
|
-
saveState:
|
|
5
|
+
toolStatus: v,
|
|
6
|
+
error: M,
|
|
7
|
+
placeholder: z,
|
|
8
|
+
footer: I,
|
|
9
|
+
conversation: N,
|
|
10
|
+
continueChat: _,
|
|
11
|
+
saveState: b,
|
|
12
12
|
toolCall: k,
|
|
13
|
-
fileUpload:
|
|
14
|
-
renderer:
|
|
15
|
-
message:
|
|
16
|
-
},
|
|
17
|
-
loading:
|
|
18
|
-
reasoning:
|
|
19
|
-
toolStatus:
|
|
20
|
-
error:
|
|
13
|
+
fileUpload: U,
|
|
14
|
+
renderer: $,
|
|
15
|
+
message: G
|
|
16
|
+
}, w = { response: "Responding...", generatingCard: "Generating cards...", thinking: "Thinking..." }, B = { thinking: "Thinking", thinkingEnd: "Thinking End" }, L = { running: "Running", success: "Succeeded", failed: "Failed", cancelled: "Cancelled" }, O = { title: "Error" }, P = { thinking: "Thinking...", input: "Please enter your question~" }, A = { aiGenerated: "Content generated by AI, for reference only" }, R = { newConversation: "New Conversation" }, j = { description: "Continue conversation, used for form submit buttons, etc.", messageParam: "Related parameters: ", paramDescription: "Conversation message, can be button text or other content" }, q = { description: "Save state, used for saving component state" }, D = { context: "Tool name: {toolName}, Tool parameters: {toolParams}, Tool result: {toolResult}" }, V = { error: { processFailed: "File processing failed", validationFailed: "File validation failed", unknownError: "Unknown error", fileSizeExceeded: "File size cannot exceed {maxSizeMB}MB, current file size: {currentSizeMB}MB", unsupportedModel: "Unsupported model", unsupportedFormat: "Model does not support .{extension} file format", sizeLimitExceeded: "File size exceeds limit (max {maxSize}MB)", maxFilesExceeded: "Maximum {maxFiles} files per request", unsupportedFileType: "Model does not support processing this type of file: {fileCategory}" } }, H = { error: { displayError: "[Display Error]" } }, J = { requestFailed: "Request failed, please try again later" }, K = {
|
|
17
|
+
loading: w,
|
|
18
|
+
reasoning: B,
|
|
19
|
+
toolStatus: L,
|
|
20
|
+
error: O,
|
|
21
21
|
placeholder: P,
|
|
22
|
-
footer:
|
|
23
|
-
conversation:
|
|
24
|
-
continueChat:
|
|
25
|
-
saveState:
|
|
26
|
-
toolCall:
|
|
22
|
+
footer: A,
|
|
23
|
+
conversation: R,
|
|
24
|
+
continueChat: j,
|
|
25
|
+
saveState: q,
|
|
26
|
+
toolCall: D,
|
|
27
27
|
fileUpload: V,
|
|
28
|
-
renderer:
|
|
29
|
-
message:
|
|
28
|
+
renderer: H,
|
|
29
|
+
message: J
|
|
30
30
|
};
|
|
31
|
-
function
|
|
31
|
+
function Q(a = {}) {
|
|
32
32
|
const d = {
|
|
33
33
|
locale: "zh_CN",
|
|
34
34
|
messages: {}
|
|
@@ -36,7 +36,7 @@ function K(a = {}) {
|
|
|
36
36
|
...d,
|
|
37
37
|
...a,
|
|
38
38
|
messages: { ...d.messages, ...a.messages }
|
|
39
|
-
},
|
|
39
|
+
}, s = h(l.locale), i = x(
|
|
40
40
|
structuredClone(l.messages)
|
|
41
41
|
);
|
|
42
42
|
function u(e) {
|
|
@@ -49,9 +49,9 @@ function K(a = {}) {
|
|
|
49
49
|
return structuredClone(e);
|
|
50
50
|
for (const n in t)
|
|
51
51
|
if (Object.prototype.hasOwnProperty.call(t, n)) {
|
|
52
|
-
const
|
|
53
|
-
u(
|
|
54
|
-
|
|
52
|
+
const r = e[n], o = t[n];
|
|
53
|
+
u(r) && u(o) ? e[n] = g(
|
|
54
|
+
r,
|
|
55
55
|
o
|
|
56
56
|
) : e[n] = structuredClone(o);
|
|
57
57
|
}
|
|
@@ -63,52 +63,52 @@ function K(a = {}) {
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
const t = e.trim();
|
|
66
|
-
|
|
66
|
+
s.value !== t && (s.value = t);
|
|
67
67
|
}
|
|
68
|
-
function
|
|
68
|
+
function y(e, t = !1) {
|
|
69
69
|
if (typeof e != "object" || e === null) {
|
|
70
70
|
console.warn("要合并的词条必须是合法对象!");
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
for (const n in e)
|
|
74
74
|
if (Object.prototype.hasOwnProperty.call(e, n)) {
|
|
75
|
-
const
|
|
76
|
-
!o || t ? i[n] = structuredClone(
|
|
75
|
+
const r = e[n], o = i[n];
|
|
76
|
+
!o || t ? i[n] = structuredClone(r) : g(o, r);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
function
|
|
79
|
+
function C(e, t = {}) {
|
|
80
80
|
if (typeof e != "string" || e.trim() === "")
|
|
81
81
|
return "";
|
|
82
|
-
const n = e.trim(),
|
|
82
|
+
const n = e.trim(), r = s.value, o = i[r] || {}, m = n.split(".").reduce((c, p) => (c == null ? void 0 : c[p]) || n, o);
|
|
83
83
|
return typeof m != "string" ? n : m.replace(/\{(\w+)\}/g, (c, p) => t.hasOwnProperty(p) ? String(t[p]) : c);
|
|
84
84
|
}
|
|
85
85
|
return {
|
|
86
|
-
locale:
|
|
87
|
-
messages:
|
|
86
|
+
locale: s,
|
|
87
|
+
messages: S(i),
|
|
88
88
|
setLocale: f,
|
|
89
|
-
mergeMessages:
|
|
90
|
-
t:
|
|
89
|
+
mergeMessages: y,
|
|
90
|
+
t: C
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
const
|
|
93
|
+
const W = Q({
|
|
94
94
|
locale: "zh_CN",
|
|
95
95
|
// 默认语言
|
|
96
96
|
messages: {
|
|
97
|
-
zh_CN:
|
|
98
|
-
en_US:
|
|
97
|
+
zh_CN: T,
|
|
98
|
+
en_US: K
|
|
99
99
|
}
|
|
100
|
-
}), Y = () =>
|
|
100
|
+
}), Y = () => W, Z = (a, d) => {
|
|
101
101
|
const l = a.__vccOpts || a;
|
|
102
|
-
for (const [
|
|
103
|
-
l[
|
|
102
|
+
for (const [s, i] of d)
|
|
103
|
+
l[s] = i;
|
|
104
104
|
return l;
|
|
105
|
-
}, ee = Symbol("GENUI_I18N"), ne = Symbol("
|
|
105
|
+
}, ee = Symbol("GENUI_I18N"), ne = Symbol("GENUI_CONFIG"), te = Symbol("GENUI_MATERIALS");
|
|
106
106
|
export {
|
|
107
|
-
oe as C,
|
|
108
107
|
ee as G,
|
|
109
108
|
Z as _,
|
|
110
109
|
ne as a,
|
|
111
110
|
te as b,
|
|
112
|
-
|
|
111
|
+
Q as c,
|
|
113
112
|
Y as u
|
|
114
113
|
};
|
|
114
|
+
//# sourceMappingURL=injection-tokens-CuDQs1ne.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-tokens-CuDQs1ne.js","sources":["../src/chat/i18n/i18n.ts","../src/chat/i18n/index.ts","../src/config-provider/injection-tokens.ts"],"sourcesContent":["import { ref, reactive, readonly, UnwrapNestedRefs } from 'vue';\nimport { I18nInstance, I18nMessages, I18nOptions, I18nMessageObject, I18nTranslateParams } from './types';\nexport function createI18n(options: I18nOptions = {}): I18nInstance {\n const defaultOptions: Required<I18nOptions> = {\n locale: 'zh_CN',\n messages: {}\n };\n\n const config: Required<I18nOptions> = {\n ...defaultOptions,\n ...options,\n messages: { ...defaultOptions.messages, ...options.messages }\n };\n\n const locale = ref<string>(config.locale);\n\n const _messages = reactive<UnwrapNestedRefs<I18nMessages>>(\n structuredClone(config.messages) as UnwrapNestedRefs<I18nMessages>\n );\n \n function isPlainObject(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n\n /**\n * @param target 目标对象(被合并的原有词条)\n * @param source 源对象(要新增的词条)\n * @returns 合并后的目标对象\n */\n function _deepMerge(target: I18nMessageObject, source: I18nMessageObject): I18nMessageObject {\n if (!isPlainObject(target)) {\n return structuredClone(source);\n }\n\n if (!isPlainObject(source)) {\n return structuredClone(target);\n }\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n target[key] = _deepMerge(\n targetValue as I18nMessageObject,\n sourceValue as I18nMessageObject\n );\n } else {\n target[key] = structuredClone(sourceValue);\n }\n }\n }\n\n return target;\n }\n\n function setLocale(lang: string): void {\n if (typeof lang !== 'string' || lang.trim() === '') {\n console.warn('语言标识必须是非空字符串!');\n return;\n }\n\n const trimmedLang = lang.trim();\n if (locale.value !== trimmedLang) {\n locale.value = trimmedLang;\n }\n }\n\n /**\n * @param newMessages 新的多语言词条\n * @param isCoverSameKey 合并模式:false(默认)为深度合并,保留原有词条并更新相同 key;true 为完全替换,整个语言对象被新对象替换,原有词条会丢失\n */\n function mergeMessages(newMessages: I18nMessages, isCoverSameKey = false): void {\n if (typeof newMessages !== 'object' || newMessages === null) {\n console.warn('要合并的词条必须是合法对象!');\n return;\n }\n\n for (const lang in newMessages) {\n if (Object.prototype.hasOwnProperty.call(newMessages, lang)) {\n const newLangMessages = newMessages[lang];\n const existingLangMessages = _messages[lang];\n\n if (!existingLangMessages || isCoverSameKey) {\n _messages[lang] = structuredClone(newLangMessages) as I18nMessageObject;\n } else {\n _deepMerge(existingLangMessages, newLangMessages);\n }\n }\n }\n }\n\n /**\n * @param key 词条键(如 'user.login.success')\n * @param params 可选:插值参数对象\n * @returns 翻译后的文本(无匹配时返回原 key)\n */\n function t(key: string, params: I18nTranslateParams = {}): string {\n if (typeof key !== 'string' || key.trim() === '') {\n return '';\n }\n\n const trimmedKey = key.trim();\n const currentLang = locale.value;\n const currentLangMessages = _messages[currentLang] || {};\n\n // 步骤1:解析多级词条键,获取原始文本\n const rawText = trimmedKey.split('.').reduce((current: any, nextKey) => {\n return current?.[nextKey] || trimmedKey;\n }, currentLangMessages);\n\n // 步骤2:校验原始文本类型\n if (typeof rawText !== 'string') {\n return trimmedKey;\n }\n\n // 步骤3:参数插值替换(匹配 {变量名} 格式)\n return rawText.replace(/\\{(\\w+)\\}/g, (match, paramKey) => {\n return params.hasOwnProperty(paramKey) ? String(params[paramKey]) : match;\n });\n }\n\n return {\n locale,\n messages: readonly(_messages),\n setLocale,\n mergeMessages,\n t\n };\n}\n","import zhCN from './zh.json';\nimport enUS from './en.json';\nimport { createI18n } from './i18n';\n\nconst globalI18n = createI18n({\n locale: 'zh_CN', // 默认语言\n messages: {\n 'zh_CN': zhCN,\n 'en_US': enUS,\n },\n});\n\nexport const useI18n = () => {\n return globalI18n;\n};\n\nexport * from './i18n.js';\nexport * from './types.js';\n","import type { InjectionKey } from 'vue';\nimport type { IMaterials } from '@opentiny/genui-sdk-core';\n\nexport const GENUI_I18N = Symbol('GENUI_I18N');\nexport const GENUI_CONFIG = Symbol('GENUI_CONFIG');\n\nexport const GENUI_MATERIALS: InjectionKey<IMaterials> = Symbol('GENUI_MATERIALS');\n"],"names":["createI18n","options","defaultOptions","config","locale","ref","_messages","reactive","isPlainObject","value","_deepMerge","target","source","key","targetValue","sourceValue","setLocale","lang","trimmedLang","mergeMessages","newMessages","isCoverSameKey","newLangMessages","existingLangMessages","t","params","trimmedKey","currentLang","currentLangMessages","rawText","current","nextKey","match","paramKey","readonly","globalI18n","zhCN","enUS","useI18n","GENUI_I18N","GENUI_CONFIG","GENUI_MATERIALS"],"mappings":"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"}
|