@unif/react-native-chat 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -0
- package/lib/commonjs/bubble/Bubble.js +131 -0
- package/lib/commonjs/bubble/Bubble.js.map +1 -0
- package/lib/commonjs/bubble/BubbleList.js +73 -0
- package/lib/commonjs/bubble/BubbleList.js.map +1 -0
- package/lib/commonjs/bubble/index.md +111 -0
- package/lib/commonjs/card-wrapper/CardWrapper.js +65 -0
- package/lib/commonjs/card-wrapper/CardWrapper.js.map +1 -0
- package/lib/commonjs/card-wrapper/index.md +78 -0
- package/lib/commonjs/conversations/Conversations.js +184 -0
- package/lib/commonjs/conversations/Conversations.js.map +1 -0
- package/lib/commonjs/conversations/index.md +90 -0
- package/lib/commonjs/index.js +63 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/prompts/Prompts.js +87 -0
- package/lib/commonjs/prompts/Prompts.js.map +1 -0
- package/lib/commonjs/prompts/index.md +81 -0
- package/lib/commonjs/sender/Sender.js +354 -0
- package/lib/commonjs/sender/Sender.js.map +1 -0
- package/lib/commonjs/sender/index.md +131 -0
- package/lib/commonjs/theme/tokens.js +67 -0
- package/lib/commonjs/theme/tokens.js.map +1 -0
- package/lib/commonjs/welcome/Welcome.js +152 -0
- package/lib/commonjs/welcome/Welcome.js.map +1 -0
- package/lib/commonjs/welcome/index.md +95 -0
- package/lib/module/bubble/Bubble.js +126 -0
- package/lib/module/bubble/Bubble.js.map +1 -0
- package/lib/module/bubble/BubbleList.js +68 -0
- package/lib/module/bubble/BubbleList.js.map +1 -0
- package/lib/module/bubble/index.md +111 -0
- package/lib/module/card-wrapper/CardWrapper.js +60 -0
- package/lib/module/card-wrapper/CardWrapper.js.map +1 -0
- package/lib/module/card-wrapper/index.md +78 -0
- package/lib/module/conversations/Conversations.js +179 -0
- package/lib/module/conversations/Conversations.js.map +1 -0
- package/lib/module/conversations/index.md +90 -0
- package/lib/module/index.js +23 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/prompts/Prompts.js +82 -0
- package/lib/module/prompts/Prompts.js.map +1 -0
- package/lib/module/prompts/index.md +81 -0
- package/lib/module/sender/Sender.js +349 -0
- package/lib/module/sender/Sender.js.map +1 -0
- package/lib/module/sender/index.md +131 -0
- package/lib/module/theme/tokens.js +63 -0
- package/lib/module/theme/tokens.js.map +1 -0
- package/lib/module/welcome/Welcome.js +147 -0
- package/lib/module/welcome/Welcome.js.map +1 -0
- package/lib/module/welcome/index.md +95 -0
- package/lib/typescript/commonjs/bubble/Bubble.d.ts +29 -0
- package/lib/typescript/commonjs/bubble/Bubble.d.ts.map +1 -0
- package/lib/typescript/commonjs/bubble/BubbleList.d.ts +20 -0
- package/lib/typescript/commonjs/bubble/BubbleList.d.ts.map +1 -0
- package/lib/typescript/commonjs/card-wrapper/CardWrapper.d.ts +22 -0
- package/lib/typescript/commonjs/card-wrapper/CardWrapper.d.ts.map +1 -0
- package/lib/typescript/commonjs/conversations/Conversations.d.ts +37 -0
- package/lib/typescript/commonjs/conversations/Conversations.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +20 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/prompts/Prompts.d.ts +27 -0
- package/lib/typescript/commonjs/prompts/Prompts.d.ts.map +1 -0
- package/lib/typescript/commonjs/sender/Sender.d.ts +58 -0
- package/lib/typescript/commonjs/sender/Sender.d.ts.map +1 -0
- package/lib/typescript/commonjs/theme/tokens.d.ts +52 -0
- package/lib/typescript/commonjs/theme/tokens.d.ts.map +1 -0
- package/lib/typescript/commonjs/welcome/Welcome.d.ts +39 -0
- package/lib/typescript/commonjs/welcome/Welcome.d.ts.map +1 -0
- package/lib/typescript/module/bubble/Bubble.d.ts +29 -0
- package/lib/typescript/module/bubble/Bubble.d.ts.map +1 -0
- package/lib/typescript/module/bubble/BubbleList.d.ts +20 -0
- package/lib/typescript/module/bubble/BubbleList.d.ts.map +1 -0
- package/lib/typescript/module/card-wrapper/CardWrapper.d.ts +22 -0
- package/lib/typescript/module/card-wrapper/CardWrapper.d.ts.map +1 -0
- package/lib/typescript/module/conversations/Conversations.d.ts +37 -0
- package/lib/typescript/module/conversations/Conversations.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +20 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/prompts/Prompts.d.ts +27 -0
- package/lib/typescript/module/prompts/Prompts.d.ts.map +1 -0
- package/lib/typescript/module/sender/Sender.d.ts +58 -0
- package/lib/typescript/module/sender/Sender.d.ts.map +1 -0
- package/lib/typescript/module/theme/tokens.d.ts +52 -0
- package/lib/typescript/module/theme/tokens.d.ts.map +1 -0
- package/lib/typescript/module/welcome/Welcome.d.ts +39 -0
- package/lib/typescript/module/welcome/Welcome.d.ts.map +1 -0
- package/package.json +39 -8
- package/src/sender/Sender.tsx +2 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Welcome — 欢迎页
|
|
5
|
+
* 渐变背景 + 装饰性光晕 + 2x2 快捷入口卡片网格
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
|
|
10
|
+
import { chatTokens } from "../theme/tokens.js";
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
12
|
+
const Welcome = ({
|
|
13
|
+
title = '你好,我是小U',
|
|
14
|
+
subtitle = '智能助手,有什么可以帮你?',
|
|
15
|
+
quickStarts = [],
|
|
16
|
+
onQuickStart,
|
|
17
|
+
gradientColors = [chatTokens.colorBgWelcomeStart, chatTokens.colorBgWelcomeMid, chatTokens.colorBgWelcomeEnd],
|
|
18
|
+
style,
|
|
19
|
+
styles: semanticStyles,
|
|
20
|
+
testID = 'welcome',
|
|
21
|
+
renderIcon,
|
|
22
|
+
renderGradient
|
|
23
|
+
}) => {
|
|
24
|
+
const content = /*#__PURE__*/_jsxs(_Fragment, {
|
|
25
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
26
|
+
style: defaultStyles.glowTopRight
|
|
27
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
28
|
+
style: defaultStyles.glowBottomLeft
|
|
29
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
30
|
+
style: defaultStyles.content,
|
|
31
|
+
children: [renderIcon?.('sparkles', 48, chatTokens.colorPrimary), /*#__PURE__*/_jsx(Text, {
|
|
32
|
+
style: [defaultStyles.title, semanticStyles?.title],
|
|
33
|
+
children: title
|
|
34
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
35
|
+
style: [defaultStyles.subtitle, semanticStyles?.subtitle],
|
|
36
|
+
children: subtitle
|
|
37
|
+
}), quickStarts.length > 0 && /*#__PURE__*/_jsx(View, {
|
|
38
|
+
style: defaultStyles.grid,
|
|
39
|
+
children: quickStarts.map((item, index) => /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
40
|
+
style: [defaultStyles.card, semanticStyles?.card],
|
|
41
|
+
onPress: () => onQuickStart?.(item.key),
|
|
42
|
+
activeOpacity: 0.7,
|
|
43
|
+
testID: `${testID}-quick-${index}`,
|
|
44
|
+
children: [renderIcon?.(item.icon, 24, chatTokens.colorPrimary), /*#__PURE__*/_jsx(Text, {
|
|
45
|
+
style: [defaultStyles.cardTitle, semanticStyles?.cardTitle],
|
|
46
|
+
children: item.title
|
|
47
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
48
|
+
style: [defaultStyles.cardDescription, semanticStyles?.cardDescription],
|
|
49
|
+
children: item.description
|
|
50
|
+
})]
|
|
51
|
+
}, item.key))
|
|
52
|
+
})]
|
|
53
|
+
})]
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// 如果提供了 renderGradient,使用自定义渐变
|
|
57
|
+
if (renderGradient) {
|
|
58
|
+
return renderGradient({
|
|
59
|
+
colors: gradientColors,
|
|
60
|
+
children: content,
|
|
61
|
+
style: {
|
|
62
|
+
...defaultStyles.container,
|
|
63
|
+
...semanticStyles?.root,
|
|
64
|
+
...style
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 无渐变 fallback(纯色背景)
|
|
70
|
+
return /*#__PURE__*/_jsx(View, {
|
|
71
|
+
style: [defaultStyles.container, {
|
|
72
|
+
backgroundColor: gradientColors[0]
|
|
73
|
+
}, semanticStyles?.root, style],
|
|
74
|
+
testID: testID,
|
|
75
|
+
children: content
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
const defaultStyles = StyleSheet.create({
|
|
79
|
+
container: {
|
|
80
|
+
flex: 1
|
|
81
|
+
},
|
|
82
|
+
content: {
|
|
83
|
+
flex: 1,
|
|
84
|
+
justifyContent: 'flex-start',
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
paddingHorizontal: 20,
|
|
87
|
+
paddingTop: 56
|
|
88
|
+
},
|
|
89
|
+
glowTopRight: {
|
|
90
|
+
position: 'absolute',
|
|
91
|
+
top: -40,
|
|
92
|
+
right: -40,
|
|
93
|
+
width: 200,
|
|
94
|
+
height: 200,
|
|
95
|
+
borderRadius: 100,
|
|
96
|
+
backgroundColor: 'rgba(235,110,0,0.06)'
|
|
97
|
+
},
|
|
98
|
+
glowBottomLeft: {
|
|
99
|
+
position: 'absolute',
|
|
100
|
+
bottom: 40,
|
|
101
|
+
left: -40,
|
|
102
|
+
width: 160,
|
|
103
|
+
height: 160,
|
|
104
|
+
borderRadius: 80,
|
|
105
|
+
backgroundColor: 'rgba(0,122,255,0.04)'
|
|
106
|
+
},
|
|
107
|
+
title: {
|
|
108
|
+
marginTop: 16,
|
|
109
|
+
fontSize: 20,
|
|
110
|
+
fontWeight: '600',
|
|
111
|
+
color: chatTokens.colorText
|
|
112
|
+
},
|
|
113
|
+
subtitle: {
|
|
114
|
+
marginTop: 6,
|
|
115
|
+
textAlign: 'center',
|
|
116
|
+
fontSize: 15,
|
|
117
|
+
color: chatTokens.colorTextSecondary
|
|
118
|
+
},
|
|
119
|
+
grid: {
|
|
120
|
+
marginTop: 32,
|
|
121
|
+
width: '100%',
|
|
122
|
+
flexDirection: 'row',
|
|
123
|
+
flexWrap: 'wrap',
|
|
124
|
+
justifyContent: 'space-between',
|
|
125
|
+
gap: 12
|
|
126
|
+
},
|
|
127
|
+
card: {
|
|
128
|
+
width: '47%',
|
|
129
|
+
backgroundColor: chatTokens.colorBgElevated,
|
|
130
|
+
borderRadius: 16,
|
|
131
|
+
padding: 16,
|
|
132
|
+
...chatTokens.shadowSm
|
|
133
|
+
},
|
|
134
|
+
cardTitle: {
|
|
135
|
+
marginTop: 8,
|
|
136
|
+
fontSize: 14,
|
|
137
|
+
fontWeight: '500',
|
|
138
|
+
color: chatTokens.colorText
|
|
139
|
+
},
|
|
140
|
+
cardDescription: {
|
|
141
|
+
marginTop: 2,
|
|
142
|
+
fontSize: 11,
|
|
143
|
+
color: chatTokens.colorTextSecondary
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
export default /*#__PURE__*/React.memo(Welcome);
|
|
147
|
+
//# sourceMappingURL=Welcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Text","TouchableOpacity","StyleSheet","chatTokens","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Welcome","title","subtitle","quickStarts","onQuickStart","gradientColors","colorBgWelcomeStart","colorBgWelcomeMid","colorBgWelcomeEnd","style","styles","semanticStyles","testID","renderIcon","renderGradient","content","children","defaultStyles","glowTopRight","glowBottomLeft","colorPrimary","length","grid","map","item","index","card","onPress","key","activeOpacity","icon","cardTitle","cardDescription","description","colors","container","root","backgroundColor","create","flex","justifyContent","alignItems","paddingHorizontal","paddingTop","position","top","right","width","height","borderRadius","bottom","left","marginTop","fontSize","fontWeight","color","colorText","textAlign","colorTextSecondary","flexDirection","flexWrap","gap","colorBgElevated","padding","shadowSm","memo"],"sourceRoot":"../../../src","sources":["welcome/Welcome.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Welcome 欢迎页
|
|
3
|
+
nav:
|
|
4
|
+
title: 组件
|
|
5
|
+
path: /components
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Welcome 欢迎页
|
|
9
|
+
|
|
10
|
+
聊天欢迎页组件,渐变背景 + 装饰性光晕 + 快捷入口卡片网格。
|
|
11
|
+
|
|
12
|
+
## 何时使用
|
|
13
|
+
|
|
14
|
+
- 聊天界面无消息时的空状态
|
|
15
|
+
- 引导用户通过快捷入口开始对话
|
|
16
|
+
|
|
17
|
+
## 代码示例
|
|
18
|
+
|
|
19
|
+
### 基本用法
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { Welcome } from '@unif/react-native-chat';
|
|
23
|
+
|
|
24
|
+
<Welcome
|
|
25
|
+
title="你好,我是小U"
|
|
26
|
+
subtitle="智能助手,有什么可以帮你?"
|
|
27
|
+
/>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 带快捷入口
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<Welcome
|
|
34
|
+
quickStarts={[
|
|
35
|
+
{ key: 'balance', icon: 'wallet', title: '余额查询', description: '查看账户余额' },
|
|
36
|
+
{ key: 'transfer', icon: 'send', title: '转账汇款', description: '快速转账' },
|
|
37
|
+
{ key: 'invest', icon: 'trending-up', title: '理财推荐', description: '个性化推荐' },
|
|
38
|
+
{ key: 'service', icon: 'chatbubbles', title: '客户服务', description: '在线客服' },
|
|
39
|
+
]}
|
|
40
|
+
onQuickStart={(key) => console.log('选择:', key)}
|
|
41
|
+
renderIcon={(name, size, color) => <Icon name={name} size={size} color={color} />}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 自定义渐变
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import LinearGradient from 'react-native-linear-gradient';
|
|
49
|
+
|
|
50
|
+
<Welcome
|
|
51
|
+
gradientColors={['#E8F4FD', '#F0E6FF', '#F5F5F5']}
|
|
52
|
+
renderGradient={({ colors, children, style }) => (
|
|
53
|
+
<LinearGradient colors={colors} style={style}>
|
|
54
|
+
{children}
|
|
55
|
+
</LinearGradient>
|
|
56
|
+
)}
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## API
|
|
61
|
+
|
|
62
|
+
### WelcomeProps
|
|
63
|
+
|
|
64
|
+
| 属性 | 说明 | 类型 | 默认值 |
|
|
65
|
+
|------|------|------|--------|
|
|
66
|
+
| title | 主标题 | `string` | `'你好,我是小U'` |
|
|
67
|
+
| subtitle | 副标题 | `string` | `'智能助手,有什么可以帮你?'` |
|
|
68
|
+
| quickStarts | 快捷入口配置 | `WelcomeQuickStart[]` | `[]` |
|
|
69
|
+
| onQuickStart | 快捷入口点击回调 | `(key: string) => void` | - |
|
|
70
|
+
| gradientColors | 背景渐变色 | `string[]` | 内置渐变 |
|
|
71
|
+
| style | 容器样式 | `ViewStyle` | - |
|
|
72
|
+
| styles | 语义样式 | `Partial<WelcomeSemanticStyles>` | - |
|
|
73
|
+
| testID | 测试标识 | `string` | `'welcome'` |
|
|
74
|
+
| renderIcon | 图标渲染函数 | `(name, size, color) => ReactNode` | - |
|
|
75
|
+
| renderGradient | 渐变背景渲染函数 | `(props) => ReactNode` | - |
|
|
76
|
+
|
|
77
|
+
### WelcomeQuickStart
|
|
78
|
+
|
|
79
|
+
| 属性 | 说明 | 类型 |
|
|
80
|
+
|------|------|------|
|
|
81
|
+
| key | 唯一标识 | `string` |
|
|
82
|
+
| icon | 图标名称 | `string` |
|
|
83
|
+
| title | 标题 | `string` |
|
|
84
|
+
| description | 描述 | `string` |
|
|
85
|
+
|
|
86
|
+
### WelcomeSemanticStyles
|
|
87
|
+
|
|
88
|
+
| 属性 | 说明 | 类型 |
|
|
89
|
+
|------|------|------|
|
|
90
|
+
| root | 外层容器 | `ViewStyle` |
|
|
91
|
+
| title | 标题文字 | `TextStyle` |
|
|
92
|
+
| subtitle | 副标题文字 | `TextStyle` |
|
|
93
|
+
| card | 快捷入口卡片 | `ViewStyle` |
|
|
94
|
+
| cardTitle | 卡片标题 | `TextStyle` |
|
|
95
|
+
| cardDescription | 卡片描述 | `TextStyle` |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bubble — 消息气泡容器
|
|
3
|
+
*
|
|
4
|
+
* 根据 role 自动镜像布局:
|
|
5
|
+
* - user → 右对齐浅色气泡 + 不对称圆角
|
|
6
|
+
* - assistant → 左侧 Avatar + 名称 + 内容
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { type ViewStyle, type TextStyle } from 'react-native';
|
|
10
|
+
export interface BubbleSemanticStyles {
|
|
11
|
+
root?: ViewStyle;
|
|
12
|
+
avatar?: ViewStyle;
|
|
13
|
+
name?: TextStyle;
|
|
14
|
+
content?: ViewStyle;
|
|
15
|
+
footer?: ViewStyle;
|
|
16
|
+
}
|
|
17
|
+
export interface BubbleProps {
|
|
18
|
+
role: 'user' | 'assistant' | 'system';
|
|
19
|
+
avatar?: React.ReactNode;
|
|
20
|
+
name?: string;
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
footer?: React.ReactNode;
|
|
23
|
+
style?: ViewStyle;
|
|
24
|
+
styles?: Partial<BubbleSemanticStyles>;
|
|
25
|
+
testID?: string;
|
|
26
|
+
}
|
|
27
|
+
declare const _default: React.NamedExoticComponent<BubbleProps>;
|
|
28
|
+
export default _default;
|
|
29
|
+
//# sourceMappingURL=Bubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bubble.d.ts","sourceRoot":"","sources":["../../../../src/bubble/Bubble.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AA4HD,wBAAkC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bubble.List — 消息列表
|
|
3
|
+
* 封装 inverted FlatList,自动滚动到底部
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { type ViewStyle } from 'react-native';
|
|
7
|
+
export interface BubbleListProps<T = unknown> {
|
|
8
|
+
items: T[];
|
|
9
|
+
renderBubble: (item: T) => React.ReactNode;
|
|
10
|
+
keyExtractor?: (item: T) => string;
|
|
11
|
+
onEndReached?: () => void;
|
|
12
|
+
header?: React.ReactNode;
|
|
13
|
+
footer?: React.ReactNode;
|
|
14
|
+
style?: ViewStyle;
|
|
15
|
+
testID?: string;
|
|
16
|
+
}
|
|
17
|
+
declare function BubbleListInner<T>(props: BubbleListProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare const BubbleList: typeof BubbleListInner;
|
|
19
|
+
export default BubbleList;
|
|
20
|
+
//# sourceMappingURL=BubbleList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BubbleList.d.ts","sourceRoot":"","sources":["../../../../src/bubble/BubbleList.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAA6B,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAExE,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iBAAS,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,2CAiDpD;AAcD,QAAA,MAAM,UAAU,EAAkC,OAAO,eAAe,CAAC;AACzE,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CardWrapper — 通用卡片路由容器
|
|
3
|
+
* registry 通过 props 注入(而非全局 import),更灵活
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { type ViewStyle } from 'react-native';
|
|
7
|
+
export type CardComponentType = React.ComponentType<{
|
|
8
|
+
data: Record<string, unknown>;
|
|
9
|
+
actions: string[];
|
|
10
|
+
}>;
|
|
11
|
+
export interface CardWrapperProps {
|
|
12
|
+
cardType: string;
|
|
13
|
+
data: Record<string, unknown>;
|
|
14
|
+
actions: string[];
|
|
15
|
+
registry?: Record<string, CardComponentType>;
|
|
16
|
+
fallback?: React.ReactNode;
|
|
17
|
+
style?: ViewStyle;
|
|
18
|
+
testID?: string;
|
|
19
|
+
}
|
|
20
|
+
declare const _default: React.NamedExoticComponent<CardWrapperProps>;
|
|
21
|
+
export default _default;
|
|
22
|
+
//# sourceMappingURL=CardWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardWrapper.d.ts","sourceRoot":"","sources":["../../../../src/card-wrapper/CardWrapper.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAyB,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAGpE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AAqDD,wBAAuC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversations — 会话列表
|
|
3
|
+
*
|
|
4
|
+
* SectionList + 日期分组(今天/昨天/更早)
|
|
5
|
+
* 基于 ListItem 模式渲染
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { type ViewStyle, type TextStyle } from 'react-native';
|
|
9
|
+
export interface ConversationItem {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
lastMessage?: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
messageCount?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ConversationsSemanticStyles {
|
|
17
|
+
root?: ViewStyle;
|
|
18
|
+
newButton?: ViewStyle;
|
|
19
|
+
sectionHeader?: TextStyle;
|
|
20
|
+
item?: ViewStyle;
|
|
21
|
+
itemActive?: ViewStyle;
|
|
22
|
+
}
|
|
23
|
+
export interface ConversationsProps {
|
|
24
|
+
items: ConversationItem[];
|
|
25
|
+
activeId?: string;
|
|
26
|
+
onSelect: (id: string) => void;
|
|
27
|
+
onDelete?: (id: string) => void;
|
|
28
|
+
onNew?: () => void;
|
|
29
|
+
groupByDate?: boolean;
|
|
30
|
+
header?: React.ReactNode;
|
|
31
|
+
style?: ViewStyle;
|
|
32
|
+
styles?: Partial<ConversationsSemanticStyles>;
|
|
33
|
+
testID?: string;
|
|
34
|
+
}
|
|
35
|
+
declare const _default: React.NamedExoticComponent<ConversationsProps>;
|
|
36
|
+
export default _default;
|
|
37
|
+
//# sourceMappingURL=Conversations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Conversations.d.ts","sourceRoot":"","sources":["../../../../src/conversations/Conversations.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AA4LD,wBAAyC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @unif/react-native-chat
|
|
3
|
+
* AI 聊天 UI 组件库 — Bubble、Sender、Conversations、Prompts、Welcome、CardWrapper
|
|
4
|
+
*/
|
|
5
|
+
export { default as Bubble } from './bubble/Bubble';
|
|
6
|
+
export type { BubbleProps, BubbleSemanticStyles } from './bubble/Bubble';
|
|
7
|
+
export { default as BubbleList } from './bubble/BubbleList';
|
|
8
|
+
export type { BubbleListProps } from './bubble/BubbleList';
|
|
9
|
+
export { default as Sender } from './sender/Sender';
|
|
10
|
+
export type { SenderProps, SenderSemanticStyles, ActionSheetOption } from './sender/Sender';
|
|
11
|
+
export { default as Conversations } from './conversations/Conversations';
|
|
12
|
+
export type { ConversationsProps, ConversationsSemanticStyles, ConversationItem, } from './conversations/Conversations';
|
|
13
|
+
export { default as Prompts } from './prompts/Prompts';
|
|
14
|
+
export type { PromptsProps, PromptsSemanticStyles, PromptItem } from './prompts/Prompts';
|
|
15
|
+
export { default as Welcome } from './welcome/Welcome';
|
|
16
|
+
export type { WelcomeProps, WelcomeSemanticStyles, WelcomeQuickStart, } from './welcome/Welcome';
|
|
17
|
+
export { default as CardWrapper } from './card-wrapper/CardWrapper';
|
|
18
|
+
export type { CardWrapperProps, CardComponentType } from './card-wrapper/CardWrapper';
|
|
19
|
+
export { chatTokens } from './theme/tokens';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAC,OAAO,IAAI,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAC,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAG1F,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,+BAA+B,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAC,OAAO,IAAI,OAAO,EAAC,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAC,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAGvF,OAAO,EAAC,OAAO,IAAI,OAAO,EAAC,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAC,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAGpF,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts — 建议提示
|
|
3
|
+
* 水平 ScrollView + Chip 列表
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { type ViewStyle, type TextStyle } from 'react-native';
|
|
7
|
+
export interface PromptItem {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PromptsSemanticStyles {
|
|
12
|
+
root?: ViewStyle;
|
|
13
|
+
chip?: ViewStyle;
|
|
14
|
+
chipText?: TextStyle;
|
|
15
|
+
}
|
|
16
|
+
export interface PromptsProps {
|
|
17
|
+
items: PromptItem[];
|
|
18
|
+
onSelect: (item: PromptItem) => void;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
wrap?: boolean;
|
|
21
|
+
style?: ViewStyle;
|
|
22
|
+
styles?: Partial<PromptsSemanticStyles>;
|
|
23
|
+
testID?: string;
|
|
24
|
+
}
|
|
25
|
+
declare const _default: React.NamedExoticComponent<PromptsProps>;
|
|
26
|
+
export default _default;
|
|
27
|
+
//# sourceMappingURL=Prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Prompts.d.ts","sourceRoot":"","sources":["../../../../src/prompts/Prompts.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAML,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AAsFD,wBAAmC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sender — 输入发送器
|
|
3
|
+
*
|
|
4
|
+
* 完整状态机:collapsed → expanded → recording
|
|
5
|
+
* 基于 UI 库 Input + ActionSheet + WaveAnimation + Button 构建
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { type ViewStyle } from 'react-native';
|
|
9
|
+
export interface ActionSheetOption {
|
|
10
|
+
key: string;
|
|
11
|
+
label: string;
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
export interface SenderSemanticStyles {
|
|
15
|
+
root?: ViewStyle;
|
|
16
|
+
collapsed?: ViewStyle;
|
|
17
|
+
expanded?: ViewStyle;
|
|
18
|
+
recording?: ViewStyle;
|
|
19
|
+
toolbar?: ViewStyle;
|
|
20
|
+
}
|
|
21
|
+
export interface SenderProps {
|
|
22
|
+
onSend: (text: string) => void;
|
|
23
|
+
onStop?: () => void;
|
|
24
|
+
onVoiceSend?: (audioUri: string) => void;
|
|
25
|
+
isRequesting?: boolean;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
maxLength?: number;
|
|
28
|
+
voiceEnabled?: boolean;
|
|
29
|
+
actionsEnabled?: boolean;
|
|
30
|
+
actions?: ActionSheetOption[];
|
|
31
|
+
onActionSelect?: (key: string) => void;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
style?: ViewStyle;
|
|
34
|
+
styles?: Partial<SenderSemanticStyles>;
|
|
35
|
+
testID?: string;
|
|
36
|
+
renderInput?: (props: {
|
|
37
|
+
value: string;
|
|
38
|
+
onChangeText: (text: string) => void;
|
|
39
|
+
onSubmitEditing: () => void;
|
|
40
|
+
onBlur: () => void;
|
|
41
|
+
toolbar: React.ReactNode;
|
|
42
|
+
autoFocus: boolean;
|
|
43
|
+
maxLength: number;
|
|
44
|
+
}) => React.ReactNode;
|
|
45
|
+
renderActionSheet?: (props: {
|
|
46
|
+
visible: boolean;
|
|
47
|
+
onClose: () => void;
|
|
48
|
+
options: ActionSheetOption[];
|
|
49
|
+
onSelect: (key: string) => void;
|
|
50
|
+
}) => React.ReactNode;
|
|
51
|
+
renderWaveAnimation?: (props: {
|
|
52
|
+
active: boolean;
|
|
53
|
+
color: string;
|
|
54
|
+
}) => React.ReactNode;
|
|
55
|
+
}
|
|
56
|
+
declare const _default: React.NamedExoticComponent<SenderProps>;
|
|
57
|
+
export default _default;
|
|
58
|
+
//# sourceMappingURL=Sender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sender.d.ts","sourceRoot":"","sources":["../../../../src/sender/Sender.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,eAAe,EAAE,MAAM,IAAI,CAAC;QAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;QACzB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KACjC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC5B,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;;AAgXD,wBAAkC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat 专属 Design Tokens
|
|
3
|
+
* 仅定义 Chat 特有的 token,通用 token 从 @unif/react-native-ui 引用
|
|
4
|
+
*/
|
|
5
|
+
export declare const chatTokens: {
|
|
6
|
+
colorBgUserMsg: string;
|
|
7
|
+
colorBgAssistantMsg: string;
|
|
8
|
+
colorBgWelcomeStart: string;
|
|
9
|
+
colorBgWelcomeMid: string;
|
|
10
|
+
colorBgWelcomeEnd: string;
|
|
11
|
+
colorRecording: string;
|
|
12
|
+
colorPrimary: string;
|
|
13
|
+
colorError: string;
|
|
14
|
+
colorText: string;
|
|
15
|
+
colorTextSecondary: string;
|
|
16
|
+
colorTextPlaceholder: string;
|
|
17
|
+
colorBgElevated: string;
|
|
18
|
+
colorBorder: string;
|
|
19
|
+
colorLink: string;
|
|
20
|
+
spaceXs: number;
|
|
21
|
+
spaceSm: number;
|
|
22
|
+
space: number;
|
|
23
|
+
spaceMd: number;
|
|
24
|
+
fontSize: number;
|
|
25
|
+
fontSizeSm: number;
|
|
26
|
+
lineHeight: number;
|
|
27
|
+
radiusSm: number;
|
|
28
|
+
radiusMd: number;
|
|
29
|
+
radiusXl: number;
|
|
30
|
+
radiusFull: number;
|
|
31
|
+
shadow: {
|
|
32
|
+
shadowColor: string;
|
|
33
|
+
shadowOffset: {
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
};
|
|
37
|
+
shadowOpacity: number;
|
|
38
|
+
shadowRadius: number;
|
|
39
|
+
elevation: number;
|
|
40
|
+
};
|
|
41
|
+
shadowSm: {
|
|
42
|
+
shadowColor: string;
|
|
43
|
+
shadowOffset: {
|
|
44
|
+
width: number;
|
|
45
|
+
height: number;
|
|
46
|
+
};
|
|
47
|
+
shadowOpacity: number;
|
|
48
|
+
shadowRadius: number;
|
|
49
|
+
elevation: number;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../src/theme/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDtB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welcome — 欢迎页
|
|
3
|
+
* 渐变背景 + 装饰性光晕 + 2x2 快捷入口卡片网格
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { type ViewStyle, type TextStyle } from 'react-native';
|
|
7
|
+
export interface WelcomeQuickStart {
|
|
8
|
+
key: string;
|
|
9
|
+
icon: string;
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
export interface WelcomeSemanticStyles {
|
|
14
|
+
root?: ViewStyle;
|
|
15
|
+
title?: TextStyle;
|
|
16
|
+
subtitle?: TextStyle;
|
|
17
|
+
card?: ViewStyle;
|
|
18
|
+
cardTitle?: TextStyle;
|
|
19
|
+
cardDescription?: TextStyle;
|
|
20
|
+
}
|
|
21
|
+
export interface WelcomeProps {
|
|
22
|
+
title?: string;
|
|
23
|
+
subtitle?: string;
|
|
24
|
+
quickStarts?: WelcomeQuickStart[];
|
|
25
|
+
onQuickStart?: (key: string) => void;
|
|
26
|
+
gradientColors?: string[];
|
|
27
|
+
style?: ViewStyle;
|
|
28
|
+
styles?: Partial<WelcomeSemanticStyles>;
|
|
29
|
+
testID?: string;
|
|
30
|
+
renderIcon?: (name: string, size: number, color: string) => React.ReactNode;
|
|
31
|
+
renderGradient?: (props: {
|
|
32
|
+
colors: string[];
|
|
33
|
+
children: React.ReactNode;
|
|
34
|
+
style: ViewStyle;
|
|
35
|
+
}) => React.ReactNode;
|
|
36
|
+
}
|
|
37
|
+
declare const _default: React.NamedExoticComponent<WelcomeProps>;
|
|
38
|
+
export default _default;
|
|
39
|
+
//# sourceMappingURL=Welcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Welcome.d.ts","sourceRoot":"","sources":["../../../../src/welcome/Welcome.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;QAC1B,KAAK,EAAE,SAAS,CAAC;KAClB,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;;AAgKD,wBAAmC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bubble — 消息气泡容器
|
|
3
|
+
*
|
|
4
|
+
* 根据 role 自动镜像布局:
|
|
5
|
+
* - user → 右对齐浅色气泡 + 不对称圆角
|
|
6
|
+
* - assistant → 左侧 Avatar + 名称 + 内容
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { type ViewStyle, type TextStyle } from 'react-native';
|
|
10
|
+
export interface BubbleSemanticStyles {
|
|
11
|
+
root?: ViewStyle;
|
|
12
|
+
avatar?: ViewStyle;
|
|
13
|
+
name?: TextStyle;
|
|
14
|
+
content?: ViewStyle;
|
|
15
|
+
footer?: ViewStyle;
|
|
16
|
+
}
|
|
17
|
+
export interface BubbleProps {
|
|
18
|
+
role: 'user' | 'assistant' | 'system';
|
|
19
|
+
avatar?: React.ReactNode;
|
|
20
|
+
name?: string;
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
footer?: React.ReactNode;
|
|
23
|
+
style?: ViewStyle;
|
|
24
|
+
styles?: Partial<BubbleSemanticStyles>;
|
|
25
|
+
testID?: string;
|
|
26
|
+
}
|
|
27
|
+
declare const _default: React.NamedExoticComponent<BubbleProps>;
|
|
28
|
+
export default _default;
|
|
29
|
+
//# sourceMappingURL=Bubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bubble.d.ts","sourceRoot":"","sources":["../../../../src/bubble/Bubble.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AA4HD,wBAAkC"}
|