@volkansuner/aichat-react-native 0.1.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 (203) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +528 -0
  3. package/dist/AIChatSDK.d.ts +75 -0
  4. package/dist/AIChatSDK.d.ts.map +1 -0
  5. package/dist/AIChatSDK.js +357 -0
  6. package/dist/AIChatSDK.js.map +1 -0
  7. package/dist/components/AIChatProvider.d.ts +25 -0
  8. package/dist/components/AIChatProvider.d.ts.map +1 -0
  9. package/dist/components/AIChatProvider.js +93 -0
  10. package/dist/components/AIChatProvider.js.map +1 -0
  11. package/dist/components/AIChatWidget.d.ts +62 -0
  12. package/dist/components/AIChatWidget.d.ts.map +1 -0
  13. package/dist/components/AIChatWidget.handlers.d.ts +15 -0
  14. package/dist/components/AIChatWidget.handlers.d.ts.map +1 -0
  15. package/dist/components/AIChatWidget.handlers.js +180 -0
  16. package/dist/components/AIChatWidget.handlers.js.map +1 -0
  17. package/dist/components/AIChatWidget.js +403 -0
  18. package/dist/components/AIChatWidget.js.map +1 -0
  19. package/dist/components/AIChatWidget.styles.d.ts +17 -0
  20. package/dist/components/AIChatWidget.styles.d.ts.map +1 -0
  21. package/dist/components/AIChatWidget.styles.js +68 -0
  22. package/dist/components/AIChatWidget.styles.js.map +1 -0
  23. package/dist/components/AIChatWidget.types.d.ts +250 -0
  24. package/dist/components/AIChatWidget.types.d.ts.map +1 -0
  25. package/dist/components/AIChatWidget.types.js +3 -0
  26. package/dist/components/AIChatWidget.types.js.map +1 -0
  27. package/dist/components/AIChatWidget.utils.d.ts +12 -0
  28. package/dist/components/AIChatWidget.utils.d.ts.map +1 -0
  29. package/dist/components/AIChatWidget.utils.js +109 -0
  30. package/dist/components/AIChatWidget.utils.js.map +1 -0
  31. package/dist/components/ConfigError.d.ts +33 -0
  32. package/dist/components/ConfigError.d.ts.map +1 -0
  33. package/dist/components/ConfigError.js +195 -0
  34. package/dist/components/ConfigError.js.map +1 -0
  35. package/dist/components/FloatingButton.d.ts +12 -0
  36. package/dist/components/FloatingButton.d.ts.map +1 -0
  37. package/dist/components/FloatingButton.js +163 -0
  38. package/dist/components/FloatingButton.js.map +1 -0
  39. package/dist/components/InputArea.d.ts +58 -0
  40. package/dist/components/InputArea.d.ts.map +1 -0
  41. package/dist/components/InputArea.js +135 -0
  42. package/dist/components/InputArea.js.map +1 -0
  43. package/dist/components/MarkdownText.d.ts +16 -0
  44. package/dist/components/MarkdownText.d.ts.map +1 -0
  45. package/dist/components/MarkdownText.js +263 -0
  46. package/dist/components/MarkdownText.js.map +1 -0
  47. package/dist/components/MessageBubble.d.ts +101 -0
  48. package/dist/components/MessageBubble.d.ts.map +1 -0
  49. package/dist/components/MessageBubble.js +377 -0
  50. package/dist/components/MessageBubble.js.map +1 -0
  51. package/dist/components/NavigationSuggestion.d.ts +13 -0
  52. package/dist/components/NavigationSuggestion.d.ts.map +1 -0
  53. package/dist/components/NavigationSuggestion.js +117 -0
  54. package/dist/components/NavigationSuggestion.js.map +1 -0
  55. package/dist/components/QuickReplies.d.ts +15 -0
  56. package/dist/components/QuickReplies.d.ts.map +1 -0
  57. package/dist/components/QuickReplies.js +49 -0
  58. package/dist/components/QuickReplies.js.map +1 -0
  59. package/dist/components/TemplateRenderer.d.ts +17 -0
  60. package/dist/components/TemplateRenderer.d.ts.map +1 -0
  61. package/dist/components/TemplateRenderer.js +397 -0
  62. package/dist/components/TemplateRenderer.js.map +1 -0
  63. package/dist/components/TypingIndicator.d.ts +29 -0
  64. package/dist/components/TypingIndicator.d.ts.map +1 -0
  65. package/dist/components/TypingIndicator.js +110 -0
  66. package/dist/components/TypingIndicator.js.map +1 -0
  67. package/dist/components/defaults/DefaultCard.d.ts +15 -0
  68. package/dist/components/defaults/DefaultCard.d.ts.map +1 -0
  69. package/dist/components/defaults/DefaultCard.js +157 -0
  70. package/dist/components/defaults/DefaultCard.js.map +1 -0
  71. package/dist/components/defaults/DefaultDetail.d.ts +15 -0
  72. package/dist/components/defaults/DefaultDetail.d.ts.map +1 -0
  73. package/dist/components/defaults/DefaultDetail.js +139 -0
  74. package/dist/components/defaults/DefaultDetail.js.map +1 -0
  75. package/dist/components/defaults/DefaultList.d.ts +13 -0
  76. package/dist/components/defaults/DefaultList.d.ts.map +1 -0
  77. package/dist/components/defaults/DefaultList.js +99 -0
  78. package/dist/components/defaults/DefaultList.js.map +1 -0
  79. package/dist/components/defaults/DefaultTable.d.ts +15 -0
  80. package/dist/components/defaults/DefaultTable.d.ts.map +1 -0
  81. package/dist/components/defaults/DefaultTable.js +205 -0
  82. package/dist/components/defaults/DefaultTable.js.map +1 -0
  83. package/dist/components/defaults/index.d.ts +15 -0
  84. package/dist/components/defaults/index.d.ts.map +1 -0
  85. package/dist/components/defaults/index.js +26 -0
  86. package/dist/components/defaults/index.js.map +1 -0
  87. package/dist/components/index.d.ts +17 -0
  88. package/dist/components/index.d.ts.map +1 -0
  89. package/dist/components/index.js +33 -0
  90. package/dist/components/index.js.map +1 -0
  91. package/dist/constants.d.ts +41 -0
  92. package/dist/constants.d.ts.map +1 -0
  93. package/dist/constants.js +52 -0
  94. package/dist/constants.js.map +1 -0
  95. package/dist/hooks/useAIChatConfig.d.ts +61 -0
  96. package/dist/hooks/useAIChatConfig.d.ts.map +1 -0
  97. package/dist/hooks/useAIChatConfig.js +95 -0
  98. package/dist/hooks/useAIChatConfig.js.map +1 -0
  99. package/dist/hooks/useChatMessages.d.ts +27 -0
  100. package/dist/hooks/useChatMessages.d.ts.map +1 -0
  101. package/dist/hooks/useChatMessages.js +255 -0
  102. package/dist/hooks/useChatMessages.js.map +1 -0
  103. package/dist/hooks/useContextManager.d.ts +13 -0
  104. package/dist/hooks/useContextManager.d.ts.map +1 -0
  105. package/dist/hooks/useContextManager.js +42 -0
  106. package/dist/hooks/useContextManager.js.map +1 -0
  107. package/dist/hooks/useSDK.d.ts +18 -0
  108. package/dist/hooks/useSDK.d.ts.map +1 -0
  109. package/dist/hooks/useSDK.js +64 -0
  110. package/dist/hooks/useSDK.js.map +1 -0
  111. package/dist/index.d.ts +15 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +46 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/registry/TemplateRegistry.d.ts +48 -0
  116. package/dist/registry/TemplateRegistry.d.ts.map +1 -0
  117. package/dist/registry/TemplateRegistry.js +77 -0
  118. package/dist/registry/TemplateRegistry.js.map +1 -0
  119. package/dist/registry/index.d.ts +5 -0
  120. package/dist/registry/index.d.ts.map +1 -0
  121. package/dist/registry/index.js +9 -0
  122. package/dist/registry/index.js.map +1 -0
  123. package/dist/services/BackendService.d.ts +47 -0
  124. package/dist/services/BackendService.d.ts.map +1 -0
  125. package/dist/services/BackendService.js +362 -0
  126. package/dist/services/BackendService.js.map +1 -0
  127. package/dist/services/ConversationManager.d.ts +40 -0
  128. package/dist/services/ConversationManager.d.ts.map +1 -0
  129. package/dist/services/ConversationManager.js +95 -0
  130. package/dist/services/ConversationManager.js.map +1 -0
  131. package/dist/services/LocalAIClassifier.d.ts +32 -0
  132. package/dist/services/LocalAIClassifier.d.ts.map +1 -0
  133. package/dist/services/LocalAIClassifier.js +149 -0
  134. package/dist/services/LocalAIClassifier.js.map +1 -0
  135. package/dist/services/NavigationHandler.d.ts +30 -0
  136. package/dist/services/NavigationHandler.d.ts.map +1 -0
  137. package/dist/services/NavigationHandler.js +74 -0
  138. package/dist/services/NavigationHandler.js.map +1 -0
  139. package/dist/themes/dark.d.ts +6 -0
  140. package/dist/themes/dark.d.ts.map +1 -0
  141. package/dist/themes/dark.js +130 -0
  142. package/dist/themes/dark.js.map +1 -0
  143. package/dist/themes/index.d.ts +13 -0
  144. package/dist/themes/index.d.ts.map +1 -0
  145. package/dist/themes/index.js +34 -0
  146. package/dist/themes/index.js.map +1 -0
  147. package/dist/themes/light.d.ts +6 -0
  148. package/dist/themes/light.d.ts.map +1 -0
  149. package/dist/themes/light.js +130 -0
  150. package/dist/themes/light.js.map +1 -0
  151. package/dist/themes/types.d.ts +143 -0
  152. package/dist/themes/types.d.ts.map +1 -0
  153. package/dist/themes/types.js +6 -0
  154. package/dist/themes/types.js.map +1 -0
  155. package/dist/types/api.d.ts +118 -0
  156. package/dist/types/api.d.ts.map +1 -0
  157. package/dist/types/api.js +6 -0
  158. package/dist/types/api.js.map +1 -0
  159. package/dist/types/chat.d.ts +154 -0
  160. package/dist/types/chat.d.ts.map +1 -0
  161. package/dist/types/chat.js +6 -0
  162. package/dist/types/chat.js.map +1 -0
  163. package/dist/types/components.d.ts +69 -0
  164. package/dist/types/components.d.ts.map +1 -0
  165. package/dist/types/components.js +17 -0
  166. package/dist/types/components.js.map +1 -0
  167. package/dist/types/config.d.ts +122 -0
  168. package/dist/types/config.d.ts.map +1 -0
  169. package/dist/types/config.js +18 -0
  170. package/dist/types/config.js.map +1 -0
  171. package/dist/types/document.d.ts +108 -0
  172. package/dist/types/document.d.ts.map +1 -0
  173. package/dist/types/document.js +7 -0
  174. package/dist/types/document.js.map +1 -0
  175. package/dist/types/index.d.ts +14 -0
  176. package/dist/types/index.d.ts.map +1 -0
  177. package/dist/types/index.js +31 -0
  178. package/dist/types/index.js.map +1 -0
  179. package/dist/types/local-ai.d.ts +48 -0
  180. package/dist/types/local-ai.d.ts.map +1 -0
  181. package/dist/types/local-ai.js +17 -0
  182. package/dist/types/local-ai.js.map +1 -0
  183. package/dist/types/navigation.d.ts +89 -0
  184. package/dist/types/navigation.d.ts.map +1 -0
  185. package/dist/types/navigation.js +6 -0
  186. package/dist/types/navigation.js.map +1 -0
  187. package/dist/types/sdk.d.ts +47 -0
  188. package/dist/types/sdk.d.ts.map +1 -0
  189. package/dist/types/sdk.js +6 -0
  190. package/dist/types/sdk.js.map +1 -0
  191. package/dist/types/template.d.ts +220 -0
  192. package/dist/types/template.d.ts.map +1 -0
  193. package/dist/types/template.js +8 -0
  194. package/dist/types/template.js.map +1 -0
  195. package/dist/utils/configLoader.d.ts +69 -0
  196. package/dist/utils/configLoader.d.ts.map +1 -0
  197. package/dist/utils/configLoader.js +278 -0
  198. package/dist/utils/configLoader.js.map +1 -0
  199. package/dist/utils/deepMerge.d.ts +47 -0
  200. package/dist/utils/deepMerge.d.ts.map +1 -0
  201. package/dist/utils/deepMerge.js +71 -0
  202. package/dist/utils/deepMerge.js.map +1 -0
  203. package/package.json +65 -0
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfigError = ConfigError;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_native_1 = require("react-native");
9
+ const configLoader_1 = require("../utils/configLoader");
10
+ /**
11
+ * ConfigError Component
12
+ *
13
+ * Displays a helpful error screen when AIChatSDK configuration is missing.
14
+ * Shows setup instructions with CLI command and documentation link.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const configResult = useAIChatConfig({});
19
+ * if (!configResult.config) {
20
+ * return <ConfigError result={configResult} />;
21
+ * }
22
+ * ```
23
+ */
24
+ function ConfigError({ result, title, message }) {
25
+ const instructions = (0, configLoader_1.getSetupInstructions)(result.missing);
26
+ const handleOpenDocs = () => {
27
+ react_native_1.Linking.openURL('https://github.com/aichat/react-native-sdk#configuration');
28
+ };
29
+ return (<react_native_1.View style={styles.container}>
30
+ <react_native_1.ScrollView contentContainerStyle={styles.scrollContent}>
31
+ {/* Error Icon */}
32
+ <react_native_1.View style={styles.iconContainer}>
33
+ <react_native_1.Text style={styles.iconText}>⚙️</react_native_1.Text>
34
+ </react_native_1.View>
35
+
36
+ {/* Title */}
37
+ <react_native_1.Text style={styles.title}>
38
+ {title || 'Configuration Required'}
39
+ </react_native_1.Text>
40
+
41
+ {/* Message */}
42
+ <react_native_1.Text style={styles.message}>
43
+ {message || `AIChatSDK needs to be configured before use. Missing: ${result.missing.join(', ')}`}
44
+ </react_native_1.Text>
45
+
46
+ {/* Instructions */}
47
+ <react_native_1.View style={styles.instructionsContainer}>
48
+ <react_native_1.Text style={styles.instructionsTitle}>Setup Instructions:</react_native_1.Text>
49
+ <react_native_1.View style={styles.codeBlock}>
50
+ <react_native_1.Text style={styles.codeText}>{instructions}</react_native_1.Text>
51
+ </react_native_1.View>
52
+ </react_native_1.View>
53
+
54
+ {/* Quick Start Button */}
55
+ <react_native_1.View style={styles.commandContainer}>
56
+ <react_native_1.Text style={styles.commandLabel}>Quick Start:</react_native_1.Text>
57
+ <react_native_1.View style={styles.commandBox}>
58
+ <react_native_1.Text style={styles.commandText}>npx @aichat/cli init</react_native_1.Text>
59
+ </react_native_1.View>
60
+ </react_native_1.View>
61
+
62
+ {/* Documentation Link */}
63
+ <react_native_1.TouchableOpacity onPress={handleOpenDocs} style={styles.docsButton}>
64
+ <react_native_1.Text style={styles.docsButtonText}>📚 View Documentation</react_native_1.Text>
65
+ </react_native_1.TouchableOpacity>
66
+
67
+ {/* Debug Info (development only) */}
68
+ {__DEV__ && (<react_native_1.View style={styles.debugContainer}>
69
+ <react_native_1.Text style={styles.debugTitle}>Debug Info:</react_native_1.Text>
70
+ <react_native_1.Text style={styles.debugText}>
71
+ {JSON.stringify({
72
+ missing: result.missing,
73
+ sources: result.sources,
74
+ }, null, 2)}
75
+ </react_native_1.Text>
76
+ </react_native_1.View>)}
77
+ </react_native_1.ScrollView>
78
+ </react_native_1.View>);
79
+ }
80
+ const styles = react_native_1.StyleSheet.create({
81
+ container: {
82
+ flex: 1,
83
+ backgroundColor: '#f8f9fa',
84
+ },
85
+ scrollContent: {
86
+ flexGrow: 1,
87
+ alignItems: 'center',
88
+ justifyContent: 'center',
89
+ padding: 20,
90
+ },
91
+ iconContainer: {
92
+ marginBottom: 20,
93
+ },
94
+ iconText: {
95
+ fontSize: 64,
96
+ },
97
+ title: {
98
+ fontSize: 24,
99
+ fontWeight: '700',
100
+ color: '#1a1a1a',
101
+ marginBottom: 12,
102
+ textAlign: 'center',
103
+ },
104
+ message: {
105
+ fontSize: 16,
106
+ color: '#666',
107
+ marginBottom: 24,
108
+ textAlign: 'center',
109
+ lineHeight: 22,
110
+ paddingHorizontal: 20,
111
+ },
112
+ instructionsContainer: {
113
+ width: '100%',
114
+ maxWidth: 600,
115
+ marginBottom: 24,
116
+ },
117
+ instructionsTitle: {
118
+ fontSize: 16,
119
+ fontWeight: '600',
120
+ color: '#1a1a1a',
121
+ marginBottom: 12,
122
+ },
123
+ codeBlock: {
124
+ backgroundColor: '#2d2d2d',
125
+ borderRadius: 8,
126
+ padding: 16,
127
+ borderWidth: 1,
128
+ borderColor: '#404040',
129
+ },
130
+ codeText: {
131
+ fontFamily: 'Courier',
132
+ fontSize: 13,
133
+ color: '#e0e0e0',
134
+ lineHeight: 20,
135
+ },
136
+ commandContainer: {
137
+ width: '100%',
138
+ maxWidth: 600,
139
+ marginBottom: 24,
140
+ },
141
+ commandLabel: {
142
+ fontSize: 14,
143
+ fontWeight: '600',
144
+ color: '#1a1a1a',
145
+ marginBottom: 8,
146
+ },
147
+ commandBox: {
148
+ backgroundColor: '#007bff',
149
+ borderRadius: 8,
150
+ padding: 16,
151
+ alignItems: 'center',
152
+ },
153
+ commandText: {
154
+ fontFamily: 'Courier',
155
+ fontSize: 16,
156
+ color: '#ffffff',
157
+ fontWeight: '600',
158
+ },
159
+ docsButton: {
160
+ backgroundColor: '#ffffff',
161
+ borderRadius: 8,
162
+ paddingVertical: 12,
163
+ paddingHorizontal: 24,
164
+ borderWidth: 2,
165
+ borderColor: '#007bff',
166
+ marginBottom: 24,
167
+ },
168
+ docsButtonText: {
169
+ fontSize: 16,
170
+ color: '#007bff',
171
+ fontWeight: '600',
172
+ },
173
+ debugContainer: {
174
+ width: '100%',
175
+ maxWidth: 600,
176
+ backgroundColor: '#fff3cd',
177
+ borderRadius: 8,
178
+ padding: 16,
179
+ borderWidth: 1,
180
+ borderColor: '#ffc107',
181
+ },
182
+ debugTitle: {
183
+ fontSize: 14,
184
+ fontWeight: '600',
185
+ color: '#856404',
186
+ marginBottom: 8,
187
+ },
188
+ debugText: {
189
+ fontFamily: 'Courier',
190
+ fontSize: 12,
191
+ color: '#856404',
192
+ lineHeight: 18,
193
+ },
194
+ });
195
+ //# sourceMappingURL=ConfigError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigError.js","sourceRoot":"","sources":["../../src/components/ConfigError.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { Theme } from '../themes';
3
+ interface FloatingButtonProps {
4
+ isOpen: boolean;
5
+ onPress: () => void;
6
+ unreadCount?: number;
7
+ theme: Theme;
8
+ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
9
+ }
10
+ export declare function FloatingButton({ isOpen, onPress, unreadCount, theme, position, }: FloatingButtonProps): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=FloatingButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingButton.d.ts","sourceRoot":"","sources":["../../src/components/FloatingButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AASjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,UAAU,mBAAmB;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;CACtE;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,WAAe,EACf,KAAK,EACL,QAAyB,GAC1B,EAAE,mBAAmB,qBA6FrB"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FloatingButton = FloatingButton;
37
+ const react_1 = __importStar(require("react"));
38
+ const react_native_1 = require("react-native");
39
+ function FloatingButton({ isOpen, onPress, unreadCount = 0, theme, position = 'bottom-right', }) {
40
+ const rotateAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
41
+ const scaleAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(1)).current;
42
+ (0, react_1.useEffect)(() => {
43
+ // Rotate animation when opening/closing
44
+ react_native_1.Animated.timing(rotateAnim, {
45
+ toValue: isOpen ? 1 : 0,
46
+ duration: 300,
47
+ useNativeDriver: true,
48
+ }).start();
49
+ }, [isOpen, rotateAnim]);
50
+ const handlePress = () => {
51
+ // Scale animation on press
52
+ react_native_1.Animated.sequence([
53
+ react_native_1.Animated.timing(scaleAnim, {
54
+ toValue: 0.9,
55
+ duration: 100,
56
+ useNativeDriver: true,
57
+ }),
58
+ react_native_1.Animated.timing(scaleAnim, {
59
+ toValue: 1,
60
+ duration: 100,
61
+ useNativeDriver: true,
62
+ }),
63
+ ]).start();
64
+ onPress();
65
+ };
66
+ const rotation = rotateAnim.interpolate({
67
+ inputRange: [0, 1],
68
+ outputRange: ['0deg', '45deg'],
69
+ });
70
+ const positionStyle = getPositionStyle(position, theme);
71
+ return (<react_native_1.Animated.View style={[
72
+ styles.container,
73
+ positionStyle,
74
+ {
75
+ transform: [{ scale: scaleAnim }],
76
+ },
77
+ ]}>
78
+ <react_native_1.TouchableOpacity style={[
79
+ styles.button,
80
+ {
81
+ backgroundColor: theme.colors.primary,
82
+ ...react_native_1.Platform.select({
83
+ ios: {
84
+ shadowColor: '#000',
85
+ shadowOffset: { width: 0, height: 4 },
86
+ shadowOpacity: 0.3,
87
+ shadowRadius: 8,
88
+ },
89
+ android: {
90
+ elevation: 8,
91
+ },
92
+ }),
93
+ },
94
+ ]} onPress={handlePress} activeOpacity={0.8}>
95
+ <react_native_1.Animated.View style={{ transform: [{ rotate: rotation }] }}>
96
+ {isOpen ? (<react_native_1.Text style={styles.closeIcon}>✕</react_native_1.Text>) : (<react_native_1.Text style={styles.chatIcon}>💬</react_native_1.Text>)}
97
+ </react_native_1.Animated.View>
98
+
99
+ {/* Unread badge */}
100
+ {!isOpen && unreadCount > 0 && (<react_native_1.View style={[
101
+ styles.badge,
102
+ { backgroundColor: theme.colors.error || '#FF3B30' },
103
+ ]}>
104
+ <react_native_1.Text style={styles.badgeText}>
105
+ {unreadCount > 99 ? '99+' : unreadCount}
106
+ </react_native_1.Text>
107
+ </react_native_1.View>)}
108
+ </react_native_1.TouchableOpacity>
109
+ </react_native_1.Animated.View>);
110
+ }
111
+ function getPositionStyle(position, theme) {
112
+ const spacing = theme.spacing.lg;
113
+ switch (position) {
114
+ case 'bottom-right':
115
+ return { bottom: spacing, right: spacing };
116
+ case 'bottom-left':
117
+ return { bottom: spacing, left: spacing };
118
+ case 'top-right':
119
+ return { top: spacing, right: spacing };
120
+ case 'top-left':
121
+ return { top: spacing, left: spacing };
122
+ default:
123
+ return { bottom: spacing, right: spacing };
124
+ }
125
+ }
126
+ const styles = react_native_1.StyleSheet.create({
127
+ container: {
128
+ position: 'absolute',
129
+ zIndex: 9999,
130
+ },
131
+ button: {
132
+ width: 60,
133
+ height: 60,
134
+ borderRadius: 30,
135
+ justifyContent: 'center',
136
+ alignItems: 'center',
137
+ },
138
+ chatIcon: {
139
+ fontSize: 28,
140
+ },
141
+ closeIcon: {
142
+ fontSize: 28,
143
+ color: '#FFFFFF',
144
+ fontWeight: '300',
145
+ },
146
+ badge: {
147
+ position: 'absolute',
148
+ top: -4,
149
+ right: -4,
150
+ minWidth: 20,
151
+ height: 20,
152
+ borderRadius: 10,
153
+ justifyContent: 'center',
154
+ alignItems: 'center',
155
+ paddingHorizontal: 6,
156
+ },
157
+ badgeText: {
158
+ color: '#FFFFFF',
159
+ fontSize: 12,
160
+ fontWeight: '600',
161
+ },
162
+ });
163
+ //# sourceMappingURL=FloatingButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingButton.js","sourceRoot":"","sources":["../../src/components/FloatingButton.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import React from 'react';
2
+ import { Theme } from '../themes/types';
3
+ export interface InputAreaProps {
4
+ /**
5
+ * Theme configuration
6
+ */
7
+ theme: Theme;
8
+ /**
9
+ * Placeholder text
10
+ */
11
+ placeholder?: string;
12
+ /**
13
+ * Callback when send button is pressed
14
+ */
15
+ onSend: (message: string) => void;
16
+ /**
17
+ * Whether sending is in progress
18
+ */
19
+ isSending?: boolean;
20
+ /**
21
+ * Maximum character limit
22
+ */
23
+ maxLength?: number;
24
+ /**
25
+ * Disable input
26
+ */
27
+ disabled?: boolean;
28
+ /**
29
+ * Show character count
30
+ */
31
+ showCharacterCount?: boolean;
32
+ }
33
+ /**
34
+ * InputArea Component
35
+ *
36
+ * Text input area with send button for chat messages.
37
+ *
38
+ * Features:
39
+ * - Multi-line text input
40
+ * - Character limit with counter
41
+ * - Send button with loading state
42
+ * - Auto-disable when empty or sending
43
+ * - Theme support
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * <InputArea
48
+ * theme={lightTheme}
49
+ * placeholder="Type a message..."
50
+ * onSend={(msg) => handleSend(msg)}
51
+ * isSending={loading}
52
+ * maxLength={500}
53
+ * showCharacterCount
54
+ * />
55
+ * ```
56
+ */
57
+ export declare function InputArea({ theme, placeholder, onSend, isSending, maxLength, disabled, showCharacterCount, }: InputAreaProps): React.JSX.Element;
58
+ //# sourceMappingURL=InputArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../src/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAUxC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,WAAiC,EACjC,MAAM,EACN,SAAiB,EACjB,SAAe,EACf,QAAgB,EAChB,kBAA0B,GAC3B,EAAE,cAAc,qBAwGhB"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.InputArea = InputArea;
37
+ const react_1 = __importStar(require("react"));
38
+ const react_native_1 = require("react-native");
39
+ /**
40
+ * InputArea Component
41
+ *
42
+ * Text input area with send button for chat messages.
43
+ *
44
+ * Features:
45
+ * - Multi-line text input
46
+ * - Character limit with counter
47
+ * - Send button with loading state
48
+ * - Auto-disable when empty or sending
49
+ * - Theme support
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * <InputArea
54
+ * theme={lightTheme}
55
+ * placeholder="Type a message..."
56
+ * onSend={(msg) => handleSend(msg)}
57
+ * isSending={loading}
58
+ * maxLength={500}
59
+ * showCharacterCount
60
+ * />
61
+ * ```
62
+ */
63
+ function InputArea({ theme, placeholder = 'Type a message...', onSend, isSending = false, maxLength = 500, disabled = false, showCharacterCount = false, }) {
64
+ const [text, setText] = (0, react_1.useState)('');
65
+ const handleSend = () => {
66
+ const trimmedText = text.trim();
67
+ if (!trimmedText || isSending || disabled)
68
+ return;
69
+ onSend(trimmedText);
70
+ setText('');
71
+ };
72
+ const canSend = text.trim().length > 0 && !isSending && !disabled;
73
+ const containerStyle = {
74
+ flexDirection: 'row',
75
+ alignItems: 'flex-end',
76
+ paddingHorizontal: theme.spacing.md,
77
+ paddingVertical: theme.spacing.sm,
78
+ backgroundColor: theme.colors.background,
79
+ borderTopWidth: 1,
80
+ borderTopColor: theme.colors.border,
81
+ };
82
+ const inputContainerStyle = {
83
+ flex: 1,
84
+ backgroundColor: theme.colors.inputBackground,
85
+ borderRadius: theme.borderRadius.xl,
86
+ borderWidth: 1,
87
+ borderColor: theme.colors.inputBorder,
88
+ paddingHorizontal: theme.spacing.md,
89
+ paddingVertical: theme.spacing.sm,
90
+ marginRight: theme.spacing.sm,
91
+ maxHeight: 100,
92
+ };
93
+ const inputStyle = {
94
+ fontSize: theme.typography.fontSize.md,
95
+ color: theme.colors.text,
96
+ lineHeight: theme.typography.fontSize.md * theme.typography.lineHeight.normal,
97
+ minHeight: 20,
98
+ };
99
+ const sendButtonStyle = {
100
+ width: 40,
101
+ height: 40,
102
+ borderRadius: 20,
103
+ backgroundColor: canSend ? theme.colors.buttonBackground : theme.colors.buttonDisabled,
104
+ alignItems: 'center',
105
+ justifyContent: 'center',
106
+ ...theme.shadows.small,
107
+ };
108
+ const sendButtonTextStyle = {
109
+ fontSize: theme.typography.fontSize.lg,
110
+ color: theme.colors.buttonText,
111
+ };
112
+ const charCountStyle = {
113
+ fontSize: theme.typography.fontSize.xs,
114
+ color: text.length >= maxLength ? theme.colors.error : theme.colors.textSecondary,
115
+ marginTop: theme.spacing.xs / 2,
116
+ marginLeft: theme.spacing.sm,
117
+ };
118
+ return (<react_native_1.View>
119
+ <react_native_1.View style={containerStyle}>
120
+ <react_native_1.View style={inputContainerStyle}>
121
+ <react_native_1.TextInput style={inputStyle} value={text} onChangeText={setText} placeholder={placeholder} placeholderTextColor={theme.colors.inputPlaceholder} multiline maxLength={maxLength} editable={!disabled && !isSending} returnKeyType="default" blurOnSubmit={false}/>
122
+ </react_native_1.View>
123
+
124
+ <react_native_1.TouchableOpacity style={sendButtonStyle} onPress={handleSend} disabled={!canSend} activeOpacity={0.7}>
125
+ {isSending ? (<react_native_1.ActivityIndicator color={theme.colors.buttonText} size="small"/>) : (<react_native_1.Text style={sendButtonTextStyle}>↑</react_native_1.Text>)}
126
+ </react_native_1.TouchableOpacity>
127
+ </react_native_1.View>
128
+
129
+ {/* Character counter */}
130
+ {showCharacterCount && text.length > 0 && (<react_native_1.Text style={charCountStyle}>
131
+ {text.length} / {maxLength}
132
+ </react_native_1.Text>)}
133
+ </react_native_1.View>);
134
+ }
135
+ //# sourceMappingURL=InputArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputArea.js","sourceRoot":"","sources":["../../src/components/InputArea.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEA,8BAgHC;AAzLD,+CAAwC;AACxC,+CAQsB;AAwCtB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,SAAS,CAAC,EACxB,KAAK,EACL,WAAW,GAAG,mBAAmB,EACjC,MAAM,EACN,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,GAAG,EACf,QAAQ,GAAG,KAAK,EAChB,kBAAkB,GAAG,KAAK,GACX;IACf,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,QAAQ;YAAE,OAAO;QAElD,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC;IAElE,MAAM,cAAc,GAAc;QAChC,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,UAAU;QACtB,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QACnC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QACjC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;QACxC,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;KACpC,CAAC;IAEF,MAAM,mBAAmB,GAAc;QACrC,IAAI,EAAE,CAAC;QACP,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;QAC7C,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE;QACnC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;QACrC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QACnC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QACjC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QAC7B,SAAS,EAAE,GAAG;KACf,CAAC;IAEF,MAAM,UAAU,GAAc;QAC5B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACtC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM;QAC7E,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,MAAM,eAAe,GAAc;QACjC,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc;QACtF,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;KACvB,CAAC;IAEF,MAAM,mBAAmB,GAAc;QACrC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACtC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;KAC/B,CAAC;IAEF,MAAM,cAAc,GAAc;QAChC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACtC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa;QACjF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;QAC/B,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;KAC7B,CAAC;IAEF,OAAO,CACL,CAAC,mBAAI,CACH;MAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAC1B;QAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAC/B;UAAA,CAAC,wBAAS,CACR,KAAK,CAAC,CAAC,UAAU,CAAC,CAClB,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,YAAY,CAAC,CAAC,OAAO,CAAC,CACtB,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,oBAAoB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACpD,SAAS,CACT,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAClC,aAAa,CAAC,SAAS,CACvB,YAAY,CAAC,CAAC,KAAK,CAAC,EAExB;QAAA,EAAE,mBAAI,CAEN;;QAAA,CAAC,+BAAgB,CACf,KAAK,CAAC,CAAC,eAAe,CAAC,CACvB,OAAO,CAAC,CAAC,UAAU,CAAC,CACpB,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CACnB,aAAa,CAAC,CAAC,GAAG,CAAC,CAEnB;UAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,gCAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,EAAG,CACnE,CAAC,CAAC,CAAC,CACF,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAI,CAAC,CAC3C,CACH;QAAA,EAAE,+BAAgB,CACpB;MAAA,EAAE,mBAAI,CAEN;;MAAA,CAAC,uBAAuB,CACxB;MAAA,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAC1B;UAAA,CAAC,IAAI,CAAC,MAAM,CAAE,GAAE,CAAC,SAAS,CAC5B;QAAA,EAAE,mBAAI,CAAC,CACR,CACH;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { TextStyle } from 'react-native';
3
+ import { Theme } from '../themes/types';
4
+ interface MarkdownTextProps {
5
+ children: string;
6
+ style: TextStyle;
7
+ theme: Theme;
8
+ isUserMessage: boolean;
9
+ }
10
+ /**
11
+ * Enhanced Markdown Renderer
12
+ * Supports: headings (###), **bold**, *italic*, `code`, ```code blocks```, links, bullet lists, numbered lists
13
+ */
14
+ export declare function MarkdownText({ children, style, theme, isUserMessage }: MarkdownTextProps): React.JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=MarkdownText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownText.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,iBAAiB,qBA0UxF"}