@ihoomanai/react-chat 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,405 @@
1
+ /**
2
+ * @ihoomanai/react-chat v2.0.0
3
+ * React components and hooks for Ihooman Chat Widget - secure Widget ID based initialization
4
+ *
5
+ * @license MIT
6
+ * @copyright Ihooman AI
7
+ */
8
+ 'use strict';
9
+
10
+ var react = require('react');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ /**
14
+ * React Context for Ihooman Chat Widget
15
+ *
16
+ * Provides global access to widget state and controls
17
+ * throughout the React component tree.
18
+ */
19
+ /**
20
+ * Default context value (used when no provider is present)
21
+ */
22
+ const defaultContextValue = {
23
+ widgetRef: null,
24
+ setWidgetRef: () => {
25
+ console.warn('ChatWidgetProvider not found. Wrap your app with <ChatWidgetProvider>.');
26
+ },
27
+ isReady: false,
28
+ setIsReady: () => { },
29
+ isOpen: false,
30
+ setIsOpen: () => { },
31
+ isConnected: false,
32
+ setIsConnected: () => { },
33
+ messages: [],
34
+ setMessages: () => { },
35
+ unreadCount: 0,
36
+ setUnreadCount: () => { },
37
+ };
38
+ /**
39
+ * React Context for the Chat Widget
40
+ */
41
+ const ChatWidgetContext = react.createContext(defaultContextValue);
42
+ /**
43
+ * Hook to access the ChatWidget context
44
+ * @internal
45
+ */
46
+ function useChatWidgetContext() {
47
+ return react.useContext(ChatWidgetContext);
48
+ }
49
+ /**
50
+ * Type guard to check if widget is available
51
+ */
52
+ function isWidgetAvailable(widget) {
53
+ return widget !== null;
54
+ }
55
+
56
+ /**
57
+ * ChatWidget React Component
58
+ *
59
+ * A React wrapper for the Ihooman Chat Widget that handles
60
+ * initialization, lifecycle management, and SSR compatibility.
61
+ *
62
+ * @module @ihooman/react-chat
63
+ */
64
+ /**
65
+ * ChatWidget Component
66
+ *
67
+ * Renders the Ihooman Chat Widget with React lifecycle management.
68
+ * Supports SSR by deferring initialization to useEffect.
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * import { ChatWidget } from '@ihooman/react-chat';
73
+ *
74
+ * function App() {
75
+ * return (
76
+ * <ChatWidget
77
+ * widgetId="wgt_abc123def456"
78
+ * position="bottom-right"
79
+ * onReady={() => console.log('Widget ready!')}
80
+ * />
81
+ * );
82
+ * }
83
+ * ```
84
+ *
85
+ * @example With user information
86
+ * ```tsx
87
+ * <ChatWidget
88
+ * widgetId="wgt_abc123def456"
89
+ * user={{ name: 'John Doe', email: 'john@example.com' }}
90
+ * />
91
+ * ```
92
+ */
93
+ function ChatWidget({ widgetId, serverUrl, theme, position, startOpen, user, title, subtitle, welcomeMessage, placeholder, primaryColor, gradientFrom, gradientTo, showTimestamps, showTypingIndicator, enableSounds, enableFileUpload, persistSession, zIndex, width, height, buttonSize, borderRadius, fontFamily, avatarUrl, poweredBy, onReady, onOpen, onClose, onMessage, onError, }) {
94
+ const widgetInstanceRef = react.useRef(null);
95
+ const isInitializedRef = react.useRef(false);
96
+ const context = useChatWidgetContext();
97
+ // Memoize callbacks to prevent unnecessary re-initialization
98
+ const handleReady = react.useCallback(() => {
99
+ context.setIsReady(true);
100
+ onReady?.();
101
+ }, [context, onReady]);
102
+ const handleOpen = react.useCallback(() => {
103
+ context.setIsOpen(true);
104
+ onOpen?.();
105
+ }, [context, onOpen]);
106
+ const handleClose = react.useCallback(() => {
107
+ context.setIsOpen(false);
108
+ onClose?.();
109
+ }, [context, onClose]);
110
+ const handleMessage = react.useCallback((message) => {
111
+ // Update messages in context
112
+ if (widgetInstanceRef.current) {
113
+ const state = widgetInstanceRef.current.getState();
114
+ context.setMessages(state.messages);
115
+ context.setUnreadCount(state.unreadCount);
116
+ }
117
+ onMessage?.(message);
118
+ }, [context, onMessage]);
119
+ const handleError = react.useCallback((error) => {
120
+ onError?.(error);
121
+ }, [onError]);
122
+ // Initialize widget on mount (client-side only for SSR compatibility)
123
+ react.useEffect(() => {
124
+ // Skip if already initialized or if we're in SSR
125
+ if (isInitializedRef.current || typeof window === 'undefined') {
126
+ return;
127
+ }
128
+ let isMounted = true;
129
+ const initWidget = async () => {
130
+ try {
131
+ // Dynamic import to support SSR
132
+ const { IhoomanChat } = await import('@ihooman/chat-widget');
133
+ if (!isMounted)
134
+ return;
135
+ // Build configuration
136
+ const config = {
137
+ widgetId,
138
+ serverUrl,
139
+ theme,
140
+ position,
141
+ startOpen,
142
+ title,
143
+ subtitle,
144
+ welcomeMessage,
145
+ placeholder,
146
+ primaryColor,
147
+ gradientFrom,
148
+ gradientTo,
149
+ showTimestamps,
150
+ showTypingIndicator,
151
+ enableSounds,
152
+ enableFileUpload,
153
+ persistSession,
154
+ zIndex,
155
+ width,
156
+ height,
157
+ buttonSize,
158
+ borderRadius,
159
+ fontFamily,
160
+ avatarUrl,
161
+ poweredBy,
162
+ onReady: handleReady,
163
+ onOpen: handleOpen,
164
+ onClose: handleClose,
165
+ onMessage: handleMessage,
166
+ onError: handleError,
167
+ };
168
+ // Initialize the widget
169
+ const instance = await IhoomanChat.init(config);
170
+ if (!isMounted) {
171
+ // Component unmounted during initialization, clean up
172
+ instance?.destroy();
173
+ return;
174
+ }
175
+ if (instance) {
176
+ widgetInstanceRef.current = instance;
177
+ context.setWidgetRef(instance);
178
+ isInitializedRef.current = true;
179
+ // Set user info if provided
180
+ if (user) {
181
+ instance.setUser(user);
182
+ }
183
+ // Sync initial state
184
+ const state = instance.getState();
185
+ context.setIsOpen(state.isOpen);
186
+ context.setIsConnected(state.isConnected);
187
+ context.setMessages(state.messages);
188
+ context.setUnreadCount(state.unreadCount);
189
+ }
190
+ }
191
+ catch (error) {
192
+ console.error('Failed to initialize Ihooman Chat Widget:', error);
193
+ handleError(error);
194
+ }
195
+ };
196
+ initWidget();
197
+ // Cleanup on unmount
198
+ return () => {
199
+ isMounted = false;
200
+ if (widgetInstanceRef.current) {
201
+ widgetInstanceRef.current.destroy();
202
+ widgetInstanceRef.current = null;
203
+ context.setWidgetRef(null);
204
+ context.setIsReady(false);
205
+ context.setIsOpen(false);
206
+ context.setIsConnected(false);
207
+ context.setMessages([]);
208
+ context.setUnreadCount(0);
209
+ isInitializedRef.current = false;
210
+ }
211
+ };
212
+ // Note: We intentionally only run this effect once on mount
213
+ // eslint-disable-next-line react-hooks/exhaustive-deps
214
+ }, [widgetId]);
215
+ // Update user info when it changes
216
+ react.useEffect(() => {
217
+ if (widgetInstanceRef.current && user) {
218
+ widgetInstanceRef.current.setUser(user);
219
+ }
220
+ }, [user]);
221
+ // This component doesn't render any DOM elements
222
+ // The widget injects its own DOM elements
223
+ return null;
224
+ }
225
+
226
+ /**
227
+ * Provider component for the Chat Widget context
228
+ *
229
+ * @example
230
+ * ```tsx
231
+ * import { ChatWidgetProvider, ChatWidget } from '@ihooman/react-chat';
232
+ *
233
+ * function App() {
234
+ * return (
235
+ * <ChatWidgetProvider>
236
+ * <ChatWidget widgetId="wgt_abc123def456" />
237
+ * <YourApp />
238
+ * </ChatWidgetProvider>
239
+ * );
240
+ * }
241
+ * ```
242
+ */
243
+ function ChatWidgetProvider({ children }) {
244
+ const [widgetRef, setWidgetRefState] = react.useState(null);
245
+ const [isReady, setIsReady] = react.useState(false);
246
+ const [isOpen, setIsOpen] = react.useState(false);
247
+ const [isConnected, setIsConnected] = react.useState(false);
248
+ const [messages, setMessages] = react.useState([]);
249
+ const [unreadCount, setUnreadCount] = react.useState(0);
250
+ const setWidgetRef = react.useCallback((widget) => {
251
+ setWidgetRefState(widget);
252
+ }, []);
253
+ const contextValue = react.useMemo(() => ({
254
+ widgetRef,
255
+ setWidgetRef,
256
+ isReady,
257
+ setIsReady,
258
+ isOpen,
259
+ setIsOpen,
260
+ isConnected,
261
+ setIsConnected,
262
+ messages,
263
+ setMessages,
264
+ unreadCount,
265
+ setUnreadCount,
266
+ }), [widgetRef, setWidgetRef, isReady, isOpen, isConnected, messages, unreadCount]);
267
+ return (jsxRuntime.jsx(ChatWidgetContext.Provider, { value: contextValue, children: children }));
268
+ }
269
+
270
+ /**
271
+ * useChatWidget Hook
272
+ *
273
+ * Provides programmatic control over the Ihooman Chat Widget
274
+ * from any component within the ChatWidgetProvider.
275
+ *
276
+ * @module @ihooman/react-chat
277
+ */
278
+ /**
279
+ * Hook for controlling the Ihooman Chat Widget
280
+ *
281
+ * Must be used within a ChatWidgetProvider. Provides access to
282
+ * widget state and control functions.
283
+ *
284
+ * @returns Object containing widget state and control functions
285
+ *
286
+ * @example Basic usage
287
+ * ```tsx
288
+ * import { useChatWidget } from '@ihooman/react-chat';
289
+ *
290
+ * function SupportButton() {
291
+ * const { open, isReady } = useChatWidget();
292
+ *
293
+ * return (
294
+ * <button onClick={open} disabled={!isReady}>
295
+ * Need Help?
296
+ * </button>
297
+ * );
298
+ * }
299
+ * ```
300
+ *
301
+ * @example Sending messages programmatically
302
+ * ```tsx
303
+ * function QuickActions() {
304
+ * const { sendMessage, isReady } = useChatWidget();
305
+ *
306
+ * const handleOrderHelp = () => {
307
+ * sendMessage('I need help with my order');
308
+ * };
309
+ *
310
+ * return (
311
+ * <button onClick={handleOrderHelp} disabled={!isReady}>
312
+ * Order Help
313
+ * </button>
314
+ * );
315
+ * }
316
+ * ```
317
+ *
318
+ * @example Accessing widget state
319
+ * ```tsx
320
+ * function ChatStatus() {
321
+ * const { isOpen, isConnected, unreadCount } = useChatWidget();
322
+ *
323
+ * return (
324
+ * <div>
325
+ * <span>Chat: {isOpen ? 'Open' : 'Closed'}</span>
326
+ * <span>Status: {isConnected ? 'Connected' : 'Disconnected'}</span>
327
+ * {unreadCount > 0 && <span>({unreadCount} unread)</span>}
328
+ * </div>
329
+ * );
330
+ * }
331
+ * ```
332
+ */
333
+ function useChatWidget() {
334
+ const context = useChatWidgetContext();
335
+ /**
336
+ * Open the chat widget window
337
+ */
338
+ const open = react.useCallback(() => {
339
+ if (isWidgetAvailable(context.widgetRef)) {
340
+ context.widgetRef.open();
341
+ }
342
+ }, [context.widgetRef]);
343
+ /**
344
+ * Close the chat widget window
345
+ */
346
+ const close = react.useCallback(() => {
347
+ if (isWidgetAvailable(context.widgetRef)) {
348
+ context.widgetRef.close();
349
+ }
350
+ }, [context.widgetRef]);
351
+ /**
352
+ * Toggle the chat widget window open/closed
353
+ */
354
+ const toggle = react.useCallback(() => {
355
+ if (isWidgetAvailable(context.widgetRef)) {
356
+ context.widgetRef.toggle();
357
+ }
358
+ }, [context.widgetRef]);
359
+ /**
360
+ * Send a message programmatically
361
+ */
362
+ const sendMessage = react.useCallback((content) => {
363
+ if (isWidgetAvailable(context.widgetRef)) {
364
+ context.widgetRef.sendMessage(content);
365
+ }
366
+ }, [context.widgetRef]);
367
+ /**
368
+ * Set user information for personalization
369
+ */
370
+ const setUser = react.useCallback((user) => {
371
+ if (isWidgetAvailable(context.widgetRef)) {
372
+ context.widgetRef.setUser(user);
373
+ }
374
+ }, [context.widgetRef]);
375
+ /**
376
+ * Clear chat history and start a new conversation
377
+ */
378
+ const clearHistory = react.useCallback(() => {
379
+ if (isWidgetAvailable(context.widgetRef)) {
380
+ context.widgetRef.clearHistory();
381
+ context.setMessages([]);
382
+ context.setUnreadCount(0);
383
+ }
384
+ }, [context]);
385
+ return {
386
+ isOpen: context.isOpen,
387
+ isReady: context.isReady,
388
+ isConnected: context.isConnected,
389
+ open,
390
+ close,
391
+ toggle,
392
+ sendMessage,
393
+ setUser,
394
+ clearHistory,
395
+ messages: context.messages,
396
+ unreadCount: context.unreadCount,
397
+ };
398
+ }
399
+
400
+ exports.ChatWidget = ChatWidget;
401
+ exports.ChatWidgetContext = ChatWidgetContext;
402
+ exports.ChatWidgetProvider = ChatWidgetProvider;
403
+ exports.useChatWidget = useChatWidget;
404
+ exports.useChatWidgetContext = useChatWidgetContext;
405
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/context.tsx","../src/ChatWidget.tsx","../src/ChatWidgetProvider.tsx","../src/useChatWidget.ts"],"sourcesContent":[null,null,null,null],"names":["createContext","useContext","useRef","useCallback","useEffect","useState","useMemo","_jsx"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @ihooman/react-chat
3
+ *
4
+ * React components and hooks for the Ihooman Chat Widget.
5
+ * Provides native React integration with proper lifecycle management
6
+ * and SSR compatibility.
7
+ *
8
+ * @packageDocumentation
9
+ * @module @ihooman/react-chat
10
+ *
11
+ * @example Basic usage
12
+ * ```tsx
13
+ * import { ChatWidget } from '@ihooman/react-chat';
14
+ *
15
+ * function App() {
16
+ * return (
17
+ * <ChatWidget
18
+ * widgetId="wgt_abc123def456"
19
+ * position="bottom-right"
20
+ * />
21
+ * );
22
+ * }
23
+ * ```
24
+ *
25
+ * @example With provider and hook
26
+ * ```tsx
27
+ * import { ChatWidgetProvider, ChatWidget, useChatWidget } from '@ihooman/react-chat';
28
+ *
29
+ * function SupportButton() {
30
+ * const { open, isReady } = useChatWidget();
31
+ * return (
32
+ * <button onClick={open} disabled={!isReady}>
33
+ * Need Help?
34
+ * </button>
35
+ * );
36
+ * }
37
+ *
38
+ * function App() {
39
+ * return (
40
+ * <ChatWidgetProvider>
41
+ * <ChatWidget widgetId="wgt_abc123def456" />
42
+ * <SupportButton />
43
+ * </ChatWidgetProvider>
44
+ * );
45
+ * }
46
+ * ```
47
+ */
48
+ export { ChatWidget } from './ChatWidget';
49
+ export { ChatWidgetProvider } from './ChatWidgetProvider';
50
+ export { useChatWidget } from './useChatWidget';
51
+ export { ChatWidgetContext, useChatWidgetContext } from './context';
52
+ export type { ChatWidgetProps, UseChatWidgetReturn, ChatWidgetProviderProps, WidgetConfig, UserInfo, Message, WidgetState, WidgetEvent, EventCallback, ThemeConfig, BehaviorConfig, BrandingConfig, IhoomanChatAPI, } from './types';
53
+ export type { ChatWidgetContextValue } from './context';
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGpE,YAAY,EAEV,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EAEvB,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}