@buni.ai/chatbot-react 1.0.20 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { createContext, useState, useEffect, useContext, useCallback } from 'react';
2
+ import { createContext, useState, useEffect, useMemo, useContext, useCallback } from 'react';
3
3
  import { BuniChatWidget as BuniChatWidget$1 } from '@buni.ai/chatbot-core';
4
4
 
5
5
  const BuniChatContext = createContext(null);
@@ -16,7 +16,6 @@ const BuniChatProvider = ({ options, children, }) => {
16
16
  const initWidget = async () => {
17
17
  try {
18
18
  await widget.initialize({ ...options, framework: "react" });
19
- setIsReady(true);
20
19
  }
21
20
  catch (error) {
22
21
  console.error("Failed to initialize BuniChat widget:", error);
@@ -27,6 +26,10 @@ const BuniChatProvider = ({ options, children, }) => {
27
26
  const handleStateChange = () => {
28
27
  setState(widget.getState());
29
28
  };
29
+ const handleConnectionReady = () => {
30
+ setIsReady(true);
31
+ };
32
+ widget.on("connection_ready", handleConnectionReady);
30
33
  widget.on("ready", handleStateChange);
31
34
  widget.on("visibility_changed", handleStateChange);
32
35
  widget.on("minimized", handleStateChange);
@@ -36,7 +39,8 @@ const BuniChatProvider = ({ options, children, }) => {
36
39
  widget.destroy();
37
40
  };
38
41
  }, [widget, options]);
39
- return (jsx(BuniChatContext.Provider, { value: { widget, state, isReady }, children: children }));
42
+ const value = useMemo(() => ({ widget, state, isReady }), [widget, state, isReady]);
43
+ return (jsx(BuniChatContext.Provider, { value: value, children: children }));
40
44
  };
41
45
  // Main hook for using BuniChat
42
46
  function useBuniChat(options) {
@@ -59,7 +63,6 @@ function useBuniChat(options) {
59
63
  const initWidget = async () => {
60
64
  try {
61
65
  await activeWidget.initialize(options);
62
- setIsReady(true);
63
66
  }
64
67
  catch (error) {
65
68
  console.error("Failed to initialize BuniChat widget:", error);
@@ -69,6 +72,10 @@ function useBuniChat(options) {
69
72
  const handleStateChange = () => {
70
73
  setState(activeWidget.getState());
71
74
  };
75
+ const handleConnectionReady = () => {
76
+ setIsReady(true);
77
+ };
78
+ activeWidget.on("connection_ready", handleConnectionReady);
72
79
  activeWidget.on("ready", handleStateChange);
73
80
  activeWidget.on("visibility_changed", handleStateChange);
74
81
  activeWidget.on("minimized", handleStateChange);
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/hooks.tsx","../src/components.tsx"],"sourcesContent":["// @buni.ai/chatbot-react - React hooks and components\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n ReactNode,\n} from \"react\";\nimport {\n BuniChatWidget,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n BuniChatConfig,\n} from \"@buni.ai/chatbot-core\";\n\n// Context for providing widget instance\ninterface BuniChatContextType {\n widget: BuniChatWidget | null;\n state: BuniChatState;\n isReady: boolean;\n}\n\nconst BuniChatContext = createContext<BuniChatContextType | null>(null);\n\n// Provider component\ninterface BuniChatProviderProps {\n options: BuniChatOptions;\n children?: ReactNode;\n}\n\nexport const BuniChatProvider: React.FC<BuniChatProviderProps> = ({\n options,\n children,\n}) => {\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n const initWidget = async () => {\n try {\n await widget.initialize({ ...options, framework: \"react\" });\n setIsReady(true);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n // Set up event listeners\n const handleStateChange = () => {\n setState(widget.getState());\n };\n\n widget.on(\"ready\", handleStateChange);\n widget.on(\"visibility_changed\", handleStateChange);\n widget.on(\"minimized\", handleStateChange);\n widget.on(\"maximized\", handleStateChange);\n widget.on(\"new_message\", handleStateChange);\n\n return () => {\n widget.destroy();\n };\n }, [widget, options]);\n\n return (\n <BuniChatContext.Provider value={{ widget, state, isReady }}>\n {children}\n </BuniChatContext.Provider>\n );\n};\n\n// Main hook for using BuniChat\nexport function useBuniChat(options?: BuniChatOptions) {\n const context = useContext(BuniChatContext);\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n // Use context widget if available, otherwise use standalone\n const activeWidget = context?.widget || widget;\n const activeState = context?.state || state;\n const activeIsReady = context?.isReady || isReady;\n\n useEffect(() => {\n if (options && !context) {\n // Initialize standalone widget\n const initWidget = async () => {\n try {\n await activeWidget.initialize(options);\n setIsReady(true);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n const handleStateChange = () => {\n setState(activeWidget.getState());\n };\n\n activeWidget.on(\"ready\", handleStateChange);\n activeWidget.on(\"visibility_changed\", handleStateChange);\n activeWidget.on(\"minimized\", handleStateChange);\n activeWidget.on(\"maximized\", handleStateChange);\n activeWidget.on(\"new_message\", handleStateChange);\n\n return () => {\n activeWidget.destroy();\n };\n }\n }, [options, context, activeWidget]);\n\n const show = useCallback(() => {\n activeWidget.show();\n }, [activeWidget]);\n\n const hide = useCallback(() => {\n activeWidget.hide();\n }, [activeWidget]);\n\n const toggle = useCallback(() => {\n activeWidget.toggle();\n }, [activeWidget]);\n\n const minimize = useCallback(() => {\n activeWidget.minimize();\n }, [activeWidget]);\n\n const maximize = useCallback(() => {\n activeWidget.maximize();\n }, [activeWidget]);\n\n const setCustomerData = useCallback(\n (data: CustomerData) => {\n activeWidget.setCustomerData(data);\n },\n [activeWidget],\n );\n\n const setSessionVariables = useCallback(\n (variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n },\n [activeWidget],\n );\n\n const sendMessage = useCallback(\n (message: string) => {\n activeWidget.sendMessage(message);\n },\n [activeWidget],\n );\n\n const setTheme = useCallback(\n (theme: \"light\" | \"dark\" | \"system\") => {\n activeWidget.setTheme(theme);\n },\n [activeWidget],\n );\n\n const open = useCallback(() => {\n activeWidget.open();\n }, [activeWidget]);\n\n const close = useCallback(() => {\n activeWidget.close();\n }, [activeWidget]);\n\n return {\n // State\n ...activeState,\n isReady: activeIsReady,\n\n // Actions\n show,\n hide,\n toggle,\n minimize,\n maximize,\n setCustomerData,\n setSessionVariables,\n sendMessage,\n setTheme,\n open,\n close,\n\n // Direct widget access\n widget: activeWidget,\n };\n}\n\n// Hook for widget events\nexport function useWidgetEvents() {\n const { widget } = useBuniChat();\n\n const on = useCallback(\n (event: string, callback: Function) => {\n widget?.on(event, callback);\n },\n [widget],\n );\n\n const off = useCallback(\n (event: string, callback?: Function) => {\n widget?.off(event, callback);\n },\n [widget],\n );\n\n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerData] = useState<CustomerData | null>(\n null,\n );\n\n const updateCustomerData = useCallback(\n (data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerData(data);\n },\n [widget],\n );\n\n const getCustomerData = useCallback(() => {\n return widget?.getCustomerData() || null;\n }, [widget]);\n\n useEffect(() => {\n if (widget) {\n const handleCustomerDataUpdate = (event: { data: CustomerData }) => {\n setCustomerData(event.data);\n };\n\n widget.on(\"customer_data_updated\", handleCustomerDataUpdate);\n\n return () => {\n widget.off(\"customer_data_updated\", handleCustomerDataUpdate);\n };\n }\n }, [widget]);\n\n return {\n customerData,\n setCustomerData: updateCustomerData,\n getCustomerData,\n };\n}\n","// Components for @buni.ai/chatbot-react\n\nimport React, { ReactNode, useEffect } from \"react\";\nimport { useBuniChat } from \"./hooks\";\nimport { BuniChatConfig } from \"@buni.ai/chatbot-core\";\n\n// Widget component - can be used standalone or within provider\ninterface BuniChatWidgetProps {\n token?: string;\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({\n token,\n config,\n}) => {\n // Use the hook - if there's a provider, it uses that; otherwise standalone\n const options = token ? { token, config } : undefined;\n useBuniChat(options);\n\n // The core widget renders directly to document.body\n return null;\n};\n\n// Chat button component\ninterface BuniChatButtonProps {\n onClick?: () => void;\n children?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n showUnreadCount?: boolean;\n}\n\nexport const BuniChatButton: React.FC<BuniChatButtonProps> = ({\n onClick,\n children = \"Chat with us\",\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={className}\n style={style}\n >\n {children}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-badge\">{unreadCount}</span>\n )}\n </button>\n );\n};\n\n// Floating button component\ninterface BuniChatFloatingButtonProps\n extends Omit<BuniChatButtonProps, \"children\"> {\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n size?: \"small\" | \"medium\" | \"large\";\n theme?: \"default\" | \"minimal\" | \"colorful\";\n}\n\nexport const BuniChatFloatingButton: React.FC<BuniChatFloatingButtonProps> = ({\n position = \"bottom-right\",\n size = \"medium\",\n theme = \"default\",\n onClick,\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n const positionStyles = {\n \"bottom-right\": { bottom: \"20px\", right: \"20px\" },\n \"bottom-left\": { bottom: \"20px\", left: \"20px\" },\n \"top-right\": { top: \"20px\", right: \"20px\" },\n \"top-left\": { top: \"20px\", left: \"20px\" },\n };\n\n const sizeStyles = {\n small: { width: \"48px\", height: \"48px\", fontSize: \"20px\" },\n medium: { width: \"56px\", height: \"56px\", fontSize: \"24px\" },\n large: { width: \"64px\", height: \"64px\", fontSize: \"28px\" },\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={`buni-chat-floating-button ${theme} ${className}`}\n style={{\n position: \"fixed\",\n ...positionStyles[position],\n ...sizeStyles[size],\n borderRadius: \"50%\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n zIndex: 9999,\n ...style,\n }}\n >\n 💬\n {showUnreadCount && unreadCount > 0 && (\n <span\n className=\"buni-chat-badge\"\n style={{\n position: \"absolute\",\n top: \"-5px\",\n right: \"-5px\",\n background: \"red\",\n color: \"white\",\n borderRadius: \"50%\",\n padding: \"2px 6px\",\n fontSize: \"12px\",\n fontWeight: \"bold\",\n }}\n >\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n"],"names":["BuniChatWidget","_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/hooks.tsx","../src/components.tsx"],"sourcesContent":["// @buni.ai/chatbot-react - React hooks and components\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useMemo,\n ReactNode,\n} from \"react\";\nimport {\n BuniChatWidget,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"@buni.ai/chatbot-core\";\n\n// Context for providing widget instance\ninterface BuniChatContextType {\n widget: BuniChatWidget | null;\n state: BuniChatState;\n isReady: boolean;\n}\n\nconst BuniChatContext = createContext<BuniChatContextType | null>(null);\n\n// Provider component\ninterface BuniChatProviderProps {\n options: BuniChatOptions;\n children?: ReactNode;\n}\n\nexport const BuniChatProvider: React.FC<BuniChatProviderProps> = ({\n options,\n children,\n}) => {\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n const initWidget = async () => {\n try {\n await widget.initialize({ ...options, framework: \"react\" });\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n // Set up event listeners\n const handleStateChange = () => {\n setState(widget.getState());\n };\n\n const handleConnectionReady = () => {\n setIsReady(true);\n };\n\n widget.on(\"connection_ready\", handleConnectionReady);\n widget.on(\"ready\", handleStateChange);\n widget.on(\"visibility_changed\", handleStateChange);\n widget.on(\"minimized\", handleStateChange);\n widget.on(\"maximized\", handleStateChange);\n widget.on(\"new_message\", handleStateChange);\n\n return () => {\n widget.destroy();\n };\n }, [widget, options]);\n\n const value = useMemo(\n () => ({ widget, state, isReady }),\n [widget, state, isReady]\n );\n\n return (\n <BuniChatContext.Provider value={value}>\n {children}\n </BuniChatContext.Provider>\n );\n};\n\n// Main hook for using BuniChat\nexport function useBuniChat(options?: BuniChatOptions) {\n const context = useContext(BuniChatContext);\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n // Use context widget if available, otherwise use standalone\n const activeWidget = context?.widget || widget;\n const activeState = context?.state || state;\n const activeIsReady = context?.isReady || isReady;\n\n useEffect(() => {\n if (options && !context) {\n // Initialize standalone widget\n const initWidget = async () => {\n try {\n await activeWidget.initialize(options);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n const handleStateChange = () => {\n setState(activeWidget.getState());\n };\n\n const handleConnectionReady = () => {\n setIsReady(true);\n };\n\n activeWidget.on(\"connection_ready\", handleConnectionReady);\n activeWidget.on(\"ready\", handleStateChange);\n activeWidget.on(\"visibility_changed\", handleStateChange);\n activeWidget.on(\"minimized\", handleStateChange);\n activeWidget.on(\"maximized\", handleStateChange);\n activeWidget.on(\"new_message\", handleStateChange);\n\n return () => {\n activeWidget.destroy();\n };\n }\n }, [options, context, activeWidget]);\n\n const show = useCallback(() => {\n activeWidget.show();\n }, [activeWidget]);\n\n const hide = useCallback(() => {\n activeWidget.hide();\n }, [activeWidget]);\n\n const toggle = useCallback(() => {\n activeWidget.toggle();\n }, [activeWidget]);\n\n const minimize = useCallback(() => {\n activeWidget.minimize();\n }, [activeWidget]);\n\n const maximize = useCallback(() => {\n activeWidget.maximize();\n }, [activeWidget]);\n\n const setCustomerData = useCallback(\n (data: CustomerData) => {\n activeWidget.setCustomerData(data);\n },\n [activeWidget],\n );\n\n const setSessionVariables = useCallback(\n (variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n },\n [activeWidget],\n );\n\n const sendMessage = useCallback(\n (message: string) => {\n activeWidget.sendMessage(message);\n },\n [activeWidget],\n );\n\n const setTheme = useCallback(\n (theme: \"light\" | \"dark\" | \"system\") => {\n activeWidget.setTheme(theme);\n },\n [activeWidget],\n );\n\n const open = useCallback(() => {\n activeWidget.open();\n }, [activeWidget]);\n\n const close = useCallback(() => {\n activeWidget.close();\n }, [activeWidget]);\n\n return {\n // State\n ...activeState,\n isReady: activeIsReady,\n\n // Actions\n show,\n hide,\n toggle,\n minimize,\n maximize,\n setCustomerData,\n setSessionVariables,\n sendMessage,\n setTheme,\n open,\n close,\n\n // Direct widget access\n widget: activeWidget,\n };\n}\n\n// Hook for widget events\nexport function useWidgetEvents() {\n const { widget } = useBuniChat();\n\n const on = useCallback(\n (event: string, callback: Function) => {\n widget?.on(event, callback);\n },\n [widget],\n );\n\n const off = useCallback(\n (event: string, callback?: Function) => {\n widget?.off(event, callback);\n },\n [widget],\n );\n\n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerData] = useState<CustomerData | null>(\n null,\n );\n\n const updateCustomerData = useCallback(\n (data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerData(data);\n },\n [widget],\n );\n\n const getCustomerData = useCallback(() => {\n return widget?.getCustomerData() || null;\n }, [widget]);\n\n useEffect(() => {\n if (widget) {\n const handleCustomerDataUpdate = (event: { data: CustomerData }) => {\n setCustomerData(event.data);\n };\n\n widget.on(\"customer_data_updated\", handleCustomerDataUpdate);\n\n return () => {\n widget.off(\"customer_data_updated\", handleCustomerDataUpdate);\n };\n }\n }, [widget]);\n\n return {\n customerData,\n setCustomerData: updateCustomerData,\n getCustomerData,\n };\n}\n","// Components for @buni.ai/chatbot-react\n\nimport React, { ReactNode, useEffect } from \"react\";\nimport { useBuniChat } from \"./hooks\";\nimport { BuniChatConfig } from \"@buni.ai/chatbot-core\";\n\n// Widget component - can be used standalone or within provider\ninterface BuniChatWidgetProps {\n token?: string;\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({\n token,\n config,\n}) => {\n // Use the hook - if there's a provider, it uses that; otherwise standalone\n const options = token ? { token, config } : undefined;\n useBuniChat(options);\n\n // The core widget renders directly to document.body\n return null;\n};\n\n// Chat button component\ninterface BuniChatButtonProps {\n onClick?: () => void;\n children?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n showUnreadCount?: boolean;\n}\n\nexport const BuniChatButton: React.FC<BuniChatButtonProps> = ({\n onClick,\n children = \"Chat with us\",\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={className}\n style={style}\n >\n {children}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-badge\">{unreadCount}</span>\n )}\n </button>\n );\n};\n\n// Floating button component\ninterface BuniChatFloatingButtonProps\n extends Omit<BuniChatButtonProps, \"children\"> {\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n size?: \"small\" | \"medium\" | \"large\";\n theme?: \"default\" | \"minimal\" | \"colorful\";\n}\n\nexport const BuniChatFloatingButton: React.FC<BuniChatFloatingButtonProps> = ({\n position = \"bottom-right\",\n size = \"medium\",\n theme = \"default\",\n onClick,\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n const positionStyles = {\n \"bottom-right\": { bottom: \"20px\", right: \"20px\" },\n \"bottom-left\": { bottom: \"20px\", left: \"20px\" },\n \"top-right\": { top: \"20px\", right: \"20px\" },\n \"top-left\": { top: \"20px\", left: \"20px\" },\n };\n\n const sizeStyles = {\n small: { width: \"48px\", height: \"48px\", fontSize: \"20px\" },\n medium: { width: \"56px\", height: \"56px\", fontSize: \"24px\" },\n large: { width: \"64px\", height: \"64px\", fontSize: \"28px\" },\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={`buni-chat-floating-button ${theme} ${className}`}\n style={{\n position: \"fixed\",\n ...positionStyles[position],\n ...sizeStyles[size],\n borderRadius: \"50%\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n zIndex: 9999,\n ...style,\n }}\n >\n 💬\n {showUnreadCount && unreadCount > 0 && (\n <span\n className=\"buni-chat-badge\"\n style={{\n position: \"absolute\",\n top: \"-5px\",\n right: \"-5px\",\n background: \"red\",\n color: \"white\",\n borderRadius: \"50%\",\n padding: \"2px 6px\",\n fontSize: \"12px\",\n fontWeight: \"bold\",\n }}\n >\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n"],"names":["BuniChatWidget","_jsx","_jsxs"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,7 +18,6 @@ const BuniChatProvider = ({ options, children, }) => {
18
18
  const initWidget = async () => {
19
19
  try {
20
20
  await widget.initialize({ ...options, framework: "react" });
21
- setIsReady(true);
22
21
  }
23
22
  catch (error) {
24
23
  console.error("Failed to initialize BuniChat widget:", error);
@@ -29,6 +28,10 @@ const BuniChatProvider = ({ options, children, }) => {
29
28
  const handleStateChange = () => {
30
29
  setState(widget.getState());
31
30
  };
31
+ const handleConnectionReady = () => {
32
+ setIsReady(true);
33
+ };
34
+ widget.on("connection_ready", handleConnectionReady);
32
35
  widget.on("ready", handleStateChange);
33
36
  widget.on("visibility_changed", handleStateChange);
34
37
  widget.on("minimized", handleStateChange);
@@ -38,7 +41,8 @@ const BuniChatProvider = ({ options, children, }) => {
38
41
  widget.destroy();
39
42
  };
40
43
  }, [widget, options]);
41
- return (jsxRuntime.jsx(BuniChatContext.Provider, { value: { widget, state, isReady }, children: children }));
44
+ const value = react.useMemo(() => ({ widget, state, isReady }), [widget, state, isReady]);
45
+ return (jsxRuntime.jsx(BuniChatContext.Provider, { value: value, children: children }));
42
46
  };
43
47
  // Main hook for using BuniChat
44
48
  function useBuniChat(options) {
@@ -61,7 +65,6 @@ function useBuniChat(options) {
61
65
  const initWidget = async () => {
62
66
  try {
63
67
  await activeWidget.initialize(options);
64
- setIsReady(true);
65
68
  }
66
69
  catch (error) {
67
70
  console.error("Failed to initialize BuniChat widget:", error);
@@ -71,6 +74,10 @@ function useBuniChat(options) {
71
74
  const handleStateChange = () => {
72
75
  setState(activeWidget.getState());
73
76
  };
77
+ const handleConnectionReady = () => {
78
+ setIsReady(true);
79
+ };
80
+ activeWidget.on("connection_ready", handleConnectionReady);
74
81
  activeWidget.on("ready", handleStateChange);
75
82
  activeWidget.on("visibility_changed", handleStateChange);
76
83
  activeWidget.on("minimized", handleStateChange);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/hooks.tsx","../src/components.tsx"],"sourcesContent":["// @buni.ai/chatbot-react - React hooks and components\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n ReactNode,\n} from \"react\";\nimport {\n BuniChatWidget,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n BuniChatConfig,\n} from \"@buni.ai/chatbot-core\";\n\n// Context for providing widget instance\ninterface BuniChatContextType {\n widget: BuniChatWidget | null;\n state: BuniChatState;\n isReady: boolean;\n}\n\nconst BuniChatContext = createContext<BuniChatContextType | null>(null);\n\n// Provider component\ninterface BuniChatProviderProps {\n options: BuniChatOptions;\n children?: ReactNode;\n}\n\nexport const BuniChatProvider: React.FC<BuniChatProviderProps> = ({\n options,\n children,\n}) => {\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n const initWidget = async () => {\n try {\n await widget.initialize({ ...options, framework: \"react\" });\n setIsReady(true);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n // Set up event listeners\n const handleStateChange = () => {\n setState(widget.getState());\n };\n\n widget.on(\"ready\", handleStateChange);\n widget.on(\"visibility_changed\", handleStateChange);\n widget.on(\"minimized\", handleStateChange);\n widget.on(\"maximized\", handleStateChange);\n widget.on(\"new_message\", handleStateChange);\n\n return () => {\n widget.destroy();\n };\n }, [widget, options]);\n\n return (\n <BuniChatContext.Provider value={{ widget, state, isReady }}>\n {children}\n </BuniChatContext.Provider>\n );\n};\n\n// Main hook for using BuniChat\nexport function useBuniChat(options?: BuniChatOptions) {\n const context = useContext(BuniChatContext);\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n // Use context widget if available, otherwise use standalone\n const activeWidget = context?.widget || widget;\n const activeState = context?.state || state;\n const activeIsReady = context?.isReady || isReady;\n\n useEffect(() => {\n if (options && !context) {\n // Initialize standalone widget\n const initWidget = async () => {\n try {\n await activeWidget.initialize(options);\n setIsReady(true);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n const handleStateChange = () => {\n setState(activeWidget.getState());\n };\n\n activeWidget.on(\"ready\", handleStateChange);\n activeWidget.on(\"visibility_changed\", handleStateChange);\n activeWidget.on(\"minimized\", handleStateChange);\n activeWidget.on(\"maximized\", handleStateChange);\n activeWidget.on(\"new_message\", handleStateChange);\n\n return () => {\n activeWidget.destroy();\n };\n }\n }, [options, context, activeWidget]);\n\n const show = useCallback(() => {\n activeWidget.show();\n }, [activeWidget]);\n\n const hide = useCallback(() => {\n activeWidget.hide();\n }, [activeWidget]);\n\n const toggle = useCallback(() => {\n activeWidget.toggle();\n }, [activeWidget]);\n\n const minimize = useCallback(() => {\n activeWidget.minimize();\n }, [activeWidget]);\n\n const maximize = useCallback(() => {\n activeWidget.maximize();\n }, [activeWidget]);\n\n const setCustomerData = useCallback(\n (data: CustomerData) => {\n activeWidget.setCustomerData(data);\n },\n [activeWidget],\n );\n\n const setSessionVariables = useCallback(\n (variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n },\n [activeWidget],\n );\n\n const sendMessage = useCallback(\n (message: string) => {\n activeWidget.sendMessage(message);\n },\n [activeWidget],\n );\n\n const setTheme = useCallback(\n (theme: \"light\" | \"dark\" | \"system\") => {\n activeWidget.setTheme(theme);\n },\n [activeWidget],\n );\n\n const open = useCallback(() => {\n activeWidget.open();\n }, [activeWidget]);\n\n const close = useCallback(() => {\n activeWidget.close();\n }, [activeWidget]);\n\n return {\n // State\n ...activeState,\n isReady: activeIsReady,\n\n // Actions\n show,\n hide,\n toggle,\n minimize,\n maximize,\n setCustomerData,\n setSessionVariables,\n sendMessage,\n setTheme,\n open,\n close,\n\n // Direct widget access\n widget: activeWidget,\n };\n}\n\n// Hook for widget events\nexport function useWidgetEvents() {\n const { widget } = useBuniChat();\n\n const on = useCallback(\n (event: string, callback: Function) => {\n widget?.on(event, callback);\n },\n [widget],\n );\n\n const off = useCallback(\n (event: string, callback?: Function) => {\n widget?.off(event, callback);\n },\n [widget],\n );\n\n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerData] = useState<CustomerData | null>(\n null,\n );\n\n const updateCustomerData = useCallback(\n (data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerData(data);\n },\n [widget],\n );\n\n const getCustomerData = useCallback(() => {\n return widget?.getCustomerData() || null;\n }, [widget]);\n\n useEffect(() => {\n if (widget) {\n const handleCustomerDataUpdate = (event: { data: CustomerData }) => {\n setCustomerData(event.data);\n };\n\n widget.on(\"customer_data_updated\", handleCustomerDataUpdate);\n\n return () => {\n widget.off(\"customer_data_updated\", handleCustomerDataUpdate);\n };\n }\n }, [widget]);\n\n return {\n customerData,\n setCustomerData: updateCustomerData,\n getCustomerData,\n };\n}\n","// Components for @buni.ai/chatbot-react\n\nimport React, { ReactNode, useEffect } from \"react\";\nimport { useBuniChat } from \"./hooks\";\nimport { BuniChatConfig } from \"@buni.ai/chatbot-core\";\n\n// Widget component - can be used standalone or within provider\ninterface BuniChatWidgetProps {\n token?: string;\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({\n token,\n config,\n}) => {\n // Use the hook - if there's a provider, it uses that; otherwise standalone\n const options = token ? { token, config } : undefined;\n useBuniChat(options);\n\n // The core widget renders directly to document.body\n return null;\n};\n\n// Chat button component\ninterface BuniChatButtonProps {\n onClick?: () => void;\n children?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n showUnreadCount?: boolean;\n}\n\nexport const BuniChatButton: React.FC<BuniChatButtonProps> = ({\n onClick,\n children = \"Chat with us\",\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={className}\n style={style}\n >\n {children}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-badge\">{unreadCount}</span>\n )}\n </button>\n );\n};\n\n// Floating button component\ninterface BuniChatFloatingButtonProps\n extends Omit<BuniChatButtonProps, \"children\"> {\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n size?: \"small\" | \"medium\" | \"large\";\n theme?: \"default\" | \"minimal\" | \"colorful\";\n}\n\nexport const BuniChatFloatingButton: React.FC<BuniChatFloatingButtonProps> = ({\n position = \"bottom-right\",\n size = \"medium\",\n theme = \"default\",\n onClick,\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n const positionStyles = {\n \"bottom-right\": { bottom: \"20px\", right: \"20px\" },\n \"bottom-left\": { bottom: \"20px\", left: \"20px\" },\n \"top-right\": { top: \"20px\", right: \"20px\" },\n \"top-left\": { top: \"20px\", left: \"20px\" },\n };\n\n const sizeStyles = {\n small: { width: \"48px\", height: \"48px\", fontSize: \"20px\" },\n medium: { width: \"56px\", height: \"56px\", fontSize: \"24px\" },\n large: { width: \"64px\", height: \"64px\", fontSize: \"28px\" },\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={`buni-chat-floating-button ${theme} ${className}`}\n style={{\n position: \"fixed\",\n ...positionStyles[position],\n ...sizeStyles[size],\n borderRadius: \"50%\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n zIndex: 9999,\n ...style,\n }}\n >\n 💬\n {showUnreadCount && unreadCount > 0 && (\n <span\n className=\"buni-chat-badge\"\n style={{\n position: \"absolute\",\n top: \"-5px\",\n right: \"-5px\",\n background: \"red\",\n color: \"white\",\n borderRadius: \"50%\",\n padding: \"2px 6px\",\n fontSize: \"12px\",\n fontWeight: \"bold\",\n }}\n >\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n"],"names":["createContext","useState","BuniChatWidget","useEffect","_jsx","useContext","useCallback","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/hooks.tsx","../src/components.tsx"],"sourcesContent":["// @buni.ai/chatbot-react - React hooks and components\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useMemo,\n ReactNode,\n} from \"react\";\nimport {\n BuniChatWidget,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"@buni.ai/chatbot-core\";\n\n// Context for providing widget instance\ninterface BuniChatContextType {\n widget: BuniChatWidget | null;\n state: BuniChatState;\n isReady: boolean;\n}\n\nconst BuniChatContext = createContext<BuniChatContextType | null>(null);\n\n// Provider component\ninterface BuniChatProviderProps {\n options: BuniChatOptions;\n children?: ReactNode;\n}\n\nexport const BuniChatProvider: React.FC<BuniChatProviderProps> = ({\n options,\n children,\n}) => {\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n const initWidget = async () => {\n try {\n await widget.initialize({ ...options, framework: \"react\" });\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n // Set up event listeners\n const handleStateChange = () => {\n setState(widget.getState());\n };\n\n const handleConnectionReady = () => {\n setIsReady(true);\n };\n\n widget.on(\"connection_ready\", handleConnectionReady);\n widget.on(\"ready\", handleStateChange);\n widget.on(\"visibility_changed\", handleStateChange);\n widget.on(\"minimized\", handleStateChange);\n widget.on(\"maximized\", handleStateChange);\n widget.on(\"new_message\", handleStateChange);\n\n return () => {\n widget.destroy();\n };\n }, [widget, options]);\n\n const value = useMemo(\n () => ({ widget, state, isReady }),\n [widget, state, isReady]\n );\n\n return (\n <BuniChatContext.Provider value={value}>\n {children}\n </BuniChatContext.Provider>\n );\n};\n\n// Main hook for using BuniChat\nexport function useBuniChat(options?: BuniChatOptions) {\n const context = useContext(BuniChatContext);\n const [widget] = useState(() => new BuniChatWidget());\n const [state, setState] = useState<BuniChatState>({\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n });\n const [isReady, setIsReady] = useState(false);\n\n // Use context widget if available, otherwise use standalone\n const activeWidget = context?.widget || widget;\n const activeState = context?.state || state;\n const activeIsReady = context?.isReady || isReady;\n\n useEffect(() => {\n if (options && !context) {\n // Initialize standalone widget\n const initWidget = async () => {\n try {\n await activeWidget.initialize(options);\n } catch (error) {\n console.error(\"Failed to initialize BuniChat widget:\", error);\n }\n };\n\n initWidget();\n\n const handleStateChange = () => {\n setState(activeWidget.getState());\n };\n\n const handleConnectionReady = () => {\n setIsReady(true);\n };\n\n activeWidget.on(\"connection_ready\", handleConnectionReady);\n activeWidget.on(\"ready\", handleStateChange);\n activeWidget.on(\"visibility_changed\", handleStateChange);\n activeWidget.on(\"minimized\", handleStateChange);\n activeWidget.on(\"maximized\", handleStateChange);\n activeWidget.on(\"new_message\", handleStateChange);\n\n return () => {\n activeWidget.destroy();\n };\n }\n }, [options, context, activeWidget]);\n\n const show = useCallback(() => {\n activeWidget.show();\n }, [activeWidget]);\n\n const hide = useCallback(() => {\n activeWidget.hide();\n }, [activeWidget]);\n\n const toggle = useCallback(() => {\n activeWidget.toggle();\n }, [activeWidget]);\n\n const minimize = useCallback(() => {\n activeWidget.minimize();\n }, [activeWidget]);\n\n const maximize = useCallback(() => {\n activeWidget.maximize();\n }, [activeWidget]);\n\n const setCustomerData = useCallback(\n (data: CustomerData) => {\n activeWidget.setCustomerData(data);\n },\n [activeWidget],\n );\n\n const setSessionVariables = useCallback(\n (variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n },\n [activeWidget],\n );\n\n const sendMessage = useCallback(\n (message: string) => {\n activeWidget.sendMessage(message);\n },\n [activeWidget],\n );\n\n const setTheme = useCallback(\n (theme: \"light\" | \"dark\" | \"system\") => {\n activeWidget.setTheme(theme);\n },\n [activeWidget],\n );\n\n const open = useCallback(() => {\n activeWidget.open();\n }, [activeWidget]);\n\n const close = useCallback(() => {\n activeWidget.close();\n }, [activeWidget]);\n\n return {\n // State\n ...activeState,\n isReady: activeIsReady,\n\n // Actions\n show,\n hide,\n toggle,\n minimize,\n maximize,\n setCustomerData,\n setSessionVariables,\n sendMessage,\n setTheme,\n open,\n close,\n\n // Direct widget access\n widget: activeWidget,\n };\n}\n\n// Hook for widget events\nexport function useWidgetEvents() {\n const { widget } = useBuniChat();\n\n const on = useCallback(\n (event: string, callback: Function) => {\n widget?.on(event, callback);\n },\n [widget],\n );\n\n const off = useCallback(\n (event: string, callback?: Function) => {\n widget?.off(event, callback);\n },\n [widget],\n );\n\n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerData] = useState<CustomerData | null>(\n null,\n );\n\n const updateCustomerData = useCallback(\n (data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerData(data);\n },\n [widget],\n );\n\n const getCustomerData = useCallback(() => {\n return widget?.getCustomerData() || null;\n }, [widget]);\n\n useEffect(() => {\n if (widget) {\n const handleCustomerDataUpdate = (event: { data: CustomerData }) => {\n setCustomerData(event.data);\n };\n\n widget.on(\"customer_data_updated\", handleCustomerDataUpdate);\n\n return () => {\n widget.off(\"customer_data_updated\", handleCustomerDataUpdate);\n };\n }\n }, [widget]);\n\n return {\n customerData,\n setCustomerData: updateCustomerData,\n getCustomerData,\n };\n}\n","// Components for @buni.ai/chatbot-react\n\nimport React, { ReactNode, useEffect } from \"react\";\nimport { useBuniChat } from \"./hooks\";\nimport { BuniChatConfig } from \"@buni.ai/chatbot-core\";\n\n// Widget component - can be used standalone or within provider\ninterface BuniChatWidgetProps {\n token?: string;\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({\n token,\n config,\n}) => {\n // Use the hook - if there's a provider, it uses that; otherwise standalone\n const options = token ? { token, config } : undefined;\n useBuniChat(options);\n\n // The core widget renders directly to document.body\n return null;\n};\n\n// Chat button component\ninterface BuniChatButtonProps {\n onClick?: () => void;\n children?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n showUnreadCount?: boolean;\n}\n\nexport const BuniChatButton: React.FC<BuniChatButtonProps> = ({\n onClick,\n children = \"Chat with us\",\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={className}\n style={style}\n >\n {children}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-badge\">{unreadCount}</span>\n )}\n </button>\n );\n};\n\n// Floating button component\ninterface BuniChatFloatingButtonProps\n extends Omit<BuniChatButtonProps, \"children\"> {\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n size?: \"small\" | \"medium\" | \"large\";\n theme?: \"default\" | \"minimal\" | \"colorful\";\n}\n\nexport const BuniChatFloatingButton: React.FC<BuniChatFloatingButtonProps> = ({\n position = \"bottom-right\",\n size = \"medium\",\n theme = \"default\",\n onClick,\n className = \"\",\n style = {},\n disabled = false,\n showUnreadCount = true,\n}) => {\n const { toggle, unreadCount } = useBuniChat();\n\n const handleClick = () => {\n if (onClick) {\n onClick();\n } else {\n toggle();\n }\n };\n\n const positionStyles = {\n \"bottom-right\": { bottom: \"20px\", right: \"20px\" },\n \"bottom-left\": { bottom: \"20px\", left: \"20px\" },\n \"top-right\": { top: \"20px\", right: \"20px\" },\n \"top-left\": { top: \"20px\", left: \"20px\" },\n };\n\n const sizeStyles = {\n small: { width: \"48px\", height: \"48px\", fontSize: \"20px\" },\n medium: { width: \"56px\", height: \"56px\", fontSize: \"24px\" },\n large: { width: \"64px\", height: \"64px\", fontSize: \"28px\" },\n };\n\n return (\n <button\n onClick={handleClick}\n disabled={disabled}\n className={`buni-chat-floating-button ${theme} ${className}`}\n style={{\n position: \"fixed\",\n ...positionStyles[position],\n ...sizeStyles[size],\n borderRadius: \"50%\",\n border: \"none\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n zIndex: 9999,\n ...style,\n }}\n >\n 💬\n {showUnreadCount && unreadCount > 0 && (\n <span\n className=\"buni-chat-badge\"\n style={{\n position: \"absolute\",\n top: \"-5px\",\n right: \"-5px\",\n background: \"red\",\n color: \"white\",\n borderRadius: \"50%\",\n padding: \"2px 6px\",\n fontSize: \"12px\",\n fontWeight: \"bold\",\n }}\n >\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n"],"names":["createContext","useState","BuniChatWidget","useEffect","useMemo","_jsx","useContext","useCallback","_jsxs"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buni.ai/chatbot-react",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "React components and hooks for BuniAI chat widget",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
@@ -38,7 +38,7 @@
38
38
  "react-dom": ">=19.2.1"
39
39
  },
40
40
  "dependencies": {
41
- "@buni.ai/chatbot-core": "^1.0.18"
41
+ "@buni.ai/chatbot-core": "^1.0.19"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@rollup/plugin-commonjs": "^24.0.0",