@unif/react-native-chat 0.1.1 → 0.2.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.
Files changed (97) hide show
  1. package/lib/commonjs/bubble/Bubble.js +131 -0
  2. package/lib/commonjs/bubble/Bubble.js.map +1 -0
  3. package/lib/commonjs/bubble/BubbleList.js +73 -0
  4. package/lib/commonjs/bubble/BubbleList.js.map +1 -0
  5. package/lib/commonjs/bubble/index.md +111 -0
  6. package/lib/commonjs/card-wrapper/CardWrapper.js +65 -0
  7. package/lib/commonjs/card-wrapper/CardWrapper.js.map +1 -0
  8. package/lib/commonjs/card-wrapper/index.md +78 -0
  9. package/lib/commonjs/conversations/Conversations.js +184 -0
  10. package/lib/commonjs/conversations/Conversations.js.map +1 -0
  11. package/lib/commonjs/conversations/index.md +90 -0
  12. package/lib/commonjs/index.js +69 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/package.json +1 -0
  15. package/lib/commonjs/prompts/Prompts.js +87 -0
  16. package/lib/commonjs/prompts/Prompts.js.map +1 -0
  17. package/lib/commonjs/prompts/index.md +81 -0
  18. package/lib/commonjs/sender/Sender.js +352 -0
  19. package/lib/commonjs/sender/Sender.js.map +1 -0
  20. package/lib/commonjs/sender/index.md +131 -0
  21. package/lib/commonjs/theme/tokens.js +77 -0
  22. package/lib/commonjs/theme/tokens.js.map +1 -0
  23. package/lib/commonjs/types/react-native-vector-icons.d.js +2 -0
  24. package/lib/commonjs/types/react-native-vector-icons.d.js.map +1 -0
  25. package/lib/commonjs/welcome/Welcome.js +152 -0
  26. package/lib/commonjs/welcome/Welcome.js.map +1 -0
  27. package/lib/commonjs/welcome/index.md +95 -0
  28. package/lib/module/bubble/Bubble.js +126 -0
  29. package/lib/module/bubble/Bubble.js.map +1 -0
  30. package/lib/module/bubble/BubbleList.js +68 -0
  31. package/lib/module/bubble/BubbleList.js.map +1 -0
  32. package/lib/module/bubble/index.md +111 -0
  33. package/lib/module/card-wrapper/CardWrapper.js +60 -0
  34. package/lib/module/card-wrapper/CardWrapper.js.map +1 -0
  35. package/lib/module/card-wrapper/index.md +78 -0
  36. package/lib/module/conversations/Conversations.js +179 -0
  37. package/lib/module/conversations/Conversations.js.map +1 -0
  38. package/lib/module/conversations/index.md +90 -0
  39. package/lib/module/index.js +23 -0
  40. package/lib/module/index.js.map +1 -0
  41. package/lib/module/package.json +1 -0
  42. package/lib/module/prompts/Prompts.js +82 -0
  43. package/lib/module/prompts/Prompts.js.map +1 -0
  44. package/lib/module/prompts/index.md +81 -0
  45. package/lib/module/sender/Sender.js +346 -0
  46. package/lib/module/sender/Sender.js.map +1 -0
  47. package/lib/module/sender/index.md +131 -0
  48. package/lib/module/theme/tokens.js +72 -0
  49. package/lib/module/theme/tokens.js.map +1 -0
  50. package/lib/module/types/react-native-vector-icons.d.js +2 -0
  51. package/lib/module/types/react-native-vector-icons.d.js.map +1 -0
  52. package/lib/module/welcome/Welcome.js +147 -0
  53. package/lib/module/welcome/Welcome.js.map +1 -0
  54. package/lib/module/welcome/index.md +95 -0
  55. package/lib/typescript/commonjs/bubble/Bubble.d.ts +29 -0
  56. package/lib/typescript/commonjs/bubble/Bubble.d.ts.map +1 -0
  57. package/lib/typescript/commonjs/bubble/BubbleList.d.ts +20 -0
  58. package/lib/typescript/commonjs/bubble/BubbleList.d.ts.map +1 -0
  59. package/lib/typescript/commonjs/card-wrapper/CardWrapper.d.ts +22 -0
  60. package/lib/typescript/commonjs/card-wrapper/CardWrapper.d.ts.map +1 -0
  61. package/lib/typescript/commonjs/conversations/Conversations.d.ts +37 -0
  62. package/lib/typescript/commonjs/conversations/Conversations.d.ts.map +1 -0
  63. package/lib/typescript/commonjs/index.d.ts +20 -0
  64. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/package.json +1 -0
  66. package/lib/typescript/commonjs/prompts/Prompts.d.ts +27 -0
  67. package/lib/typescript/commonjs/prompts/Prompts.d.ts.map +1 -0
  68. package/lib/typescript/commonjs/sender/Sender.d.ts +58 -0
  69. package/lib/typescript/commonjs/sender/Sender.d.ts.map +1 -0
  70. package/lib/typescript/commonjs/theme/tokens.d.ts +57 -0
  71. package/lib/typescript/commonjs/theme/tokens.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/welcome/Welcome.d.ts +39 -0
  73. package/lib/typescript/commonjs/welcome/Welcome.d.ts.map +1 -0
  74. package/lib/typescript/module/bubble/Bubble.d.ts +29 -0
  75. package/lib/typescript/module/bubble/Bubble.d.ts.map +1 -0
  76. package/lib/typescript/module/bubble/BubbleList.d.ts +20 -0
  77. package/lib/typescript/module/bubble/BubbleList.d.ts.map +1 -0
  78. package/lib/typescript/module/card-wrapper/CardWrapper.d.ts +22 -0
  79. package/lib/typescript/module/card-wrapper/CardWrapper.d.ts.map +1 -0
  80. package/lib/typescript/module/conversations/Conversations.d.ts +37 -0
  81. package/lib/typescript/module/conversations/Conversations.d.ts.map +1 -0
  82. package/lib/typescript/module/index.d.ts +20 -0
  83. package/lib/typescript/module/index.d.ts.map +1 -0
  84. package/lib/typescript/module/package.json +1 -0
  85. package/lib/typescript/module/prompts/Prompts.d.ts +27 -0
  86. package/lib/typescript/module/prompts/Prompts.d.ts.map +1 -0
  87. package/lib/typescript/module/sender/Sender.d.ts +58 -0
  88. package/lib/typescript/module/sender/Sender.d.ts.map +1 -0
  89. package/lib/typescript/module/theme/tokens.d.ts +57 -0
  90. package/lib/typescript/module/theme/tokens.d.ts.map +1 -0
  91. package/lib/typescript/module/welcome/Welcome.d.ts +39 -0
  92. package/lib/typescript/module/welcome/Welcome.d.ts.map +1 -0
  93. package/package.json +41 -9
  94. package/src/index.tsx +24 -13
  95. package/src/sender/Sender.tsx +46 -38
  96. package/src/theme/tokens.ts +14 -2
  97. package/src/types/react-native-vector-icons.d.ts +12 -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, configure } 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,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,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,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,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;;AAqXD,wBAAkC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Chat 专属 Design Tokens
3
+ * 仅定义 Chat 特有的 token,通用 token 从 @unif/react-native-ui 引用
4
+ */
5
+ interface ChatThemeConfig {
6
+ primaryColor?: string;
7
+ }
8
+ export declare function configure(options: ChatThemeConfig): void;
9
+ export declare const chatTokens: {
10
+ colorBgUserMsg: string;
11
+ colorBgAssistantMsg: string;
12
+ colorBgWelcomeStart: string;
13
+ colorBgWelcomeMid: string;
14
+ colorBgWelcomeEnd: string;
15
+ colorRecording: string;
16
+ readonly colorPrimary: string;
17
+ colorError: string;
18
+ colorText: string;
19
+ colorTextSecondary: string;
20
+ colorTextPlaceholder: string;
21
+ colorBgElevated: string;
22
+ colorBorder: string;
23
+ colorLink: string;
24
+ spaceXs: number;
25
+ spaceSm: number;
26
+ space: number;
27
+ spaceMd: number;
28
+ fontSize: number;
29
+ fontSizeSm: number;
30
+ lineHeight: number;
31
+ radiusSm: number;
32
+ radiusMd: number;
33
+ radiusXl: number;
34
+ radiusFull: number;
35
+ shadow: {
36
+ shadowColor: string;
37
+ shadowOffset: {
38
+ width: number;
39
+ height: number;
40
+ };
41
+ shadowOpacity: number;
42
+ shadowRadius: number;
43
+ elevation: number;
44
+ };
45
+ shadowSm: {
46
+ shadowColor: string;
47
+ shadowOffset: {
48
+ width: number;
49
+ height: number;
50
+ };
51
+ shadowOpacity: number;
52
+ shadowRadius: number;
53
+ elevation: number;
54
+ };
55
+ };
56
+ export {};
57
+ //# 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,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAExD;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDtB,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"}