@zov-chatui/base 1.0.0
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 +347 -0
- package/dist/components/Chat/AnimatedRobot.d.ts +5 -0
- package/dist/components/Chat/AnimatedRobot.d.ts.map +1 -0
- package/dist/components/Chat/ChatInput.d.ts +4 -0
- package/dist/components/Chat/ChatInput.d.ts.map +1 -0
- package/dist/components/Chat/ChatList.d.ts +4 -0
- package/dist/components/Chat/ChatList.d.ts.map +1 -0
- package/dist/components/Chat/ChatMessage.d.ts +4 -0
- package/dist/components/Chat/ChatMessage.d.ts.map +1 -0
- package/dist/components/Chat/MessageContent.d.ts +8 -0
- package/dist/components/Chat/MessageContent.d.ts.map +1 -0
- package/dist/components/Chat/MobileChatInput.d.ts +4 -0
- package/dist/components/Chat/MobileChatInput.d.ts.map +1 -0
- package/dist/components/Chat/TypewriterPlaceholder.d.ts +12 -0
- package/dist/components/Chat/TypewriterPlaceholder.d.ts.map +1 -0
- package/dist/components/Chat/index.d.ts +8 -0
- package/dist/components/Chat/index.d.ts.map +1 -0
- package/dist/components/Layout/Header.d.ts +4 -0
- package/dist/components/Layout/Header.d.ts.map +1 -0
- package/dist/components/Layout/MobileSettingsPanel.d.ts +4 -0
- package/dist/components/Layout/MobileSettingsPanel.d.ts.map +1 -0
- package/dist/components/Layout/SettingsPanel.d.ts +4 -0
- package/dist/components/Layout/SettingsPanel.d.ts.map +1 -0
- package/dist/components/Layout/index.d.ts +4 -0
- package/dist/components/Layout/index.d.ts.map +1 -0
- package/dist/components/LoadingSpinner/LoadingSpinner.d.ts +4 -0
- package/dist/components/LoadingSpinner/LoadingSpinner.d.ts.map +1 -0
- package/dist/components/LoadingSpinner/index.d.ts +2 -0
- package/dist/components/LoadingSpinner/index.d.ts.map +1 -0
- package/dist/components/MessageContent/index.d.ts +3 -0
- package/dist/components/MessageContent/index.d.ts.map +1 -0
- package/dist/components/Toast/Toast.d.ts +4 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/ToastContainer.d.ts +4 -0
- package/dist/components/Toast/ToastContainer.d.ts.map +1 -0
- package/dist/components/Toast/index.d.ts +3 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Voice/VoiceInput.d.ts +4 -0
- package/dist/components/Voice/VoiceInput.d.ts.map +1 -0
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/contexts/BaseChatContext.d.ts +13 -0
- package/dist/contexts/BaseChatContext.d.ts.map +1 -0
- package/dist/contexts/chatReducer.d.ts +55 -0
- package/dist/contexts/chatReducer.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +3 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useChatActions.d.ts +18 -0
- package/dist/hooks/useChatActions.d.ts.map +1 -0
- package/dist/hooks/useI18n.d.ts +8 -0
- package/dist/hooks/useI18n.d.ts.map +1 -0
- package/dist/hooks/useResponsive.d.ts +3 -0
- package/dist/hooks/useResponsive.d.ts.map +1 -0
- package/dist/hooks/useToast.d.ts +19 -0
- package/dist/hooks/useToast.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +2469 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2469 -0
- package/dist/index.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +14 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/index.d.ts +4 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/themes.d.ts +6 -0
- package/dist/theme/themes.d.ts.map +1 -0
- package/dist/theme/types.d.ts +64 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +187 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/androidBridge.d.ts +133 -0
- package/dist/utils/androidBridge.d.ts.map +1 -0
- package/dist/utils/chat.d.ts +16 -0
- package/dist/utils/chat.d.ts.map +1 -0
- package/dist/utils/file.d.ts +18 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/streamProcessor.d.ts +61 -0
- package/dist/utils/streamProcessor.d.ts.map +1 -0
- package/dist/utils/textToSpeech.d.ts +72 -0
- package/dist/utils/textToSpeech.d.ts.map +1 -0
- package/dist/utils/url.d.ts +6 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/uuid.d.ts +4 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/voicePlayback.d.ts +16 -0
- package/dist/utils/voicePlayback.d.ts.map +1 -0
- package/dist/utils/voiceRecorder.d.ts +14 -0
- package/dist/utils/voiceRecorder.d.ts.map +1 -0
- package/dist/utils/voiceSettings.d.ts +19 -0
- package/dist/utils/voiceSettings.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
import { ThemeMode, ThemeContextType } from './types';
|
|
3
|
+
interface ThemeProviderProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
defaultMode?: ThemeMode;
|
|
6
|
+
}
|
|
7
|
+
export declare const ThemeProvider: React.FC<ThemeProviderProps>;
|
|
8
|
+
export declare const useTheme: () => ThemeContextType;
|
|
9
|
+
export declare const useThemeMode: () => {
|
|
10
|
+
themeMode: ThemeMode;
|
|
11
|
+
setThemeMode: (mode: ThemeMode) => void;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=ThemeProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAS,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAK7D,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA4FtD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAC;AAEF,eAAO,MAAM,YAAY;;;CASxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/theme/themes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,QAAA,MAAM,UAAU,EAAE,KAsDjB,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,KAsDhB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,KAAG,KAMhE,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export interface Theme {
|
|
2
|
+
mode: 'light' | 'dark';
|
|
3
|
+
colors: {
|
|
4
|
+
primary: string;
|
|
5
|
+
secondary: string;
|
|
6
|
+
background: string;
|
|
7
|
+
surface: string;
|
|
8
|
+
text: string;
|
|
9
|
+
textSecondary: string;
|
|
10
|
+
border: string;
|
|
11
|
+
success: string;
|
|
12
|
+
warning: string;
|
|
13
|
+
error: string;
|
|
14
|
+
info: string;
|
|
15
|
+
hover: string;
|
|
16
|
+
active: string;
|
|
17
|
+
disabled: string;
|
|
18
|
+
shadow: string;
|
|
19
|
+
};
|
|
20
|
+
spacing: {
|
|
21
|
+
xs: string;
|
|
22
|
+
sm: string;
|
|
23
|
+
md: string;
|
|
24
|
+
lg: string;
|
|
25
|
+
xl: string;
|
|
26
|
+
};
|
|
27
|
+
typography: {
|
|
28
|
+
fontFamily: string;
|
|
29
|
+
fontSize: {
|
|
30
|
+
xs: string;
|
|
31
|
+
sm: string;
|
|
32
|
+
md: string;
|
|
33
|
+
lg: string;
|
|
34
|
+
xl: string;
|
|
35
|
+
};
|
|
36
|
+
fontWeight: {
|
|
37
|
+
normal: number;
|
|
38
|
+
medium: number;
|
|
39
|
+
semibold: number;
|
|
40
|
+
bold: number;
|
|
41
|
+
};
|
|
42
|
+
lineHeight: {
|
|
43
|
+
tight: number;
|
|
44
|
+
normal: number;
|
|
45
|
+
relaxed: number;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
borderRadius: string;
|
|
49
|
+
transition: string;
|
|
50
|
+
breakpoints: {
|
|
51
|
+
mobile: string;
|
|
52
|
+
tablet: string;
|
|
53
|
+
desktop: string;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export type ThemeMode = 'light' | 'dark' | 'auto';
|
|
57
|
+
export interface ThemeContextType {
|
|
58
|
+
theme: Theme;
|
|
59
|
+
themeMode: ThemeMode;
|
|
60
|
+
setTheme: (theme: Theme) => void;
|
|
61
|
+
toggleTheme: () => void;
|
|
62
|
+
setThemeMode: (mode: ThemeMode) => void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE;YACR,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;SACZ,CAAC;QACF,UAAU,EAAE;YACV,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACzC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export interface BaseMessage {
|
|
2
|
+
id: string;
|
|
3
|
+
content: string;
|
|
4
|
+
type: 'text' | 'image' | 'chart' | 'markdown' | 'file' | 'code';
|
|
5
|
+
role: 'user' | 'assistant' | 'system';
|
|
6
|
+
timestamp: number;
|
|
7
|
+
metadata?: {
|
|
8
|
+
fileName?: string;
|
|
9
|
+
fileSize?: number;
|
|
10
|
+
fileType?: string;
|
|
11
|
+
chartData?: any;
|
|
12
|
+
codeLanguage?: string;
|
|
13
|
+
imageUrl?: string;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
};
|
|
16
|
+
status?: 'sending' | 'sent' | 'error' | 'thinking' | 'typing';
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface BaseChatSession {
|
|
20
|
+
id: string;
|
|
21
|
+
title: string;
|
|
22
|
+
messages: BaseMessage[];
|
|
23
|
+
createdAt: number;
|
|
24
|
+
updatedAt: number;
|
|
25
|
+
settings?: {
|
|
26
|
+
model?: string;
|
|
27
|
+
temperature?: number;
|
|
28
|
+
maxTokens?: number;
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface BaseChatState {
|
|
33
|
+
currentSession: BaseChatSession | null;
|
|
34
|
+
sessions: BaseChatSession[];
|
|
35
|
+
isLoading: boolean;
|
|
36
|
+
isTyping: boolean;
|
|
37
|
+
error: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface BaseChatContextType extends BaseChatState {
|
|
40
|
+
sendMessage: (content: string, type?: BaseMessage['type'], metadata?: BaseMessage['metadata']) => Promise<void>;
|
|
41
|
+
setUserTypingPreview: (preview: string) => void;
|
|
42
|
+
createNewSession: (initialMessage?: BaseMessage) => Promise<BaseChatSession>;
|
|
43
|
+
deleteSession: (sessionId: string) => void;
|
|
44
|
+
switchSession: (sessionId: string) => void;
|
|
45
|
+
clearCurrentSession: () => void;
|
|
46
|
+
updateMessage: (messageId: string, updates: Partial<BaseMessage>) => void;
|
|
47
|
+
retryMessage: (messageId: string) => void;
|
|
48
|
+
}
|
|
49
|
+
export type { Theme, ThemeMode, ThemeContextType } from '../theme/types';
|
|
50
|
+
export type { TTSSettings, TTSInstance } from '../utils/textToSpeech';
|
|
51
|
+
export interface ToastProps {
|
|
52
|
+
id: string;
|
|
53
|
+
type: 'success' | 'error' | 'warning' | 'info';
|
|
54
|
+
title: string;
|
|
55
|
+
message?: string;
|
|
56
|
+
duration?: number;
|
|
57
|
+
onClose: (id: string) => void;
|
|
58
|
+
}
|
|
59
|
+
export type ToastType = ToastProps['type'];
|
|
60
|
+
export interface ResponsiveState {
|
|
61
|
+
isMobile: boolean;
|
|
62
|
+
isTablet: boolean;
|
|
63
|
+
isDesktop: boolean;
|
|
64
|
+
width: number;
|
|
65
|
+
height: number;
|
|
66
|
+
}
|
|
67
|
+
export interface BaseComponentProps {
|
|
68
|
+
className?: string;
|
|
69
|
+
style?: React.CSSProperties;
|
|
70
|
+
children?: React.ReactNode;
|
|
71
|
+
}
|
|
72
|
+
export interface ChatMessageProps extends BaseComponentProps {
|
|
73
|
+
message: BaseMessage;
|
|
74
|
+
onRetry?: (messageId: string) => void;
|
|
75
|
+
avatars?: {
|
|
76
|
+
user?: string;
|
|
77
|
+
assistant?: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface ChatInputProps extends BaseComponentProps {
|
|
81
|
+
onSend?: (content: string, type: string, metadata?: any) => void;
|
|
82
|
+
disabled?: boolean;
|
|
83
|
+
placeholder?: string;
|
|
84
|
+
hasMessages?: boolean;
|
|
85
|
+
voice?: {
|
|
86
|
+
enabled?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* @deprecated 百度配置已移至 agent 层,请使用 onVoiceData 回调
|
|
89
|
+
*/
|
|
90
|
+
baidu?: {
|
|
91
|
+
apiKey: string;
|
|
92
|
+
secretKey: string;
|
|
93
|
+
devPid?: number;
|
|
94
|
+
cuid?: string;
|
|
95
|
+
url?: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* 语音数据回调 - 返回录制的音频 Blob,由调用方处理语音识别
|
|
99
|
+
* 推荐使用此回调替代 baidu 配置
|
|
100
|
+
*/
|
|
101
|
+
onVoiceData?: (audioBlob: Blob) => Promise<string>;
|
|
102
|
+
onResultAppend?: boolean;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export interface ChatListProps extends BaseComponentProps {
|
|
106
|
+
messages: BaseMessage[];
|
|
107
|
+
onRetry?: (messageId: string) => void;
|
|
108
|
+
isLoading?: boolean;
|
|
109
|
+
avatars?: {
|
|
110
|
+
user?: string;
|
|
111
|
+
assistant?: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export interface HeaderProps extends BaseComponentProps {
|
|
115
|
+
title?: string;
|
|
116
|
+
onNewChat?: () => void;
|
|
117
|
+
onClearChat?: () => void;
|
|
118
|
+
onSettings?: () => void;
|
|
119
|
+
onServiceSettings?: () => void;
|
|
120
|
+
onHistory?: () => void;
|
|
121
|
+
showMobileMenu?: boolean;
|
|
122
|
+
onToggleMobileMenu?: () => void;
|
|
123
|
+
}
|
|
124
|
+
export interface SettingsPanelProps extends BaseComponentProps {
|
|
125
|
+
isOpen: boolean;
|
|
126
|
+
onClose: () => void;
|
|
127
|
+
}
|
|
128
|
+
export interface MessageContentProps extends BaseComponentProps {
|
|
129
|
+
message: BaseMessage;
|
|
130
|
+
}
|
|
131
|
+
export interface FileRendererProps extends BaseComponentProps {
|
|
132
|
+
file: File;
|
|
133
|
+
metadata?: BaseMessage['metadata'];
|
|
134
|
+
}
|
|
135
|
+
export interface ImageRendererProps extends BaseComponentProps {
|
|
136
|
+
src: string;
|
|
137
|
+
alt?: string;
|
|
138
|
+
metadata?: BaseMessage['metadata'];
|
|
139
|
+
}
|
|
140
|
+
export interface ChartRendererProps extends BaseComponentProps {
|
|
141
|
+
data: any;
|
|
142
|
+
type?: string;
|
|
143
|
+
metadata?: BaseMessage['metadata'];
|
|
144
|
+
}
|
|
145
|
+
export interface MermaidRendererProps extends BaseComponentProps {
|
|
146
|
+
content: string;
|
|
147
|
+
metadata?: BaseMessage['metadata'];
|
|
148
|
+
}
|
|
149
|
+
export interface LoadingSpinnerProps extends BaseComponentProps {
|
|
150
|
+
size?: 'sm' | 'md' | 'lg';
|
|
151
|
+
color?: string;
|
|
152
|
+
}
|
|
153
|
+
export interface ToastContainerProps extends BaseComponentProps {
|
|
154
|
+
toasts: ToastProps[];
|
|
155
|
+
onRemoveToast: (id: string) => void;
|
|
156
|
+
position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
|
|
157
|
+
}
|
|
158
|
+
export interface VoiceInputProps extends BaseComponentProps {
|
|
159
|
+
/**
|
|
160
|
+
* @deprecated 百度配置已移至 agent 层,请使用 onVoiceData 回调自行处理语音识别
|
|
161
|
+
*/
|
|
162
|
+
baiduConfig?: {
|
|
163
|
+
apiKey: string;
|
|
164
|
+
secretKey: string;
|
|
165
|
+
devPid?: number;
|
|
166
|
+
cuid?: string;
|
|
167
|
+
url?: string;
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* 语音识别结果回调
|
|
171
|
+
*/
|
|
172
|
+
onResult?: (text: string) => void;
|
|
173
|
+
/**
|
|
174
|
+
* 语音数据回调 - 返回录制的音频 Blob,由调用方处理语音识别
|
|
175
|
+
* 推荐使用此回调替代 baiduConfig
|
|
176
|
+
*/
|
|
177
|
+
onVoiceData?: (audioBlob: Blob) => Promise<string>;
|
|
178
|
+
/**
|
|
179
|
+
* 错误回调
|
|
180
|
+
*/
|
|
181
|
+
onError?: (err: Error) => void;
|
|
182
|
+
/**
|
|
183
|
+
* 是否禁用
|
|
184
|
+
*/
|
|
185
|
+
disabled?: boolean;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Android Bridge 工具函数
|
|
3
|
+
* 用于检测Android环境和dsbridge可用性,以及调用Android原生能力
|
|
4
|
+
*/
|
|
5
|
+
declare global {
|
|
6
|
+
interface Window {
|
|
7
|
+
dsBridge?: {
|
|
8
|
+
call: (method: string, args?: any, callback?: (result: any) => void) => any;
|
|
9
|
+
register: (method: string, handler: any) => void;
|
|
10
|
+
registerAsyn: (method: string, handler: any) => void;
|
|
11
|
+
hasNativeMethod: (method: string, type?: string) => boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 检测是否在Android环境中
|
|
17
|
+
*/
|
|
18
|
+
export declare function isAndroid(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* 检测dsBridge是否可用
|
|
21
|
+
*/
|
|
22
|
+
export declare function isDsBridgeAvailable(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* 检测是否可以使用Android原生语音输入
|
|
25
|
+
*/
|
|
26
|
+
export declare function canUseAndroidVoiceInput(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 检测是否可以使用Android原生语音播报
|
|
29
|
+
*/
|
|
30
|
+
export declare function canUseAndroidTTS(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 使用Android原生语音播报
|
|
33
|
+
* @param text 要播报的文本内容
|
|
34
|
+
*/
|
|
35
|
+
export declare function androidTextToSpeech(text: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* 检测是否可以使用Android原生停止语音播报
|
|
38
|
+
*/
|
|
39
|
+
export declare function canStopAndroidTTS(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 停止Android原生语音播报
|
|
42
|
+
*/
|
|
43
|
+
export declare function stopAndroidTextToSpeech(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Android ASR 响应数据结构
|
|
46
|
+
*/
|
|
47
|
+
export interface AndroidAsrResponse<T = any> {
|
|
48
|
+
code: number;
|
|
49
|
+
success: boolean;
|
|
50
|
+
message: string;
|
|
51
|
+
data: T | null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Android ASR 数据内容
|
|
55
|
+
*/
|
|
56
|
+
export interface AndroidAsrData {
|
|
57
|
+
content: string;
|
|
58
|
+
endFlag?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Android原生语音输入接口定义
|
|
62
|
+
*/
|
|
63
|
+
export interface AndroidVoiceInputOptions {
|
|
64
|
+
onResult?: (text: string) => void;
|
|
65
|
+
onError?: (error: Error) => void;
|
|
66
|
+
onStart?: () => void;
|
|
67
|
+
onStop?: () => void;
|
|
68
|
+
onPartialResult?: (text: string) => void;
|
|
69
|
+
continuousMode?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Android原生语音输入适配器
|
|
73
|
+
*/
|
|
74
|
+
export declare class AndroidVoiceInputAdapter {
|
|
75
|
+
private isRecording;
|
|
76
|
+
private options;
|
|
77
|
+
private recognizedText;
|
|
78
|
+
private partialText;
|
|
79
|
+
private finalResultResolver;
|
|
80
|
+
private finalResultRejector;
|
|
81
|
+
constructor(options?: AndroidVoiceInputOptions);
|
|
82
|
+
/**
|
|
83
|
+
* 解析ASR响应数据(统一处理字符串和对象格式)
|
|
84
|
+
*/
|
|
85
|
+
private parseAsrResponse;
|
|
86
|
+
/**
|
|
87
|
+
* 检查响应是否成功
|
|
88
|
+
*/
|
|
89
|
+
private isResponseSuccess;
|
|
90
|
+
/**
|
|
91
|
+
* 开始录音(调用 startAsr)
|
|
92
|
+
*/
|
|
93
|
+
start(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* 处理ASR响应数据
|
|
96
|
+
*/
|
|
97
|
+
private handleAsrResponse;
|
|
98
|
+
/**
|
|
99
|
+
* 尝试停止ASR(安全调用,忽略错误)
|
|
100
|
+
*/
|
|
101
|
+
private tryStopAsr;
|
|
102
|
+
/**
|
|
103
|
+
* 停止录音并获取识别结果
|
|
104
|
+
* 如果是持续录音模式,直接停止不等待最终结果
|
|
105
|
+
* 否则先等待最终识别结果(endFlag === true),收到后再调用 stopAsr 停止录音
|
|
106
|
+
*/
|
|
107
|
+
stop(): Promise<Blob>;
|
|
108
|
+
/**
|
|
109
|
+
* 清除最终结果处理器
|
|
110
|
+
*/
|
|
111
|
+
private clearFinalResultHandlers;
|
|
112
|
+
/**
|
|
113
|
+
* 调用 stopAsr 停止录音并 resolve Promise
|
|
114
|
+
*/
|
|
115
|
+
private stopAsrAndResolve;
|
|
116
|
+
/**
|
|
117
|
+
* 获取识别文本(Android原生识别完成后)
|
|
118
|
+
*/
|
|
119
|
+
getRecognizedText(): string;
|
|
120
|
+
/**
|
|
121
|
+
* 获取部分识别文本(持续录音模式下)
|
|
122
|
+
*/
|
|
123
|
+
getPartialText(): string;
|
|
124
|
+
/**
|
|
125
|
+
* 检查是否正在录音
|
|
126
|
+
*/
|
|
127
|
+
isRecordingNow(): boolean;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 创建Android原生语音输入适配器
|
|
131
|
+
*/
|
|
132
|
+
export declare function createAndroidVoiceInput(options?: AndroidVoiceInputOptions): AndroidVoiceInputAdapter;
|
|
133
|
+
//# sourceMappingURL=androidBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"androidBridge.d.ts","sourceRoot":"","sources":["../../src/utils/androidBridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE;YACT,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC;YAC5E,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;YACjD,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;YACrD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;SAC7D,CAAC;KACH;CACF;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAInC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAG7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAYtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAM3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAY9C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,mBAAmB,CAAyC;gBAExD,OAAO,GAAE,wBAA6B;IAIlD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiF3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,cAAc,IAAI,OAAO;CAG1B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,wBAAwB,CAExG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseMessage } from '../types';
|
|
2
|
+
export declare const formatTimestamp: (timestamp: number) => string;
|
|
3
|
+
export declare const formatDate: (timestamp: number) => string;
|
|
4
|
+
export declare const formatDateTime: (timestamp: number) => string;
|
|
5
|
+
export declare const isMessageFromUser: (message: BaseMessage) => boolean;
|
|
6
|
+
export declare const isMessageFromAssistant: (message: BaseMessage) => boolean;
|
|
7
|
+
export declare const isMessageFromSystem: (message: BaseMessage) => boolean;
|
|
8
|
+
export declare const isMessageError: (message: BaseMessage) => boolean;
|
|
9
|
+
export declare const isMessageLoading: (message: BaseMessage) => boolean;
|
|
10
|
+
export declare const isMessageSent: (message: BaseMessage) => boolean;
|
|
11
|
+
export declare const getMessageStatusText: (message: BaseMessage) => string;
|
|
12
|
+
export declare const createMessage: (content: string, role?: BaseMessage["role"], type?: BaseMessage["type"], metadata?: BaseMessage["metadata"]) => BaseMessage;
|
|
13
|
+
export declare const createSystemMessage: (content: string) => BaseMessage;
|
|
14
|
+
export declare const createAssistantMessage: (content: string, type?: BaseMessage["type"]) => BaseMessage;
|
|
15
|
+
export declare const createUserMessage: (content: string, type?: BaseMessage["type"]) => BaseMessage;
|
|
16
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MAEnD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,KAAG,MAE9C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,MAElD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,WAAW,KAAG,OAExD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,WAAW,KAAG,OAE7D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,WAAW,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,KAAG,OAErD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,KAAG,OAEvD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,WAAW,KAAG,OAEpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,WAAW,KAAG,MAQ3D,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,EACf,OAAM,WAAW,CAAC,MAAM,CAAU,EAClC,OAAM,WAAW,CAAC,MAAM,CAAU,EAClC,WAAW,WAAW,CAAC,UAAU,CAAC,KACjC,WAUF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,WAErD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,EAAE,OAAM,WAAW,CAAC,MAAM,CAAU,KAAG,WAE5F,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,OAAM,WAAW,CAAC,MAAM,CAAU,KAAG,WAEvF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const ACCEPTED_FILE_TYPES: {
|
|
2
|
+
text: string[];
|
|
3
|
+
markdown: string[];
|
|
4
|
+
json: string[];
|
|
5
|
+
csv: string[];
|
|
6
|
+
images: string[];
|
|
7
|
+
pdf: string[];
|
|
8
|
+
zip: string[];
|
|
9
|
+
documents: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const isBinaryPreviewOnly: (mimeType: string) => boolean;
|
|
12
|
+
export declare const formatFileSize: (bytes: number) => string;
|
|
13
|
+
export declare const getFileExtension: (filename: string) => string;
|
|
14
|
+
export declare const isImageFile: (file: File) => boolean;
|
|
15
|
+
export declare const isTextFile: (file: File) => boolean;
|
|
16
|
+
export declare const readFileAsText: (file: File) => Promise<string>;
|
|
17
|
+
export declare const readFileAsDataURL: (file: File) => Promise<string>;
|
|
18
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;;;;CAS/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,KAAG,OAetD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAQ9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAEnD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,KAAG,OAExC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,OAKvC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,OAAO,CAAC,MAAM,CAOzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,OAAO,CAAC,MAAM,CAO5D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './uuid';
|
|
2
|
+
export * from './file';
|
|
3
|
+
export * from './url';
|
|
4
|
+
export * from './chat';
|
|
5
|
+
export * from './voiceRecorder';
|
|
6
|
+
export * from './streamProcessor';
|
|
7
|
+
export * from './textToSpeech';
|
|
8
|
+
export * from './androidBridge';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 流式数据处理工具类
|
|
3
|
+
* 提供安全的流式数据读取和解析功能(通用版本,不包含业务逻辑)
|
|
4
|
+
*/
|
|
5
|
+
export interface StreamChunk {
|
|
6
|
+
data: string;
|
|
7
|
+
done: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface StreamProcessorOptions<T = any> {
|
|
10
|
+
onChunk?: (chunk: T) => void;
|
|
11
|
+
onError?: (error: Error) => void;
|
|
12
|
+
onComplete?: () => void;
|
|
13
|
+
parser?: (line: string) => T | null;
|
|
14
|
+
}
|
|
15
|
+
export declare class StreamProcessor<T = string> {
|
|
16
|
+
private decoder;
|
|
17
|
+
private buffer;
|
|
18
|
+
private parser?;
|
|
19
|
+
constructor(options?: {
|
|
20
|
+
parser?: (line: string) => T | null;
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* 安全地读取流数据
|
|
24
|
+
*/
|
|
25
|
+
readStream(response: Response): AsyncGenerator<string, void, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* 安全地读取单个chunk
|
|
28
|
+
*/
|
|
29
|
+
private safeRead;
|
|
30
|
+
/**
|
|
31
|
+
* 安全地解码数据
|
|
32
|
+
*/
|
|
33
|
+
private safeDecode;
|
|
34
|
+
/**
|
|
35
|
+
* 安全地释放reader
|
|
36
|
+
*/
|
|
37
|
+
private safeReleaseReader;
|
|
38
|
+
/**
|
|
39
|
+
* 解析SSE格式的数据(通用版本)
|
|
40
|
+
*/
|
|
41
|
+
parseSSEChunk(chunk: string): T[];
|
|
42
|
+
/**
|
|
43
|
+
* 解析单行SSE数据(通用版本)
|
|
44
|
+
*/
|
|
45
|
+
private parseSSELine;
|
|
46
|
+
/**
|
|
47
|
+
* 处理完整的流式响应(通用版本)
|
|
48
|
+
*/
|
|
49
|
+
processStream(response: Response): AsyncGenerator<T, void, unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* 重置缓冲区
|
|
52
|
+
*/
|
|
53
|
+
resetBuffer(): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 创建流式处理器实例
|
|
57
|
+
*/
|
|
58
|
+
export declare function createStreamProcessor<T = string>(options?: {
|
|
59
|
+
parser?: (line: string) => T | null;
|
|
60
|
+
}): StreamProcessor<T>;
|
|
61
|
+
//# sourceMappingURL=streamProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamProcessor.d.ts","sourceRoot":"","sources":["../../src/utils/streamProcessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,GAAG;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC;CACrC;AAED,qBAAa,eAAe,CAAC,CAAC,GAAG,MAAM;IACrC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAC,CAA6B;gBAEhC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,IAAI,CAAA;KAAE;IAK7D;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAwB5E;;OAEG;YACW,QAAQ;IAsBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IA8BjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACI,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;IAe1E;;OAEG;IACH,WAAW,IAAI,IAAI;CAGpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAEvH"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text-to-Speech (TTS) 工具类
|
|
3
|
+
* 基于 Web Speech API 实现语音播报功能
|
|
4
|
+
* 在Android环境下优先使用原生语音播报
|
|
5
|
+
*/
|
|
6
|
+
export interface TTSSettings {
|
|
7
|
+
/** 是否启用 TTS */
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
/** 语音语言,默认为 'zh-CN' */
|
|
10
|
+
lang?: string;
|
|
11
|
+
/** 语音名称(浏览器支持的语音名称) */
|
|
12
|
+
voice?: string;
|
|
13
|
+
/** 语速,范围 0.1-10,默认 1 */
|
|
14
|
+
rate?: number;
|
|
15
|
+
/** 音量,范围 0-1,默认 1 */
|
|
16
|
+
volume?: number;
|
|
17
|
+
/** 音调,范围 0-2,默认 1 */
|
|
18
|
+
pitch?: number;
|
|
19
|
+
/** 是否在消息完成后再播报,false 则流式播报 */
|
|
20
|
+
waitForComplete?: boolean;
|
|
21
|
+
/** 是否跳过 Markdown 格式化文本(只播报纯文本) */
|
|
22
|
+
skipMarkdown?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface TTSInstance {
|
|
25
|
+
/** 播报文本 */
|
|
26
|
+
speak: (text: string, options?: Partial<TTSSettings>) => Promise<void>;
|
|
27
|
+
/** 停止播报 */
|
|
28
|
+
stop: () => void;
|
|
29
|
+
/** 暂停播报 */
|
|
30
|
+
pause: () => void;
|
|
31
|
+
/** 恢复播报 */
|
|
32
|
+
resume: () => void;
|
|
33
|
+
/** 检查是否正在播报 */
|
|
34
|
+
isSpeaking: () => boolean;
|
|
35
|
+
/** 检查是否已暂停 */
|
|
36
|
+
isPaused: () => boolean;
|
|
37
|
+
/** 更新设置 */
|
|
38
|
+
updateSettings: (settings: Partial<TTSSettings>) => void;
|
|
39
|
+
/** 获取当前设置 */
|
|
40
|
+
getSettings: () => TTSSettings;
|
|
41
|
+
/** 获取可用的语音列表 */
|
|
42
|
+
getVoices: () => SpeechSynthesisVoice[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 提取纯文本内容,去除 Markdown 等格式化标记
|
|
46
|
+
*/
|
|
47
|
+
export declare function extractPlainText(content: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* 检查浏览器是否支持 Speech Synthesis
|
|
50
|
+
*/
|
|
51
|
+
export declare function isTTSSupported(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* 获取可用的语音列表
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAvailableVoices(): SpeechSynthesisVoice[];
|
|
56
|
+
/**
|
|
57
|
+
* 等待语音列表加载完成
|
|
58
|
+
*/
|
|
59
|
+
export declare function waitForVoices(): Promise<SpeechSynthesisVoice[]>;
|
|
60
|
+
/**
|
|
61
|
+
* 创建 TTS 实例
|
|
62
|
+
*/
|
|
63
|
+
export declare function createTTS(initialSettings?: TTSSettings): TTSInstance;
|
|
64
|
+
/**
|
|
65
|
+
* 获取全局 TTS 实例
|
|
66
|
+
*/
|
|
67
|
+
export declare function getGlobalTTS(settings?: TTSSettings): TTSInstance;
|
|
68
|
+
/**
|
|
69
|
+
* 重置全局 TTS 实例
|
|
70
|
+
*/
|
|
71
|
+
export declare function resetGlobalTTS(): void;
|
|
72
|
+
//# sourceMappingURL=textToSpeech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textToSpeech.d.ts","sourceRoot":"","sources":["../../src/utils/textToSpeech.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,WAAW;IACX,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW;IACX,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW;IACX,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,eAAe;IACf,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,cAAc;IACd,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,WAAW;IACX,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACzD,aAAa;IACb,WAAW,EAAE,MAAM,WAAW,CAAC;IAC/B,gBAAgB;IAChB,SAAS,EAAE,MAAM,oBAAoB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA8CxD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,EAAE,CAG3D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA8B/D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,eAAe,GAAE,WAAgB,GAAG,WAAW,CA6LxE;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,CAQhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const getQueryParam: (name: string, url?: string) => string | null;
|
|
2
|
+
export declare const setQueryParam: (name: string, value: string, url?: string) => string;
|
|
3
|
+
export declare const removeQueryParam: (name: string, url?: string) => string;
|
|
4
|
+
export declare const getHash: (url?: string) => string;
|
|
5
|
+
export declare const setHash: (hash: string, url?: string) => string;
|
|
6
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,IAInE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,MAAM,KAAG,MAKzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAK7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAItC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAKpD,CAAC"}
|