@uselingu/react-native-sdk 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 (135) hide show
  1. package/README.md +279 -0
  2. package/lib/commonjs/components/LinguChat.js +283 -0
  3. package/lib/commonjs/components/LinguChat.js.map +1 -0
  4. package/lib/commonjs/components/LinguWebView.js +203 -0
  5. package/lib/commonjs/components/LinguWebView.js.map +1 -0
  6. package/lib/commonjs/components/MessageBubble.js +91 -0
  7. package/lib/commonjs/components/MessageBubble.js.map +1 -0
  8. package/lib/commonjs/components/NativeChatUI.js +192 -0
  9. package/lib/commonjs/components/NativeChatUI.js.map +1 -0
  10. package/lib/commonjs/components/TypingIndicator.js +92 -0
  11. package/lib/commonjs/components/TypingIndicator.js.map +1 -0
  12. package/lib/commonjs/context/LinguProvider.js +47 -0
  13. package/lib/commonjs/context/LinguProvider.js.map +1 -0
  14. package/lib/commonjs/context/index.js +17 -0
  15. package/lib/commonjs/context/index.js.map +1 -0
  16. package/lib/commonjs/hooks/useLinguChat.js +295 -0
  17. package/lib/commonjs/hooks/useLinguChat.js.map +1 -0
  18. package/lib/commonjs/index.js +129 -0
  19. package/lib/commonjs/index.js.map +1 -0
  20. package/lib/commonjs/services/LinguAPI.js +196 -0
  21. package/lib/commonjs/services/LinguAPI.js.map +1 -0
  22. package/lib/commonjs/services/SessionManager.js +131 -0
  23. package/lib/commonjs/services/SessionManager.js.map +1 -0
  24. package/lib/commonjs/services/StorageManager.js +116 -0
  25. package/lib/commonjs/services/StorageManager.js.map +1 -0
  26. package/lib/commonjs/theme/ThemeProvider.js +49 -0
  27. package/lib/commonjs/theme/ThemeProvider.js.map +1 -0
  28. package/lib/commonjs/theme/index.js +28 -0
  29. package/lib/commonjs/theme/index.js.map +1 -0
  30. package/lib/commonjs/theme/theme.js +150 -0
  31. package/lib/commonjs/theme/theme.js.map +1 -0
  32. package/lib/commonjs/types/index.js +2 -0
  33. package/lib/commonjs/types/index.js.map +1 -0
  34. package/lib/commonjs/utils/animations.js +118 -0
  35. package/lib/commonjs/utils/animations.js.map +1 -0
  36. package/lib/commonjs/utils/formatters.js +89 -0
  37. package/lib/commonjs/utils/formatters.js.map +1 -0
  38. package/lib/commonjs/utils/index.js +28 -0
  39. package/lib/commonjs/utils/index.js.map +1 -0
  40. package/lib/module/components/LinguChat.js +277 -0
  41. package/lib/module/components/LinguChat.js.map +1 -0
  42. package/lib/module/components/LinguWebView.js +195 -0
  43. package/lib/module/components/LinguWebView.js.map +1 -0
  44. package/lib/module/components/MessageBubble.js +83 -0
  45. package/lib/module/components/MessageBubble.js.map +1 -0
  46. package/lib/module/components/NativeChatUI.js +184 -0
  47. package/lib/module/components/NativeChatUI.js.map +1 -0
  48. package/lib/module/components/TypingIndicator.js +84 -0
  49. package/lib/module/components/TypingIndicator.js.map +1 -0
  50. package/lib/module/context/LinguProvider.js +38 -0
  51. package/lib/module/context/LinguProvider.js.map +1 -0
  52. package/lib/module/context/index.js +6 -0
  53. package/lib/module/context/index.js.map +1 -0
  54. package/lib/module/hooks/useLinguChat.js +288 -0
  55. package/lib/module/hooks/useLinguChat.js.map +1 -0
  56. package/lib/module/index.js +30 -0
  57. package/lib/module/index.js.map +1 -0
  58. package/lib/module/services/LinguAPI.js +190 -0
  59. package/lib/module/services/LinguAPI.js.map +1 -0
  60. package/lib/module/services/SessionManager.js +124 -0
  61. package/lib/module/services/SessionManager.js.map +1 -0
  62. package/lib/module/services/StorageManager.js +108 -0
  63. package/lib/module/services/StorageManager.js.map +1 -0
  64. package/lib/module/theme/ThemeProvider.js +40 -0
  65. package/lib/module/theme/ThemeProvider.js.map +1 -0
  66. package/lib/module/theme/index.js +7 -0
  67. package/lib/module/theme/index.js.map +1 -0
  68. package/lib/module/theme/theme.js +142 -0
  69. package/lib/module/theme/theme.js.map +1 -0
  70. package/lib/module/types/index.js +2 -0
  71. package/lib/module/types/index.js.map +1 -0
  72. package/lib/module/utils/animations.js +106 -0
  73. package/lib/module/utils/animations.js.map +1 -0
  74. package/lib/module/utils/formatters.js +78 -0
  75. package/lib/module/utils/formatters.js.map +1 -0
  76. package/lib/module/utils/index.js +7 -0
  77. package/lib/module/utils/index.js.map +1 -0
  78. package/lib/typescript/components/LinguChat.d.ts +18 -0
  79. package/lib/typescript/components/LinguChat.d.ts.map +1 -0
  80. package/lib/typescript/components/LinguWebView.d.ts +16 -0
  81. package/lib/typescript/components/LinguWebView.d.ts.map +1 -0
  82. package/lib/typescript/components/MessageBubble.d.ts +13 -0
  83. package/lib/typescript/components/MessageBubble.d.ts.map +1 -0
  84. package/lib/typescript/components/NativeChatUI.d.ts +16 -0
  85. package/lib/typescript/components/NativeChatUI.d.ts.map +1 -0
  86. package/lib/typescript/components/TypingIndicator.d.ts +7 -0
  87. package/lib/typescript/components/TypingIndicator.d.ts.map +1 -0
  88. package/lib/typescript/context/LinguProvider.d.ts +32 -0
  89. package/lib/typescript/context/LinguProvider.d.ts.map +1 -0
  90. package/lib/typescript/context/index.d.ts +5 -0
  91. package/lib/typescript/context/index.d.ts.map +1 -0
  92. package/lib/typescript/hooks/useLinguChat.d.ts +18 -0
  93. package/lib/typescript/hooks/useLinguChat.d.ts.map +1 -0
  94. package/lib/typescript/index.d.ts +19 -0
  95. package/lib/typescript/index.d.ts.map +1 -0
  96. package/lib/typescript/services/LinguAPI.d.ts +39 -0
  97. package/lib/typescript/services/LinguAPI.d.ts.map +1 -0
  98. package/lib/typescript/services/SessionManager.d.ts +46 -0
  99. package/lib/typescript/services/SessionManager.d.ts.map +1 -0
  100. package/lib/typescript/services/StorageManager.d.ts +36 -0
  101. package/lib/typescript/services/StorageManager.d.ts.map +1 -0
  102. package/lib/typescript/theme/ThemeProvider.d.ts +23 -0
  103. package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -0
  104. package/lib/typescript/theme/index.d.ts +6 -0
  105. package/lib/typescript/theme/index.d.ts.map +1 -0
  106. package/lib/typescript/theme/theme.d.ts +130 -0
  107. package/lib/typescript/theme/theme.d.ts.map +1 -0
  108. package/lib/typescript/types/index.d.ts +50 -0
  109. package/lib/typescript/types/index.d.ts.map +1 -0
  110. package/lib/typescript/utils/animations.d.ts +34 -0
  111. package/lib/typescript/utils/animations.d.ts.map +1 -0
  112. package/lib/typescript/utils/formatters.d.ts +25 -0
  113. package/lib/typescript/utils/formatters.d.ts.map +1 -0
  114. package/lib/typescript/utils/index.d.ts +6 -0
  115. package/lib/typescript/utils/index.d.ts.map +1 -0
  116. package/package.json +98 -0
  117. package/src/components/LinguChat.tsx +309 -0
  118. package/src/components/LinguWebView.tsx +216 -0
  119. package/src/components/MessageBubble.tsx +120 -0
  120. package/src/components/NativeChatUI.tsx +247 -0
  121. package/src/components/TypingIndicator.tsx +84 -0
  122. package/src/context/LinguProvider.tsx +53 -0
  123. package/src/context/index.ts +5 -0
  124. package/src/hooks/useLinguChat.ts +314 -0
  125. package/src/index.ts +43 -0
  126. package/src/services/LinguAPI.ts +214 -0
  127. package/src/services/SessionManager.ts +131 -0
  128. package/src/services/StorageManager.ts +111 -0
  129. package/src/theme/ThemeProvider.tsx +58 -0
  130. package/src/theme/index.ts +6 -0
  131. package/src/theme/theme.ts +254 -0
  132. package/src/types/index.ts +59 -0
  133. package/src/utils/animations.ts +141 -0
  134. package/src/utils/formatters.ts +80 -0
  135. package/src/utils/index.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_theme","_animations","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypingIndicator","theme","useTheme","dot1","useRef","Animated","Value","current","dot2","dot3","useEffect","anim1","typingDotAnimation","anim2","anim3","start","stop","createElement","View","style","styles","container","backgroundColor","colors","botBubble","dotsContainer","dot","gray400","transform","translateY","exports","StyleSheet","create","maxWidth","padding","borderRadius","borderBottomLeftRadius","marginBottom","flexDirection","alignItems","justifyContent","height","width","marginHorizontal"],"sources":["TypingIndicator.tsx"],"sourcesContent":["/**\n * Typing Indicator Component\n * Animated dots to show bot is typing\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { View, Animated, StyleSheet } from 'react-native';\nimport { useTheme } from '../theme';\nimport { typingDotAnimation } from '../utils/animations';\n\nexport const TypingIndicator: React.FC = () => {\n const { theme } = useTheme();\n\n const dot1 = useRef(new Animated.Value(0)).current;\n const dot2 = useRef(new Animated.Value(0)).current;\n const dot3 = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n // Start animations with staggered delays\n const anim1 = typingDotAnimation(dot1, 0);\n const anim2 = typingDotAnimation(dot2, 150);\n const anim3 = typingDotAnimation(dot3, 300);\n\n anim1.start();\n anim2.start();\n anim3.start();\n\n return () => {\n anim1.stop();\n anim2.stop();\n anim3.stop();\n };\n }, []);\n\n return (\n <View style={[styles.container, { backgroundColor: theme.colors.botBubble }]}>\n <View style={styles.dotsContainer}>\n <Animated.View\n style={[\n styles.dot,\n { backgroundColor: theme.colors.gray400 },\n { transform: [{ translateY: dot1 }] },\n ]}\n />\n <Animated.View\n style={[\n styles.dot,\n { backgroundColor: theme.colors.gray400 },\n { transform: [{ translateY: dot2 }] },\n ]}\n />\n <Animated.View\n style={[\n styles.dot,\n { backgroundColor: theme.colors.gray400 },\n { transform: [{ translateY: dot3 }] },\n ]}\n />\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n maxWidth: '75%',\n padding: 12,\n borderRadius: 16,\n borderBottomLeftRadius: 4,\n marginBottom: 12,\n },\n dotsContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n },\n dot: {\n width: 8,\n height: 8,\n borderRadius: 4,\n marginHorizontal: 3,\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useLinguContext = exports.LinguProvider = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _useLinguChat = require("../hooks/useLinguChat");
9
+ var _theme = require("../theme");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ /**
12
+ * Lingu SDK Context Provider
13
+ * Provides standalone state management for the SDK
14
+ * Completely isolated from host application state
15
+ */
16
+
17
+ const LinguContext = /*#__PURE__*/(0, _react.createContext)(undefined);
18
+ /**
19
+ * LinguProvider - Wraps the SDK with standalone state management
20
+ * This ensures the SDK state is completely isolated from the host app
21
+ */
22
+ const LinguProvider = ({
23
+ children,
24
+ ...linguConfig
25
+ }) => {
26
+ const chatState = (0, _useLinguChat.useLinguChat)(linguConfig);
27
+ return /*#__PURE__*/_react.default.createElement(LinguContext.Provider, {
28
+ value: chatState
29
+ }, /*#__PURE__*/_react.default.createElement(_theme.ThemeProvider, {
30
+ config: chatState.config
31
+ }, children));
32
+ };
33
+
34
+ /**
35
+ * Hook to access Lingu SDK context
36
+ * Must be used within a LinguProvider
37
+ */
38
+ exports.LinguProvider = LinguProvider;
39
+ const useLinguContext = () => {
40
+ const context = (0, _react.useContext)(LinguContext);
41
+ if (context === undefined) {
42
+ throw new Error('useLinguContext must be used within a LinguProvider');
43
+ }
44
+ return context;
45
+ };
46
+ exports.useLinguContext = useLinguContext;
47
+ //# sourceMappingURL=LinguProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_useLinguChat","_theme","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LinguContext","createContext","undefined","LinguProvider","children","linguConfig","chatState","useLinguChat","createElement","Provider","value","ThemeProvider","config","exports","useLinguContext","context","useContext","Error"],"sources":["LinguProvider.tsx"],"sourcesContent":["/**\n * Lingu SDK Context Provider\n * Provides standalone state management for the SDK\n * Completely isolated from host application state\n */\n\nimport React, { createContext, useContext, ReactNode } from 'react';\nimport { useLinguChat } from '../hooks/useLinguChat';\nimport { ThemeProvider } from '../theme';\nimport type { Message, WidgetConfig, LinguConfig } from '../types';\n\ninterface LinguContextValue {\n messages: Message[];\n isLoading: boolean;\n config: WidgetConfig | null;\n sendMessage: (text: string) => Promise<void>;\n startSession: () => Promise<void>;\n endSession: () => Promise<void>;\n isSessionActive: boolean;\n clearHistory: () => Promise<void>;\n}\n\nconst LinguContext = createContext<LinguContextValue | undefined>(undefined);\n\ninterface LinguProviderProps extends LinguConfig {\n children: ReactNode;\n}\n\n/**\n * LinguProvider - Wraps the SDK with standalone state management\n * This ensures the SDK state is completely isolated from the host app\n */\nexport const LinguProvider: React.FC<LinguProviderProps> = ({ children, ...linguConfig }) => {\n const chatState = useLinguChat(linguConfig);\n\n return (\n <LinguContext.Provider value={chatState}>\n <ThemeProvider config={chatState.config}>{children}</ThemeProvider>\n </LinguContext.Provider>\n );\n};\n\n/**\n * Hook to access Lingu SDK context\n * Must be used within a LinguProvider\n */\nexport const useLinguContext = (): LinguContextValue => {\n const context = useContext(LinguContext);\n if (context === undefined) {\n throw new Error('useLinguContext must be used within a LinguProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;AAMA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAAyC,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AARzC;AACA;AACA;AACA;AACA;;AAkBA,MAAMkB,YAAY,gBAAG,IAAAC,oBAAa,EAAgCC,SAAS,CAAC;AAM5E;AACA;AACA;AACA;AACO,MAAMC,aAA2C,GAAGA,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAY,CAAC,KAAK;EAC1F,MAAMC,SAAS,GAAG,IAAAC,0BAAY,EAACF,WAAW,CAAC;EAE3C,oBACG7B,MAAA,CAAAe,OAAA,CAAAiB,aAAA,CAACR,YAAY,CAACS,QAAQ;IAACC,KAAK,EAAEJ;EAAU,gBACrC9B,MAAA,CAAAe,OAAA,CAAAiB,aAAA,CAAC5B,MAAA,CAAA+B,aAAa;IAACC,MAAM,EAAEN,SAAS,CAACM;EAAO,GAAER,QAAwB,CAC9C,CAAC;AAE9B,CAAC;;AAED;AACA;AACA;AACA;AAHAS,OAAA,CAAAV,aAAA,GAAAA,aAAA;AAIO,MAAMW,eAAe,GAAGA,CAAA,KAAyB;EACrD,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAAChB,YAAY,CAAC;EACxC,IAAIe,OAAO,KAAKb,SAAS,EAAE;IACxB,MAAM,IAAIe,KAAK,CAAC,qDAAqD,CAAC;EACzE;EACA,OAAOF,OAAO;AACjB,CAAC;AAACF,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _LinguProvider = require("./LinguProvider");
7
+ Object.keys(_LinguProvider).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _LinguProvider[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _LinguProvider[key];
14
+ }
15
+ });
16
+ });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_LinguProvider","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["/**\n * Context exports\n */\n\nexport * from './LinguProvider';\n"],"mappings":";;;;;AAIA,IAAAA,cAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,cAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,cAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,cAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useLinguChat = void 0;
7
+ var _react = require("react");
8
+ var _LinguAPI = require("../services/LinguAPI");
9
+ var _SessionManager = require("../services/SessionManager");
10
+ var _StorageManager = require("../services/StorageManager");
11
+ /**
12
+ * Custom hook for managing Lingu chat state and operations
13
+ * Now with message persistence and comprehensive logging
14
+ */
15
+
16
+ const LOG_PREFIX = '[useLinguChat]';
17
+ const useLinguChat = linguConfig => {
18
+ var _linguConfig$apiKey;
19
+ console.log(`${LOG_PREFIX} Initializing hook with config:`, {
20
+ apiKey: ((_linguConfig$apiKey = linguConfig.apiKey) === null || _linguConfig$apiKey === void 0 ? void 0 : _linguConfig$apiKey.substring(0, 20)) + '...',
21
+ baseURL: linguConfig.baseURL,
22
+ autoOpen: linguConfig.autoOpen
23
+ });
24
+ const [messages, setMessages] = (0, _react.useState)([]);
25
+ const [isLoading, setIsLoading] = (0, _react.useState)(false);
26
+ const [config, setConfig] = (0, _react.useState)(null);
27
+ const [isSessionActive, setIsSessionActive] = (0, _react.useState)(false);
28
+ const apiRef = (0, _react.useRef)(null);
29
+ const sessionManagerRef = (0, _react.useRef)(null);
30
+ const currentSessionIdRef = (0, _react.useRef)(null);
31
+
32
+ // Initialize API client and session manager
33
+ (0, _react.useEffect)(() => {
34
+ console.log(`${LOG_PREFIX} Setting up API client and session manager`);
35
+ const baseURL = linguConfig.baseURL || 'https://api.uselingu.app/api';
36
+ console.log(`${LOG_PREFIX} API Base URL:`, baseURL);
37
+ const api = new _LinguAPI.LinguAPI(linguConfig.apiKey, baseURL);
38
+ apiRef.current = api;
39
+ const sessionManager = new _SessionManager.SessionManager(api, {
40
+ onSessionStart: async sessionId => {
41
+ var _linguConfig$onSessio;
42
+ console.log(`${LOG_PREFIX} ✅ Session started:`, sessionId);
43
+ currentSessionIdRef.current = sessionId;
44
+ setIsSessionActive(true);
45
+
46
+ // Save session ID
47
+ await _StorageManager.StorageManager.saveCurrentSessionId(sessionId);
48
+ console.log(`${LOG_PREFIX} Session ID saved to storage`);
49
+
50
+ // Try to load previous messages for this session
51
+ const savedMessages = await _StorageManager.StorageManager.loadMessages(sessionId);
52
+ if (savedMessages.length > 0) {
53
+ console.log(`${LOG_PREFIX} Loaded ${savedMessages.length} messages from storage`);
54
+ setMessages(savedMessages);
55
+ } else {
56
+ console.log(`${LOG_PREFIX} No previous messages found for this session`);
57
+ }
58
+ (_linguConfig$onSessio = linguConfig.onSessionStart) === null || _linguConfig$onSessio === void 0 || _linguConfig$onSessio.call(linguConfig, sessionId);
59
+ },
60
+ onSessionEnd: async sessionId => {
61
+ var _linguConfig$onSessio2;
62
+ console.log(`${LOG_PREFIX} Session ending:`, sessionId);
63
+
64
+ // Save messages before ending
65
+ if (messages.length > 0) {
66
+ console.log(`${LOG_PREFIX} Saving ${messages.length} messages before session end`);
67
+ await _StorageManager.StorageManager.saveMessages(sessionId, messages);
68
+ }
69
+ currentSessionIdRef.current = null;
70
+ setIsSessionActive(false);
71
+ console.log(`${LOG_PREFIX} ✅ Session ended successfully`);
72
+ (_linguConfig$onSessio2 = linguConfig.onSessionEnd) === null || _linguConfig$onSessio2 === void 0 || _linguConfig$onSessio2.call(linguConfig, sessionId);
73
+ }
74
+ });
75
+ sessionManagerRef.current = sessionManager;
76
+
77
+ // Load widget configuration
78
+ console.log(`${LOG_PREFIX} Fetching widget configuration...`);
79
+ api.getConfig().then(fetchedConfig => {
80
+ var _fetchedConfig$greeti;
81
+ console.log(`${LOG_PREFIX} ✅ Widget config loaded:`, {
82
+ theme: fetchedConfig.theme,
83
+ primaryColor: fetchedConfig.primaryColor,
84
+ brandName: fetchedConfig.brandName,
85
+ greetingMessage: (_fetchedConfig$greeti = fetchedConfig.greetingMessage) === null || _fetchedConfig$greeti === void 0 ? void 0 : _fetchedConfig$greeti.substring(0, 50)
86
+ });
87
+ setConfig(fetchedConfig);
88
+ }).catch(error => {
89
+ console.error(`${LOG_PREFIX} ❌ Failed to load config:`, error);
90
+ });
91
+
92
+ // Try to restore previous session
93
+ console.log(`${LOG_PREFIX} Attempting to restore previous session...`);
94
+ restorePreviousSession();
95
+
96
+ // Cleanup on unmount
97
+ return () => {
98
+ var _sessionManagerRef$cu;
99
+ console.log(`${LOG_PREFIX} Component unmounting, cleaning up...`);
100
+ // Save messages before cleanup
101
+ if (currentSessionIdRef.current && messages.length > 0) {
102
+ console.log(`${LOG_PREFIX} Saving messages on unmount`);
103
+ _StorageManager.StorageManager.saveMessages(currentSessionIdRef.current, messages);
104
+ }
105
+ (_sessionManagerRef$cu = sessionManagerRef.current) === null || _sessionManagerRef$cu === void 0 || _sessionManagerRef$cu.cleanup();
106
+ console.log(`${LOG_PREFIX} Cleanup complete`);
107
+ };
108
+ }, [linguConfig.apiKey, linguConfig.baseURL]);
109
+
110
+ // Save messages whenever they change
111
+ (0, _react.useEffect)(() => {
112
+ if (currentSessionIdRef.current && messages.length > 0) {
113
+ console.log(`${LOG_PREFIX} Auto-saving ${messages.length} messages`);
114
+ _StorageManager.StorageManager.saveMessages(currentSessionIdRef.current, messages);
115
+ }
116
+ }, [messages]);
117
+
118
+ /**
119
+ * Try to restore previous session
120
+ */
121
+ const restorePreviousSession = async () => {
122
+ try {
123
+ const previousSessionId = await _StorageManager.StorageManager.getCurrentSessionId();
124
+ if (previousSessionId) {
125
+ console.log(`${LOG_PREFIX} Found previous session:`, previousSessionId);
126
+ const savedMessages = await _StorageManager.StorageManager.loadMessages(previousSessionId);
127
+ if (savedMessages.length > 0) {
128
+ console.log(`${LOG_PREFIX} ✅ Restored ${savedMessages.length} messages from previous session`);
129
+ setMessages(savedMessages);
130
+ currentSessionIdRef.current = previousSessionId;
131
+ } else {
132
+ console.log(`${LOG_PREFIX} Previous session had no messages`);
133
+ }
134
+ } else {
135
+ console.log(`${LOG_PREFIX} No previous session found`);
136
+ }
137
+ } catch (error) {
138
+ console.error(`${LOG_PREFIX} ❌ Failed to restore previous session:`, error);
139
+ }
140
+ };
141
+
142
+ /**
143
+ * Start a new chat session
144
+ */
145
+ const startSession = (0, _react.useCallback)(async () => {
146
+ if (!sessionManagerRef.current) {
147
+ console.error(`${LOG_PREFIX} ❌ Session manager not initialized`);
148
+ return;
149
+ }
150
+ try {
151
+ console.log(`${LOG_PREFIX} Starting new session...`);
152
+ await sessionManagerRef.current.start();
153
+
154
+ // Add greeting message if configured and no previous messages
155
+ if (config !== null && config !== void 0 && config.greetingMessage && messages.length === 0) {
156
+ console.log(`${LOG_PREFIX} Adding greeting message`);
157
+ const greetingMsg = {
158
+ id: `greeting-${Date.now()}`,
159
+ text: config.greetingMessage,
160
+ sender: 'bot',
161
+ timestamp: new Date()
162
+ };
163
+ setMessages([greetingMsg]);
164
+ }
165
+ } catch (error) {
166
+ console.error(`${LOG_PREFIX} ❌ Failed to start session:`, error);
167
+ }
168
+ }, [config, messages.length]);
169
+
170
+ /**
171
+ * End the current chat session
172
+ */
173
+ const endSession = (0, _react.useCallback)(async () => {
174
+ if (!sessionManagerRef.current) {
175
+ console.error(`${LOG_PREFIX} ❌ Session manager not initialized`);
176
+ return;
177
+ }
178
+ try {
179
+ console.log(`${LOG_PREFIX} Ending session...`);
180
+ await sessionManagerRef.current.end();
181
+ // Don't clear messages - they're saved in storage
182
+ console.log(`${LOG_PREFIX} ✅ Session ended, messages preserved`);
183
+ } catch (error) {
184
+ console.error(`${LOG_PREFIX} ❌ Failed to end session:`, error);
185
+ }
186
+ }, []);
187
+
188
+ /**
189
+ * Clear chat history
190
+ */
191
+ const clearHistory = (0, _react.useCallback)(async () => {
192
+ console.log(`${LOG_PREFIX} Clearing chat history...`);
193
+ if (currentSessionIdRef.current) {
194
+ await _StorageManager.StorageManager.clearMessages(currentSessionIdRef.current);
195
+ console.log(`${LOG_PREFIX} ✅ Storage cleared for session:`, currentSessionIdRef.current);
196
+ }
197
+ setMessages([]);
198
+ console.log(`${LOG_PREFIX} ✅ Messages cleared from state`);
199
+ }, []);
200
+
201
+ /**
202
+ * Send a message to the AI
203
+ */
204
+ const sendMessage = (0, _react.useCallback)(async text => {
205
+ var _linguConfig$onMessag;
206
+ if (!apiRef.current || !sessionManagerRef.current) {
207
+ console.error(`${LOG_PREFIX} ❌ API or session manager not initialized`);
208
+ return;
209
+ }
210
+ const sessionId = sessionManagerRef.current.getSessionId();
211
+ if (!sessionId) {
212
+ console.error(`${LOG_PREFIX} ❌ No active session`);
213
+ return;
214
+ }
215
+ console.log(`${LOG_PREFIX} Sending message:`, {
216
+ sessionId,
217
+ messageLength: text.length,
218
+ preview: text.substring(0, 50)
219
+ });
220
+
221
+ // Add user message
222
+ const userMessage = {
223
+ id: `user-${Date.now()}`,
224
+ text,
225
+ sender: 'user',
226
+ timestamp: new Date()
227
+ };
228
+ setMessages(prev => {
229
+ console.log(`${LOG_PREFIX} Adding user message to state (total: ${prev.length + 1})`);
230
+ return [...prev, userMessage];
231
+ });
232
+ (_linguConfig$onMessag = linguConfig.onMessageSent) === null || _linguConfig$onMessag === void 0 || _linguConfig$onMessag.call(linguConfig, text);
233
+
234
+ // Send to API
235
+ setIsLoading(true);
236
+ console.log(`${LOG_PREFIX} Waiting for AI response...`);
237
+ try {
238
+ var _linguConfig$onMessag2;
239
+ const startTime = Date.now();
240
+ const response = await apiRef.current.sendMessage(text, sessionId);
241
+ const duration = Date.now() - startTime;
242
+ console.log(`${LOG_PREFIX} ✅ Received AI response in ${duration}ms:`, {
243
+ responseLength: response.length,
244
+ preview: response.substring(0, 50)
245
+ });
246
+
247
+ // Add bot response
248
+ const botMessage = {
249
+ id: `bot-${Date.now()}`,
250
+ text: response,
251
+ sender: 'bot',
252
+ timestamp: new Date()
253
+ };
254
+ setMessages(prev => {
255
+ console.log(`${LOG_PREFIX} Adding bot message to state (total: ${prev.length + 1})`);
256
+ return [...prev, botMessage];
257
+ });
258
+ (_linguConfig$onMessag2 = linguConfig.onMessageReceived) === null || _linguConfig$onMessag2 === void 0 || _linguConfig$onMessag2.call(linguConfig, response);
259
+ } catch (error) {
260
+ console.error(`${LOG_PREFIX} ❌ Failed to send message:`, error);
261
+
262
+ // Add error message
263
+ const errorMessage = {
264
+ id: `error-${Date.now()}`,
265
+ text: 'Sorry, I encountered an error. Please try again.',
266
+ sender: 'bot',
267
+ timestamp: new Date()
268
+ };
269
+ setMessages(prev => [...prev, errorMessage]);
270
+ console.log(`${LOG_PREFIX} Added error message to state`);
271
+ } finally {
272
+ setIsLoading(false);
273
+ console.log(`${LOG_PREFIX} Message send complete`);
274
+ }
275
+ }, [linguConfig]);
276
+ console.log(`${LOG_PREFIX} Current state:`, {
277
+ messagesCount: messages.length,
278
+ isLoading,
279
+ hasConfig: !!config,
280
+ isSessionActive,
281
+ currentSessionId: currentSessionIdRef.current
282
+ });
283
+ return {
284
+ messages,
285
+ isLoading,
286
+ config,
287
+ sendMessage,
288
+ startSession,
289
+ endSession,
290
+ isSessionActive,
291
+ clearHistory
292
+ };
293
+ };
294
+ exports.useLinguChat = useLinguChat;
295
+ //# sourceMappingURL=useLinguChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_LinguAPI","_SessionManager","_StorageManager","LOG_PREFIX","useLinguChat","linguConfig","_linguConfig$apiKey","console","log","apiKey","substring","baseURL","autoOpen","messages","setMessages","useState","isLoading","setIsLoading","config","setConfig","isSessionActive","setIsSessionActive","apiRef","useRef","sessionManagerRef","currentSessionIdRef","useEffect","api","LinguAPI","current","sessionManager","SessionManager","onSessionStart","sessionId","_linguConfig$onSessio","StorageManager","saveCurrentSessionId","savedMessages","loadMessages","length","call","onSessionEnd","_linguConfig$onSessio2","saveMessages","getConfig","then","fetchedConfig","_fetchedConfig$greeti","theme","primaryColor","brandName","greetingMessage","catch","error","restorePreviousSession","_sessionManagerRef$cu","cleanup","previousSessionId","getCurrentSessionId","startSession","useCallback","start","greetingMsg","id","Date","now","text","sender","timestamp","endSession","end","clearHistory","clearMessages","sendMessage","_linguConfig$onMessag","getSessionId","messageLength","preview","userMessage","prev","onMessageSent","_linguConfig$onMessag2","startTime","response","duration","responseLength","botMessage","onMessageReceived","errorMessage","messagesCount","hasConfig","currentSessionId","exports"],"sources":["useLinguChat.ts"],"sourcesContent":["/**\n * Custom hook for managing Lingu chat state and operations\n * Now with message persistence and comprehensive logging\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { LinguAPI } from '../services/LinguAPI';\nimport { SessionManager } from '../services/SessionManager';\nimport { StorageManager } from '../services/StorageManager';\nimport type { Message, WidgetConfig, LinguConfig } from '../types';\n\nconst LOG_PREFIX = '[useLinguChat]';\n\ninterface UseLinguChatReturn {\n messages: Message[];\n isLoading: boolean;\n config: WidgetConfig | null;\n sendMessage: (text: string) => Promise<void>;\n startSession: () => Promise<void>;\n endSession: () => Promise<void>;\n isSessionActive: boolean;\n clearHistory: () => Promise<void>;\n}\n\nexport const useLinguChat = (linguConfig: LinguConfig): UseLinguChatReturn => {\n console.log(`${LOG_PREFIX} Initializing hook with config:`, {\n apiKey: linguConfig.apiKey?.substring(0, 20) + '...',\n baseURL: linguConfig.baseURL,\n autoOpen: linguConfig.autoOpen,\n });\n\n const [messages, setMessages] = useState<Message[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [config, setConfig] = useState<WidgetConfig | null>(null);\n const [isSessionActive, setIsSessionActive] = useState(false);\n\n const apiRef = useRef<LinguAPI | null>(null);\n const sessionManagerRef = useRef<SessionManager | null>(null);\n const currentSessionIdRef = useRef<string | null>(null);\n\n // Initialize API client and session manager\n useEffect(() => {\n console.log(`${LOG_PREFIX} Setting up API client and session manager`);\n\n const baseURL = linguConfig.baseURL || 'https://api.uselingu.app/api';\n console.log(`${LOG_PREFIX} API Base URL:`, baseURL);\n\n const api = new LinguAPI(linguConfig.apiKey, baseURL);\n apiRef.current = api;\n\n const sessionManager = new SessionManager(api, {\n onSessionStart: async (sessionId) => {\n console.log(`${LOG_PREFIX} ✅ Session started:`, sessionId);\n currentSessionIdRef.current = sessionId;\n setIsSessionActive(true);\n\n // Save session ID\n await StorageManager.saveCurrentSessionId(sessionId);\n console.log(`${LOG_PREFIX} Session ID saved to storage`);\n\n // Try to load previous messages for this session\n const savedMessages = await StorageManager.loadMessages(sessionId);\n if (savedMessages.length > 0) {\n console.log(`${LOG_PREFIX} Loaded ${savedMessages.length} messages from storage`);\n setMessages(savedMessages);\n } else {\n console.log(`${LOG_PREFIX} No previous messages found for this session`);\n }\n\n linguConfig.onSessionStart?.(sessionId);\n },\n onSessionEnd: async (sessionId) => {\n console.log(`${LOG_PREFIX} Session ending:`, sessionId);\n\n // Save messages before ending\n if (messages.length > 0) {\n console.log(`${LOG_PREFIX} Saving ${messages.length} messages before session end`);\n await StorageManager.saveMessages(sessionId, messages);\n }\n\n currentSessionIdRef.current = null;\n setIsSessionActive(false);\n console.log(`${LOG_PREFIX} ✅ Session ended successfully`);\n linguConfig.onSessionEnd?.(sessionId);\n },\n });\n sessionManagerRef.current = sessionManager;\n\n // Load widget configuration\n console.log(`${LOG_PREFIX} Fetching widget configuration...`);\n api\n .getConfig()\n .then((fetchedConfig) => {\n console.log(`${LOG_PREFIX} ✅ Widget config loaded:`, {\n theme: fetchedConfig.theme,\n primaryColor: fetchedConfig.primaryColor,\n brandName: fetchedConfig.brandName,\n greetingMessage: fetchedConfig.greetingMessage?.substring(0, 50),\n });\n setConfig(fetchedConfig);\n })\n .catch((error) => {\n console.error(`${LOG_PREFIX} ❌ Failed to load config:`, error);\n });\n\n // Try to restore previous session\n console.log(`${LOG_PREFIX} Attempting to restore previous session...`);\n restorePreviousSession();\n\n // Cleanup on unmount\n return () => {\n console.log(`${LOG_PREFIX} Component unmounting, cleaning up...`);\n // Save messages before cleanup\n if (currentSessionIdRef.current && messages.length > 0) {\n console.log(`${LOG_PREFIX} Saving messages on unmount`);\n StorageManager.saveMessages(currentSessionIdRef.current, messages);\n }\n sessionManagerRef.current?.cleanup();\n console.log(`${LOG_PREFIX} Cleanup complete`);\n };\n }, [linguConfig.apiKey, linguConfig.baseURL]);\n\n // Save messages whenever they change\n useEffect(() => {\n if (currentSessionIdRef.current && messages.length > 0) {\n console.log(`${LOG_PREFIX} Auto-saving ${messages.length} messages`);\n StorageManager.saveMessages(currentSessionIdRef.current, messages);\n }\n }, [messages]);\n\n /**\n * Try to restore previous session\n */\n const restorePreviousSession = async () => {\n try {\n const previousSessionId = await StorageManager.getCurrentSessionId();\n if (previousSessionId) {\n console.log(`${LOG_PREFIX} Found previous session:`, previousSessionId);\n const savedMessages = await StorageManager.loadMessages(previousSessionId);\n if (savedMessages.length > 0) {\n console.log(`${LOG_PREFIX} ✅ Restored ${savedMessages.length} messages from previous session`);\n setMessages(savedMessages);\n currentSessionIdRef.current = previousSessionId;\n } else {\n console.log(`${LOG_PREFIX} Previous session had no messages`);\n }\n } else {\n console.log(`${LOG_PREFIX} No previous session found`);\n }\n } catch (error) {\n console.error(`${LOG_PREFIX} ❌ Failed to restore previous session:`, error);\n }\n };\n\n /**\n * Start a new chat session\n */\n const startSession = useCallback(async () => {\n if (!sessionManagerRef.current) {\n console.error(`${LOG_PREFIX} ❌ Session manager not initialized`);\n return;\n }\n\n try {\n console.log(`${LOG_PREFIX} Starting new session...`);\n await sessionManagerRef.current.start();\n\n // Add greeting message if configured and no previous messages\n if (config?.greetingMessage && messages.length === 0) {\n console.log(`${LOG_PREFIX} Adding greeting message`);\n const greetingMsg: Message = {\n id: `greeting-${Date.now()}`,\n text: config.greetingMessage,\n sender: 'bot',\n timestamp: new Date(),\n };\n setMessages([greetingMsg]);\n }\n } catch (error) {\n console.error(`${LOG_PREFIX} ❌ Failed to start session:`, error);\n }\n }, [config, messages.length]);\n\n /**\n * End the current chat session\n */\n const endSession = useCallback(async () => {\n if (!sessionManagerRef.current) {\n console.error(`${LOG_PREFIX} ❌ Session manager not initialized`);\n return;\n }\n\n try {\n console.log(`${LOG_PREFIX} Ending session...`);\n await sessionManagerRef.current.end();\n // Don't clear messages - they're saved in storage\n console.log(`${LOG_PREFIX} ✅ Session ended, messages preserved`);\n } catch (error) {\n console.error(`${LOG_PREFIX} ❌ Failed to end session:`, error);\n }\n }, []);\n\n /**\n * Clear chat history\n */\n const clearHistory = useCallback(async () => {\n console.log(`${LOG_PREFIX} Clearing chat history...`);\n if (currentSessionIdRef.current) {\n await StorageManager.clearMessages(currentSessionIdRef.current);\n console.log(`${LOG_PREFIX} ✅ Storage cleared for session:`, currentSessionIdRef.current);\n }\n setMessages([]);\n console.log(`${LOG_PREFIX} ✅ Messages cleared from state`);\n }, []);\n\n /**\n * Send a message to the AI\n */\n const sendMessage = useCallback(\n async (text: string) => {\n if (!apiRef.current || !sessionManagerRef.current) {\n console.error(`${LOG_PREFIX} ❌ API or session manager not initialized`);\n return;\n }\n\n const sessionId = sessionManagerRef.current.getSessionId();\n if (!sessionId) {\n console.error(`${LOG_PREFIX} ❌ No active session`);\n return;\n }\n\n console.log(`${LOG_PREFIX} Sending message:`, {\n sessionId,\n messageLength: text.length,\n preview: text.substring(0, 50),\n });\n\n // Add user message\n const userMessage: Message = {\n id: `user-${Date.now()}`,\n text,\n sender: 'user',\n timestamp: new Date(),\n };\n setMessages((prev) => {\n console.log(`${LOG_PREFIX} Adding user message to state (total: ${prev.length + 1})`);\n return [...prev, userMessage];\n });\n linguConfig.onMessageSent?.(text);\n\n // Send to API\n setIsLoading(true);\n console.log(`${LOG_PREFIX} Waiting for AI response...`);\n try {\n const startTime = Date.now();\n const response = await apiRef.current.sendMessage(text, sessionId);\n const duration = Date.now() - startTime;\n\n console.log(`${LOG_PREFIX} ✅ Received AI response in ${duration}ms:`, {\n responseLength: response.length,\n preview: response.substring(0, 50),\n });\n\n // Add bot response\n const botMessage: Message = {\n id: `bot-${Date.now()}`,\n text: response,\n sender: 'bot',\n timestamp: new Date(),\n };\n setMessages((prev) => {\n console.log(`${LOG_PREFIX} Adding bot message to state (total: ${prev.length + 1})`);\n return [...prev, botMessage];\n });\n linguConfig.onMessageReceived?.(response);\n } catch (error) {\n console.error(`${LOG_PREFIX} ❌ Failed to send message:`, error);\n\n // Add error message\n const errorMessage: Message = {\n id: `error-${Date.now()}`,\n text: 'Sorry, I encountered an error. Please try again.',\n sender: 'bot',\n timestamp: new Date(),\n };\n setMessages((prev) => [...prev, errorMessage]);\n console.log(`${LOG_PREFIX} Added error message to state`);\n } finally {\n setIsLoading(false);\n console.log(`${LOG_PREFIX} Message send complete`);\n }\n },\n [linguConfig]\n );\n\n console.log(`${LOG_PREFIX} Current state:`, {\n messagesCount: messages.length,\n isLoading,\n hasConfig: !!config,\n isSessionActive,\n currentSessionId: currentSessionIdRef.current,\n });\n\n return {\n messages,\n isLoading,\n config,\n sendMessage,\n startSession,\n endSession,\n isSessionActive,\n clearHistory,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ LinguChat: true,
8
+ NativeChatUI: true,
9
+ LinguWebView: true,
10
+ MessageBubble: true,
11
+ TypingIndicator: true,
12
+ LinguProvider: true,
13
+ useLinguContext: true,
14
+ ThemeProvider: true,
15
+ useTheme: true,
16
+ createTheme: true,
17
+ useLinguChat: true,
18
+ LinguAPI: true,
19
+ SessionManager: true,
20
+ StorageManager: true
21
+ };
22
+ Object.defineProperty(exports, "LinguAPI", {
23
+ enumerable: true,
24
+ get: function () {
25
+ return _LinguAPI.LinguAPI;
26
+ }
27
+ });
28
+ Object.defineProperty(exports, "LinguChat", {
29
+ enumerable: true,
30
+ get: function () {
31
+ return _LinguChat.LinguChat;
32
+ }
33
+ });
34
+ Object.defineProperty(exports, "LinguProvider", {
35
+ enumerable: true,
36
+ get: function () {
37
+ return _context.LinguProvider;
38
+ }
39
+ });
40
+ Object.defineProperty(exports, "LinguWebView", {
41
+ enumerable: true,
42
+ get: function () {
43
+ return _LinguWebView.LinguWebView;
44
+ }
45
+ });
46
+ Object.defineProperty(exports, "MessageBubble", {
47
+ enumerable: true,
48
+ get: function () {
49
+ return _MessageBubble.MessageBubble;
50
+ }
51
+ });
52
+ Object.defineProperty(exports, "NativeChatUI", {
53
+ enumerable: true,
54
+ get: function () {
55
+ return _NativeChatUI.NativeChatUI;
56
+ }
57
+ });
58
+ Object.defineProperty(exports, "SessionManager", {
59
+ enumerable: true,
60
+ get: function () {
61
+ return _SessionManager.SessionManager;
62
+ }
63
+ });
64
+ Object.defineProperty(exports, "StorageManager", {
65
+ enumerable: true,
66
+ get: function () {
67
+ return _StorageManager.StorageManager;
68
+ }
69
+ });
70
+ Object.defineProperty(exports, "ThemeProvider", {
71
+ enumerable: true,
72
+ get: function () {
73
+ return _theme.ThemeProvider;
74
+ }
75
+ });
76
+ Object.defineProperty(exports, "TypingIndicator", {
77
+ enumerable: true,
78
+ get: function () {
79
+ return _TypingIndicator.TypingIndicator;
80
+ }
81
+ });
82
+ Object.defineProperty(exports, "createTheme", {
83
+ enumerable: true,
84
+ get: function () {
85
+ return _theme.createTheme;
86
+ }
87
+ });
88
+ Object.defineProperty(exports, "useLinguChat", {
89
+ enumerable: true,
90
+ get: function () {
91
+ return _useLinguChat.useLinguChat;
92
+ }
93
+ });
94
+ Object.defineProperty(exports, "useLinguContext", {
95
+ enumerable: true,
96
+ get: function () {
97
+ return _context.useLinguContext;
98
+ }
99
+ });
100
+ Object.defineProperty(exports, "useTheme", {
101
+ enumerable: true,
102
+ get: function () {
103
+ return _theme.useTheme;
104
+ }
105
+ });
106
+ var _LinguChat = require("./components/LinguChat");
107
+ var _NativeChatUI = require("./components/NativeChatUI");
108
+ var _LinguWebView = require("./components/LinguWebView");
109
+ var _MessageBubble = require("./components/MessageBubble");
110
+ var _TypingIndicator = require("./components/TypingIndicator");
111
+ var _context = require("./context");
112
+ var _theme = require("./theme");
113
+ var _useLinguChat = require("./hooks/useLinguChat");
114
+ var _LinguAPI = require("./services/LinguAPI");
115
+ var _SessionManager = require("./services/SessionManager");
116
+ var _StorageManager = require("./services/StorageManager");
117
+ var _utils = require("./utils");
118
+ Object.keys(_utils).forEach(function (key) {
119
+ if (key === "default" || key === "__esModule") return;
120
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
121
+ if (key in exports && exports[key] === _utils[key]) return;
122
+ Object.defineProperty(exports, key, {
123
+ enumerable: true,
124
+ get: function () {
125
+ return _utils[key];
126
+ }
127
+ });
128
+ });
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_LinguChat","require","_NativeChatUI","_LinguWebView","_MessageBubble","_TypingIndicator","_context","_theme","_useLinguChat","_LinguAPI","_SessionManager","_StorageManager","_utils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["/**\n * Lingu React Native SDK\n * Standalone AI chat SDK with native UI and theme support\n */\n\n// Main components\nexport { LinguChat } from './components/LinguChat';\nexport { NativeChatUI } from './components/NativeChatUI';\nexport { LinguWebView } from './components/LinguWebView';\nexport { MessageBubble } from './components/MessageBubble';\nexport { TypingIndicator } from './components/TypingIndicator';\n\n// Context and state management\nexport { LinguProvider, useLinguContext } from './context';\n\n// Theme system\nexport { ThemeProvider, useTheme, createTheme } from './theme';\nexport type { Theme, ThemeColors } from './theme';\n\n// Hooks\nexport { useLinguChat } from './hooks/useLinguChat';\n\n// Services\nexport { LinguAPI } from './services/LinguAPI';\nexport { SessionManager } from './services/SessionManager';\nexport { StorageManager } from './services/StorageManager';\n\n// Utils\nexport * from './utils';\n\n// Types\nexport type {\n LinguConfig,\n ChatPosition,\n ThemeMode,\n Message,\n MessageSender,\n WidgetConfig,\n SessionData,\n ApiResponse,\n ChatResponse,\n SessionResponse,\n} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAGA,IAAAK,QAAA,GAAAL,OAAA;AAGA,IAAAM,MAAA,GAAAN,OAAA;AAIA,IAAAO,aAAA,GAAAP,OAAA;AAGA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,eAAA,GAAAT,OAAA;AACA,IAAAU,eAAA,GAAAV,OAAA;AAGA,IAAAW,MAAA,GAAAX,OAAA;AAAAY,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}