@buni.ai/chatbot-react 1.0.18 → 1.0.20

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/hooks.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import React, { ReactNode } from 'react';
2
- import { BuniChatWidget, BuniChatOptions, CustomerData, SessionVariables } from '@buni.ai/chatbot-core';
1
+ import React, { ReactNode } from "react";
2
+ import { BuniChatWidget, BuniChatOptions, CustomerData, SessionVariables } from "@buni.ai/chatbot-core";
3
3
  interface BuniChatProviderProps {
4
4
  options: BuniChatOptions;
5
5
  children?: ReactNode;
@@ -15,6 +15,9 @@ export declare function useBuniChat(options?: BuniChatOptions): {
15
15
  setCustomerData: (data: CustomerData) => void;
16
16
  setSessionVariables: (variables: SessionVariables) => void;
17
17
  sendMessage: (message: string) => void;
18
+ setTheme: (theme: "light" | "dark" | "system") => void;
19
+ open: () => void;
20
+ close: () => void;
18
21
  widget: BuniChatWidget;
19
22
  isOpen: boolean;
20
23
  isLoaded: boolean;
package/dist/index.esm.js CHANGED
@@ -3,13 +3,13 @@ import { createContext, useState, useEffect, useContext, useCallback } from 'rea
3
3
  import { BuniChatWidget as BuniChatWidget$1 } from '@buni.ai/chatbot-core';
4
4
 
5
5
  const BuniChatContext = createContext(null);
6
- const BuniChatProvider = ({ options, children }) => {
6
+ const BuniChatProvider = ({ options, children, }) => {
7
7
  const [widget] = useState(() => new BuniChatWidget$1());
8
8
  const [state, setState] = useState({
9
9
  isOpen: false,
10
10
  isLoaded: false,
11
11
  isMinimized: false,
12
- unreadCount: 0
12
+ unreadCount: 0,
13
13
  });
14
14
  const [isReady, setIsReady] = useState(false);
15
15
  useEffect(() => {
@@ -19,7 +19,7 @@ const BuniChatProvider = ({ options, children }) => {
19
19
  setIsReady(true);
20
20
  }
21
21
  catch (error) {
22
- console.error('Failed to initialize BuniChat widget:', error);
22
+ console.error("Failed to initialize BuniChat widget:", error);
23
23
  }
24
24
  };
25
25
  initWidget();
@@ -27,11 +27,11 @@ const BuniChatProvider = ({ options, children }) => {
27
27
  const handleStateChange = () => {
28
28
  setState(widget.getState());
29
29
  };
30
- widget.on('ready', handleStateChange);
31
- widget.on('visibility_changed', handleStateChange);
32
- widget.on('minimized', handleStateChange);
33
- widget.on('maximized', handleStateChange);
34
- widget.on('new_message', handleStateChange);
30
+ widget.on("ready", handleStateChange);
31
+ widget.on("visibility_changed", handleStateChange);
32
+ widget.on("minimized", handleStateChange);
33
+ widget.on("maximized", handleStateChange);
34
+ widget.on("new_message", handleStateChange);
35
35
  return () => {
36
36
  widget.destroy();
37
37
  };
@@ -46,7 +46,7 @@ function useBuniChat(options) {
46
46
  isOpen: false,
47
47
  isLoaded: false,
48
48
  isMinimized: false,
49
- unreadCount: 0
49
+ unreadCount: 0,
50
50
  });
51
51
  const [isReady, setIsReady] = useState(false);
52
52
  // Use context widget if available, otherwise use standalone
@@ -62,18 +62,18 @@ function useBuniChat(options) {
62
62
  setIsReady(true);
63
63
  }
64
64
  catch (error) {
65
- console.error('Failed to initialize BuniChat widget:', error);
65
+ console.error("Failed to initialize BuniChat widget:", error);
66
66
  }
67
67
  };
68
68
  initWidget();
69
69
  const handleStateChange = () => {
70
70
  setState(activeWidget.getState());
71
71
  };
72
- activeWidget.on('ready', handleStateChange);
73
- activeWidget.on('visibility_changed', handleStateChange);
74
- activeWidget.on('minimized', handleStateChange);
75
- activeWidget.on('maximized', handleStateChange);
76
- activeWidget.on('new_message', handleStateChange);
72
+ activeWidget.on("ready", handleStateChange);
73
+ activeWidget.on("visibility_changed", handleStateChange);
74
+ activeWidget.on("minimized", handleStateChange);
75
+ activeWidget.on("maximized", handleStateChange);
76
+ activeWidget.on("new_message", handleStateChange);
77
77
  return () => {
78
78
  activeWidget.destroy();
79
79
  };
@@ -103,6 +103,15 @@ function useBuniChat(options) {
103
103
  const sendMessage = useCallback((message) => {
104
104
  activeWidget.sendMessage(message);
105
105
  }, [activeWidget]);
106
+ const setTheme = useCallback((theme) => {
107
+ activeWidget.setTheme(theme);
108
+ }, [activeWidget]);
109
+ const open = useCallback(() => {
110
+ activeWidget.open();
111
+ }, [activeWidget]);
112
+ const close = useCallback(() => {
113
+ activeWidget.close();
114
+ }, [activeWidget]);
106
115
  return {
107
116
  // State
108
117
  ...activeState,
@@ -116,8 +125,11 @@ function useBuniChat(options) {
116
125
  setCustomerData,
117
126
  setSessionVariables,
118
127
  sendMessage,
128
+ setTheme,
129
+ open,
130
+ close,
119
131
  // Direct widget access
120
- widget: activeWidget
132
+ widget: activeWidget,
121
133
  };
122
134
  }
123
135
  // Hook for widget events
@@ -134,10 +146,10 @@ function useWidgetEvents() {
134
146
  // Hook for customer data management
135
147
  function useCustomerData() {
136
148
  const { widget } = useBuniChat();
137
- const [customerData, setCustomerDataState] = useState(null);
138
- const setCustomerData = useCallback((data) => {
149
+ const [customerData, setCustomerData] = useState(null);
150
+ const updateCustomerData = useCallback((data) => {
139
151
  widget === null || widget === void 0 ? void 0 : widget.setCustomerData(data);
140
- setCustomerDataState(data);
152
+ setCustomerData(data);
141
153
  }, [widget]);
142
154
  const getCustomerData = useCallback(() => {
143
155
  return (widget === null || widget === void 0 ? void 0 : widget.getCustomerData()) || null;
@@ -145,18 +157,18 @@ function useCustomerData() {
145
157
  useEffect(() => {
146
158
  if (widget) {
147
159
  const handleCustomerDataUpdate = (event) => {
148
- setCustomerDataState(event.data);
160
+ setCustomerData(event.data);
149
161
  };
150
- widget.on('customer_data_updated', handleCustomerDataUpdate);
162
+ widget.on("customer_data_updated", handleCustomerDataUpdate);
151
163
  return () => {
152
- widget.off('customer_data_updated', handleCustomerDataUpdate);
164
+ widget.off("customer_data_updated", handleCustomerDataUpdate);
153
165
  };
154
166
  }
155
167
  }, [widget]);
156
168
  return {
157
169
  customerData,
158
- setCustomerData,
159
- getCustomerData
170
+ setCustomerData: updateCustomerData,
171
+ getCustomerData,
160
172
  };
161
173
  }
162
174
 
@@ -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((data: CustomerData) => {\n activeWidget.setCustomerData(data);\n }, [activeWidget]);\n\n const setSessionVariables = useCallback((variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n }, [activeWidget]);\n\n const sendMessage = useCallback((message: string) => {\n activeWidget.sendMessage(message);\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 \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((event: string, callback: Function) => {\n widget?.on(event, callback);\n }, [widget]);\n \n const off = useCallback((event: string, callback?: Function) => {\n widget?.off(event, callback);\n }, [widget]);\n \n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerDataState] = useState<CustomerData | null>(null);\n \n const setCustomerData = useCallback((data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerDataState(data);\n }, [widget]);\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 setCustomerDataState(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,\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 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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"}
package/dist/index.js CHANGED
@@ -5,13 +5,13 @@ var react = require('react');
5
5
  var chatbotCore = require('@buni.ai/chatbot-core');
6
6
 
7
7
  const BuniChatContext = react.createContext(null);
8
- const BuniChatProvider = ({ options, children }) => {
8
+ const BuniChatProvider = ({ options, children, }) => {
9
9
  const [widget] = react.useState(() => new chatbotCore.BuniChatWidget());
10
10
  const [state, setState] = react.useState({
11
11
  isOpen: false,
12
12
  isLoaded: false,
13
13
  isMinimized: false,
14
- unreadCount: 0
14
+ unreadCount: 0,
15
15
  });
16
16
  const [isReady, setIsReady] = react.useState(false);
17
17
  react.useEffect(() => {
@@ -21,7 +21,7 @@ const BuniChatProvider = ({ options, children }) => {
21
21
  setIsReady(true);
22
22
  }
23
23
  catch (error) {
24
- console.error('Failed to initialize BuniChat widget:', error);
24
+ console.error("Failed to initialize BuniChat widget:", error);
25
25
  }
26
26
  };
27
27
  initWidget();
@@ -29,11 +29,11 @@ const BuniChatProvider = ({ options, children }) => {
29
29
  const handleStateChange = () => {
30
30
  setState(widget.getState());
31
31
  };
32
- widget.on('ready', handleStateChange);
33
- widget.on('visibility_changed', handleStateChange);
34
- widget.on('minimized', handleStateChange);
35
- widget.on('maximized', handleStateChange);
36
- widget.on('new_message', handleStateChange);
32
+ widget.on("ready", handleStateChange);
33
+ widget.on("visibility_changed", handleStateChange);
34
+ widget.on("minimized", handleStateChange);
35
+ widget.on("maximized", handleStateChange);
36
+ widget.on("new_message", handleStateChange);
37
37
  return () => {
38
38
  widget.destroy();
39
39
  };
@@ -48,7 +48,7 @@ function useBuniChat(options) {
48
48
  isOpen: false,
49
49
  isLoaded: false,
50
50
  isMinimized: false,
51
- unreadCount: 0
51
+ unreadCount: 0,
52
52
  });
53
53
  const [isReady, setIsReady] = react.useState(false);
54
54
  // Use context widget if available, otherwise use standalone
@@ -64,18 +64,18 @@ function useBuniChat(options) {
64
64
  setIsReady(true);
65
65
  }
66
66
  catch (error) {
67
- console.error('Failed to initialize BuniChat widget:', error);
67
+ console.error("Failed to initialize BuniChat widget:", error);
68
68
  }
69
69
  };
70
70
  initWidget();
71
71
  const handleStateChange = () => {
72
72
  setState(activeWidget.getState());
73
73
  };
74
- activeWidget.on('ready', handleStateChange);
75
- activeWidget.on('visibility_changed', handleStateChange);
76
- activeWidget.on('minimized', handleStateChange);
77
- activeWidget.on('maximized', handleStateChange);
78
- activeWidget.on('new_message', handleStateChange);
74
+ activeWidget.on("ready", handleStateChange);
75
+ activeWidget.on("visibility_changed", handleStateChange);
76
+ activeWidget.on("minimized", handleStateChange);
77
+ activeWidget.on("maximized", handleStateChange);
78
+ activeWidget.on("new_message", handleStateChange);
79
79
  return () => {
80
80
  activeWidget.destroy();
81
81
  };
@@ -105,6 +105,15 @@ function useBuniChat(options) {
105
105
  const sendMessage = react.useCallback((message) => {
106
106
  activeWidget.sendMessage(message);
107
107
  }, [activeWidget]);
108
+ const setTheme = react.useCallback((theme) => {
109
+ activeWidget.setTheme(theme);
110
+ }, [activeWidget]);
111
+ const open = react.useCallback(() => {
112
+ activeWidget.open();
113
+ }, [activeWidget]);
114
+ const close = react.useCallback(() => {
115
+ activeWidget.close();
116
+ }, [activeWidget]);
108
117
  return {
109
118
  // State
110
119
  ...activeState,
@@ -118,8 +127,11 @@ function useBuniChat(options) {
118
127
  setCustomerData,
119
128
  setSessionVariables,
120
129
  sendMessage,
130
+ setTheme,
131
+ open,
132
+ close,
121
133
  // Direct widget access
122
- widget: activeWidget
134
+ widget: activeWidget,
123
135
  };
124
136
  }
125
137
  // Hook for widget events
@@ -136,10 +148,10 @@ function useWidgetEvents() {
136
148
  // Hook for customer data management
137
149
  function useCustomerData() {
138
150
  const { widget } = useBuniChat();
139
- const [customerData, setCustomerDataState] = react.useState(null);
140
- const setCustomerData = react.useCallback((data) => {
151
+ const [customerData, setCustomerData] = react.useState(null);
152
+ const updateCustomerData = react.useCallback((data) => {
141
153
  widget === null || widget === void 0 ? void 0 : widget.setCustomerData(data);
142
- setCustomerDataState(data);
154
+ setCustomerData(data);
143
155
  }, [widget]);
144
156
  const getCustomerData = react.useCallback(() => {
145
157
  return (widget === null || widget === void 0 ? void 0 : widget.getCustomerData()) || null;
@@ -147,18 +159,18 @@ function useCustomerData() {
147
159
  react.useEffect(() => {
148
160
  if (widget) {
149
161
  const handleCustomerDataUpdate = (event) => {
150
- setCustomerDataState(event.data);
162
+ setCustomerData(event.data);
151
163
  };
152
- widget.on('customer_data_updated', handleCustomerDataUpdate);
164
+ widget.on("customer_data_updated", handleCustomerDataUpdate);
153
165
  return () => {
154
- widget.off('customer_data_updated', handleCustomerDataUpdate);
166
+ widget.off("customer_data_updated", handleCustomerDataUpdate);
155
167
  };
156
168
  }
157
169
  }, [widget]);
158
170
  return {
159
171
  customerData,
160
- setCustomerData,
161
- getCustomerData
172
+ setCustomerData: updateCustomerData,
173
+ getCustomerData,
162
174
  };
163
175
  }
164
176
 
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((data: CustomerData) => {\n activeWidget.setCustomerData(data);\n }, [activeWidget]);\n\n const setSessionVariables = useCallback((variables: SessionVariables) => {\n activeWidget.setSessionVariables(variables);\n }, [activeWidget]);\n\n const sendMessage = useCallback((message: string) => {\n activeWidget.sendMessage(message);\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 \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((event: string, callback: Function) => {\n widget?.on(event, callback);\n }, [widget]);\n \n const off = useCallback((event: string, callback?: Function) => {\n widget?.off(event, callback);\n }, [widget]);\n \n return { on, off };\n}\n\n// Hook for customer data management\nexport function useCustomerData() {\n const { widget } = useBuniChat();\n const [customerData, setCustomerDataState] = useState<CustomerData | null>(null);\n \n const setCustomerData = useCallback((data: CustomerData) => {\n widget?.setCustomerData(data);\n setCustomerDataState(data);\n }, [widget]);\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 setCustomerDataState(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,\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 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":";;;;;;AA0BA,MAAM,eAAe,GAAGA,mBAAa,CAA6B,IAAI,CAAC,CAAC;AAQ3D,MAAA,gBAAgB,GAAoC,CAAC,EAChE,OAAO,EACP,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,CAAC,MAAM,CAAC,GAAGC,cAAQ,CAAC,MAAM,IAAIC,0BAAc,EAAE,CAAC,CAAC;AACtD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGD,cAAQ,CAAgB;AAChD,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,CAAC;IAE9CE,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,UAAU,GAAG,YAAW;AAC5B,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5D,UAAU,CAAC,IAAI,CAAC,CAAC;aAClB;YAAC,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;aAC/D;AACH,SAAC,CAAC;AAEF,QAAA,UAAU,EAAE,CAAC;;QAGb,MAAM,iBAAiB,GAAG,MAAK;AAC7B,YAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9B,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACtC,QAAA,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;AACnD,QAAA,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAC1C,QAAA,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAC1C,QAAA,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAE5C,QAAA,OAAO,MAAK;YACV,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEtB,IAAA,QACEC,cAAC,CAAA,eAAe,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YACxD,QAAQ,EAAA,CACgB,EAC3B;AACJ,EAAE;AAEF;AACM,SAAU,WAAW,CAAC,OAAyB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAGC,gBAAU,CAAC,eAAe,CAAC,CAAC;AAC5C,IAAA,MAAM,CAAC,MAAM,CAAC,GAAGJ,cAAQ,CAAC,MAAM,IAAIC,0BAAc,EAAE,CAAC,CAAC;AACtD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGD,cAAQ,CAAgB;AAChD,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,CAAC;AACf,KAAA,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,CAAC;;AAG9C,IAAA,MAAM,YAAY,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,KAAI,MAAM,CAAC;AAC/C,IAAA,MAAM,WAAW,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,KAAK,KAAI,KAAK,CAAC;AAC5C,IAAA,MAAM,aAAa,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,OAAO,KAAI,OAAO,CAAC;IAElDE,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;;AAEvB,YAAA,MAAM,UAAU,GAAG,YAAW;AAC5B,gBAAA,IAAI;AACF,oBAAA,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBACvC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAClB;gBAAC,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;iBAC/D;AACH,aAAC,CAAC;AAEF,YAAA,UAAU,EAAE,CAAC;YAEb,MAAM,iBAAiB,GAAG,MAAK;AAC7B,gBAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpC,aAAC,CAAC;AAEF,YAAA,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC5C,YAAA,YAAY,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;AACzD,YAAA,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAChD,YAAA,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAChD,YAAA,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAElD,YAAA,OAAO,MAAK;gBACV,YAAY,CAAC,OAAO,EAAE,CAAC;AACzB,aAAC,CAAC;SACH;KACF,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAErC,IAAA,MAAM,IAAI,GAAGG,iBAAW,CAAC,MAAK;QAC5B,YAAY,CAAC,IAAI,EAAE,CAAC;AACtB,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,IAAI,GAAGA,iBAAW,CAAC,MAAK;QAC5B,YAAY,CAAC,IAAI,EAAE,CAAC;AACtB,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,MAAM,GAAGA,iBAAW,CAAC,MAAK;QAC9B,YAAY,CAAC,MAAM,EAAE,CAAC;AACxB,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,QAAQ,GAAGA,iBAAW,CAAC,MAAK;QAChC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC1B,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,QAAQ,GAAGA,iBAAW,CAAC,MAAK;QAChC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC1B,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,eAAe,GAAGA,iBAAW,CACjC,CAAC,IAAkB,KAAI;AACrB,QAAA,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACrC,KAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;AAEF,IAAA,MAAM,mBAAmB,GAAGA,iBAAW,CACrC,CAAC,SAA2B,KAAI;AAC9B,QAAA,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC9C,KAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;AAEF,IAAA,MAAM,WAAW,GAAGA,iBAAW,CAC7B,CAAC,OAAe,KAAI;AAClB,QAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACpC,KAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAGA,iBAAW,CAC1B,CAAC,KAAkC,KAAI;AACrC,QAAA,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;AAEF,IAAA,MAAM,IAAI,GAAGA,iBAAW,CAAC,MAAK;QAC5B,YAAY,CAAC,IAAI,EAAE,CAAC;AACtB,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,KAAK,GAAGA,iBAAW,CAAC,MAAK;QAC7B,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO;;AAEL,QAAA,GAAG,WAAW;AACd,QAAA,OAAO,EAAE,aAAa;;QAGtB,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,mBAAmB;QACnB,WAAW;QACX,QAAQ;QACR,IAAI;QACJ,KAAK;;AAGL,QAAA,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED;SACgB,eAAe,GAAA;AAC7B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEjC,MAAM,EAAE,GAAGA,iBAAW,CACpB,CAAC,KAAa,EAAE,QAAkB,KAAI;QACpC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9B,KAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,GAAG,GAAGA,iBAAW,CACrB,CAAC,KAAa,EAAE,QAAmB,KAAI;QACrC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/B,KAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;AAEF,IAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACrB,CAAC;AAED;SACgB,eAAe,GAAA;AAC7B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACjC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGL,cAAQ,CAC9C,IAAI,CACL,CAAC;AAEF,IAAA,MAAM,kBAAkB,GAAGK,iBAAW,CACpC,CAAC,IAAkB,KAAI;QACrB,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9B,eAAe,CAAC,IAAI,CAAC,CAAC;AACxB,KAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;AAEF,IAAA,MAAM,eAAe,GAAGA,iBAAW,CAAC,MAAK;QACvC,OAAO,CAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,eAAe,EAAE,KAAI,IAAI,CAAC;AAC3C,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEbH,eAAS,CAAC,MAAK;QACb,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,wBAAwB,GAAG,CAAC,KAA6B,KAAI;AACjE,gBAAA,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,aAAC,CAAC;AAEF,YAAA,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;AAE7D,YAAA,OAAO,MAAK;AACV,gBAAA,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;AAChE,aAAC,CAAC;SACH;AACH,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO;QACL,YAAY;AACZ,QAAA,eAAe,EAAE,kBAAkB;QACnC,eAAe;KAChB,CAAC;AACJ;;AC7Pa,MAAA,cAAc,GAAkC,CAAC,EAC5D,KAAK,EACL,MAAM,GACP,KAAI;;AAEH,IAAA,MAAM,OAAO,GAAG,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,WAAW,CAAC,OAAO,CAAC,CAAC;;AAGrB,IAAA,OAAO,IAAI,CAAC;AACd,EAAE;AAYK,MAAM,cAAc,GAAkC,CAAC,EAC5D,OAAO,EACP,QAAQ,GAAG,cAAc,EACzB,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,IAAI,GACvB,KAAI;IACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC;IAE9C,MAAM,WAAW,GAAG,MAAK;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACX;aAAM;AACL,YAAA,MAAM,EAAE,CAAC;SACV;AACH,KAAC,CAAC;AAEF,IAAA,QACEI,eACE,CAAA,QAAA,EAAA,EAAA,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EAAA,QAAA,EAAA,CAEX,QAAQ,EACR,eAAe,IAAI,WAAW,GAAG,CAAC,KACjCH,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAE,QAAA,EAAA,WAAW,GAAQ,CACvD,CAAA,EAAA,CACM,EACT;AACJ,EAAE;AAUW,MAAA,sBAAsB,GAA0C,CAAC,EAC5E,QAAQ,GAAG,cAAc,EACzB,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,SAAS,EACjB,OAAO,EACP,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,IAAI,GACvB,KAAI;IACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC;IAE9C,MAAM,WAAW,GAAG,MAAK;QACvB,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;SACX;aAAM;AACL,YAAA,MAAM,EAAE,CAAC;SACV;AACH,KAAC,CAAC;AAEF,IAAA,MAAM,cAAc,GAAG;QACrB,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QACjD,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QAC/C,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAC3C,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;KAC1C,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC1D,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC3D,QAAA,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC3D,CAAC;AAEF,IAAA,QACEG,eACE,CAAA,QAAA,EAAA,EAAA,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,6BAA6B,KAAK,CAAA,CAAA,EAAI,SAAS,CAAE,CAAA,EAC5D,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,OAAO;YACjB,GAAG,cAAc,CAAC,QAAQ,CAAC;YAC3B,GAAG,UAAU,CAAC,IAAI,CAAC;AACnB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS;YAC5C,OAAO,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC;AAC3B,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,KAAK;AACT,SAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAGA,eAAe,IAAI,WAAW,GAAG,CAAC,KACjCH,cAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,GAAG,EAAE,MAAM;AACX,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,EAAA,QAAA,EAEA,WAAW,EAAA,CACP,CACR,CAAA,EAAA,CACM,EACT;AACJ;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buni.ai/chatbot-react",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
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.16"
41
+ "@buni.ai/chatbot-core": "^1.0.18"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@rollup/plugin-commonjs": "^24.0.0",