@buni.ai/chatbot-react 1.0.3 → 1.0.4

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.
@@ -1,6 +1,7 @@
1
- import React, { ReactNode } from 'react';
2
- import { BuniChatConfig } from '@buni.ai/chatbot-core';
1
+ import React, { ReactNode } from "react";
2
+ import { BuniChatConfig } from "@buni.ai/chatbot-core";
3
3
  interface BuniChatWidgetProps {
4
+ token?: string;
4
5
  className?: string;
5
6
  style?: React.CSSProperties;
6
7
  config?: BuniChatConfig;
@@ -15,10 +16,10 @@ interface BuniChatButtonProps {
15
16
  showUnreadCount?: boolean;
16
17
  }
17
18
  export declare const BuniChatButton: React.FC<BuniChatButtonProps>;
18
- interface BuniChatFloatingButtonProps extends Omit<BuniChatButtonProps, 'children'> {
19
- position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
20
- size?: 'small' | 'medium' | 'large';
21
- theme?: 'default' | 'minimal' | 'colorful';
19
+ interface BuniChatFloatingButtonProps extends Omit<BuniChatButtonProps, "children"> {
20
+ position?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
21
+ size?: "small" | "medium" | "large";
22
+ theme?: "default" | "minimal" | "colorful";
22
23
  }
23
24
  export declare const BuniChatFloatingButton: React.FC<BuniChatFloatingButtonProps>;
24
25
  export {};
package/dist/hooks.d.ts CHANGED
@@ -2,7 +2,7 @@ import React, { ReactNode } from 'react';
2
2
  import { BuniChatWidget, BuniChatOptions, CustomerData, SessionVariables } from '@buni.ai/chatbot-core';
3
3
  interface BuniChatProviderProps {
4
4
  options: BuniChatOptions;
5
- children: ReactNode;
5
+ children?: ReactNode;
6
6
  }
7
7
  export declare const BuniChatProvider: React.FC<BuniChatProviderProps>;
8
8
  export declare function useBuniChat(options?: BuniChatOptions): {
package/dist/index.esm.js CHANGED
@@ -160,14 +160,14 @@ function useCustomerData() {
160
160
  };
161
161
  }
162
162
 
163
- const BuniChatWidget = ({ className, style, config }) => {
164
- const { isReady, isOpen } = useBuniChat();
165
- if (!isReady) {
166
- return null;
167
- }
168
- return (jsx("div", { className: `buni-chat-widget ${className || ''}`, style: style, "data-widget-open": isOpen, id: "buni-chat-widget-container" }));
163
+ const BuniChatWidget = ({ token, config, }) => {
164
+ // Use the hook - if there's a provider, it uses that; otherwise standalone
165
+ const options = token ? { token, config } : undefined;
166
+ useBuniChat(options);
167
+ // The core widget renders directly to document.body
168
+ return null;
169
169
  };
170
- const BuniChatButton = ({ onClick, children, className, style, disabled = false, showUnreadCount = true }) => {
170
+ const BuniChatButton = ({ onClick, children = "Chat with us", className = "", style = {}, disabled = false, showUnreadCount = true, }) => {
171
171
  const { toggle, unreadCount } = useBuniChat();
172
172
  const handleClick = () => {
173
173
  if (onClick) {
@@ -177,55 +177,50 @@ const BuniChatButton = ({ onClick, children, className, style, disabled = false,
177
177
  toggle();
178
178
  }
179
179
  };
180
- return (jsxs("button", { className: `buni-chat-button ${className || ''}`, style: style, onClick: handleClick, disabled: disabled, "aria-label": "Open chat widget", children: [children || 'Chat with us', showUnreadCount && unreadCount > 0 && (jsx("span", { className: "buni-chat-unread-badge", "aria-label": `${unreadCount} unread messages`, children: unreadCount }))] }));
180
+ return (jsxs("button", { onClick: handleClick, disabled: disabled, className: className, style: style, children: [children, showUnreadCount && unreadCount > 0 && (jsx("span", { className: "buni-chat-badge", children: unreadCount }))] }));
181
181
  };
182
- const BuniChatFloatingButton = ({ position = 'bottom-right', size = 'medium', theme = 'default', className, style, ...props }) => {
183
- const baseStyles = {
184
- position: 'fixed',
185
- zIndex: 1000,
186
- borderRadius: '50%',
187
- border: 'none',
188
- cursor: 'pointer',
189
- transition: 'all 0.3s ease',
190
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
191
- ...style,
182
+ const BuniChatFloatingButton = ({ position = "bottom-right", size = "medium", theme = "default", onClick, className = "", style = {}, disabled = false, showUnreadCount = true, }) => {
183
+ const { toggle, unreadCount } = useBuniChat();
184
+ const handleClick = () => {
185
+ if (onClick) {
186
+ onClick();
187
+ }
188
+ else {
189
+ toggle();
190
+ }
192
191
  };
193
- // Position styles
194
192
  const positionStyles = {
195
- 'bottom-right': { bottom: '20px', right: '20px' },
196
- 'bottom-left': { bottom: '20px', left: '20px' },
197
- 'top-right': { top: '20px', right: '20px' },
198
- 'top-left': { top: '20px', left: '20px' },
193
+ "bottom-right": { bottom: "20px", right: "20px" },
194
+ "bottom-left": { bottom: "20px", left: "20px" },
195
+ "top-right": { top: "20px", right: "20px" },
196
+ "top-left": { top: "20px", left: "20px" },
199
197
  };
200
- // Size styles
201
198
  const sizeStyles = {
202
- small: { width: '48px', height: '48px', fontSize: '14px' },
203
- medium: { width: '60px', height: '60px', fontSize: '16px' },
204
- large: { width: '72px', height: '72px', fontSize: '18px' },
205
- };
206
- // Theme styles
207
- const themeStyles = {
208
- default: {
209
- backgroundColor: '#007bff',
210
- color: 'white',
211
- },
212
- minimal: {
213
- backgroundColor: '#f8f9fa',
214
- color: '#333',
215
- border: '1px solid #dee2e6',
216
- },
217
- colorful: {
218
- background: 'linear-gradient(45deg, #007bff, #28a745)',
219
- color: 'white',
220
- },
221
- };
222
- const combinedStyles = {
223
- ...baseStyles,
224
- ...positionStyles[position],
225
- ...sizeStyles[size],
226
- ...themeStyles[theme],
199
+ small: { width: "48px", height: "48px", fontSize: "20px" },
200
+ medium: { width: "56px", height: "56px", fontSize: "24px" },
201
+ large: { width: "64px", height: "64px", fontSize: "28px" },
227
202
  };
228
- return (jsx(BuniChatButton, { className: `buni-chat-floating-button buni-chat-floating-button--${position} buni-chat-floating-button--${size} buni-chat-floating-button--${theme} ${className || ''}`, style: combinedStyles, ...props, children: "\uD83D\uDCAC" }));
203
+ return (jsxs("button", { onClick: handleClick, disabled: disabled, className: `buni-chat-floating-button ${theme} ${className}`, style: {
204
+ position: "fixed",
205
+ ...positionStyles[position],
206
+ ...sizeStyles[size],
207
+ borderRadius: "50%",
208
+ border: "none",
209
+ cursor: disabled ? "not-allowed" : "pointer",
210
+ opacity: disabled ? 0.5 : 1,
211
+ zIndex: 9999,
212
+ ...style,
213
+ }, children: ["\uD83D\uDCAC", showUnreadCount && unreadCount > 0 && (jsx("span", { className: "buni-chat-badge", style: {
214
+ position: "absolute",
215
+ top: "-5px",
216
+ right: "-5px",
217
+ background: "red",
218
+ color: "white",
219
+ borderRadius: "50%",
220
+ padding: "2px 6px",
221
+ fontSize: "12px",
222
+ fontWeight: "bold",
223
+ }, children: unreadCount }))] }));
229
224
  };
230
225
 
231
226
  export { BuniChatButton, BuniChatFloatingButton, BuniChatProvider, BuniChatWidget, useBuniChat, useCustomerData, useWidgetEvents };
@@ -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);\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 } from 'react';\nimport { useBuniChat } from './hooks';\nimport { BuniChatConfig } from '@buni.ai/chatbot-core';\n\n// Widget component\ninterface BuniChatWidgetProps {\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({ \n className,\n style,\n config \n}) => {\n const { isReady, isOpen } = useBuniChat();\n \n if (!isReady) {\n return null;\n }\n \n return (\n <div \n className={`buni-chat-widget ${className || ''}`}\n style={style}\n data-widget-open={isOpen}\n id=\"buni-chat-widget-container\"\n >\n {/* Widget will be rendered here by the core widget */}\n </div>\n );\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,\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 className={`buni-chat-button ${className || ''}`}\n style={style}\n onClick={handleClick}\n disabled={disabled}\n aria-label=\"Open chat widget\"\n >\n {children || 'Chat with us'}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-unread-badge\" aria-label={`${unreadCount} unread messages`}>\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n\n// Floating chat button with default styling\ninterface BuniChatFloatingButtonProps 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 className,\n style,\n ...props\n}) => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: 'all 0.3s ease',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n ...style,\n };\n\n // Position styles\n const positionStyles: Record<string, React.CSSProperties> = {\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 // Size styles\n const sizeStyles: Record<string, React.CSSProperties> = {\n small: { width: '48px', height: '48px', fontSize: '14px' },\n medium: { width: '60px', height: '60px', fontSize: '16px' },\n large: { width: '72px', height: '72px', fontSize: '18px' },\n };\n\n // Theme styles\n const themeStyles: Record<string, React.CSSProperties> = {\n default: { \n backgroundColor: '#007bff', \n color: 'white',\n },\n minimal: { \n backgroundColor: '#f8f9fa', \n color: '#333',\n border: '1px solid #dee2e6',\n },\n colorful: { \n background: 'linear-gradient(45deg, #007bff, #28a745)',\n color: 'white',\n },\n };\n\n const combinedStyles = {\n ...baseStyles,\n ...positionStyles[position],\n ...sizeStyles[size],\n ...themeStyles[theme],\n };\n\n return (\n <BuniChatButton\n className={`buni-chat-floating-button buni-chat-floating-button--${position} buni-chat-floating-button--${size} buni-chat-floating-button--${theme} ${className || ''}`}\n style={combinedStyles}\n {...props}\n >\n 💬\n </BuniChatButton>\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);\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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"}
package/dist/index.js CHANGED
@@ -162,14 +162,14 @@ function useCustomerData() {
162
162
  };
163
163
  }
164
164
 
165
- const BuniChatWidget = ({ className, style, config }) => {
166
- const { isReady, isOpen } = useBuniChat();
167
- if (!isReady) {
168
- return null;
169
- }
170
- return (jsxRuntime.jsx("div", { className: `buni-chat-widget ${className || ''}`, style: style, "data-widget-open": isOpen, id: "buni-chat-widget-container" }));
165
+ const BuniChatWidget = ({ token, config, }) => {
166
+ // Use the hook - if there's a provider, it uses that; otherwise standalone
167
+ const options = token ? { token, config } : undefined;
168
+ useBuniChat(options);
169
+ // The core widget renders directly to document.body
170
+ return null;
171
171
  };
172
- const BuniChatButton = ({ onClick, children, className, style, disabled = false, showUnreadCount = true }) => {
172
+ const BuniChatButton = ({ onClick, children = "Chat with us", className = "", style = {}, disabled = false, showUnreadCount = true, }) => {
173
173
  const { toggle, unreadCount } = useBuniChat();
174
174
  const handleClick = () => {
175
175
  if (onClick) {
@@ -179,55 +179,50 @@ const BuniChatButton = ({ onClick, children, className, style, disabled = false,
179
179
  toggle();
180
180
  }
181
181
  };
182
- return (jsxRuntime.jsxs("button", { className: `buni-chat-button ${className || ''}`, style: style, onClick: handleClick, disabled: disabled, "aria-label": "Open chat widget", children: [children || 'Chat with us', showUnreadCount && unreadCount > 0 && (jsxRuntime.jsx("span", { className: "buni-chat-unread-badge", "aria-label": `${unreadCount} unread messages`, children: unreadCount }))] }));
182
+ return (jsxRuntime.jsxs("button", { onClick: handleClick, disabled: disabled, className: className, style: style, children: [children, showUnreadCount && unreadCount > 0 && (jsxRuntime.jsx("span", { className: "buni-chat-badge", children: unreadCount }))] }));
183
183
  };
184
- const BuniChatFloatingButton = ({ position = 'bottom-right', size = 'medium', theme = 'default', className, style, ...props }) => {
185
- const baseStyles = {
186
- position: 'fixed',
187
- zIndex: 1000,
188
- borderRadius: '50%',
189
- border: 'none',
190
- cursor: 'pointer',
191
- transition: 'all 0.3s ease',
192
- boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
193
- ...style,
184
+ const BuniChatFloatingButton = ({ position = "bottom-right", size = "medium", theme = "default", onClick, className = "", style = {}, disabled = false, showUnreadCount = true, }) => {
185
+ const { toggle, unreadCount } = useBuniChat();
186
+ const handleClick = () => {
187
+ if (onClick) {
188
+ onClick();
189
+ }
190
+ else {
191
+ toggle();
192
+ }
194
193
  };
195
- // Position styles
196
194
  const positionStyles = {
197
- 'bottom-right': { bottom: '20px', right: '20px' },
198
- 'bottom-left': { bottom: '20px', left: '20px' },
199
- 'top-right': { top: '20px', right: '20px' },
200
- 'top-left': { top: '20px', left: '20px' },
195
+ "bottom-right": { bottom: "20px", right: "20px" },
196
+ "bottom-left": { bottom: "20px", left: "20px" },
197
+ "top-right": { top: "20px", right: "20px" },
198
+ "top-left": { top: "20px", left: "20px" },
201
199
  };
202
- // Size styles
203
200
  const sizeStyles = {
204
- small: { width: '48px', height: '48px', fontSize: '14px' },
205
- medium: { width: '60px', height: '60px', fontSize: '16px' },
206
- large: { width: '72px', height: '72px', fontSize: '18px' },
207
- };
208
- // Theme styles
209
- const themeStyles = {
210
- default: {
211
- backgroundColor: '#007bff',
212
- color: 'white',
213
- },
214
- minimal: {
215
- backgroundColor: '#f8f9fa',
216
- color: '#333',
217
- border: '1px solid #dee2e6',
218
- },
219
- colorful: {
220
- background: 'linear-gradient(45deg, #007bff, #28a745)',
221
- color: 'white',
222
- },
223
- };
224
- const combinedStyles = {
225
- ...baseStyles,
226
- ...positionStyles[position],
227
- ...sizeStyles[size],
228
- ...themeStyles[theme],
201
+ small: { width: "48px", height: "48px", fontSize: "20px" },
202
+ medium: { width: "56px", height: "56px", fontSize: "24px" },
203
+ large: { width: "64px", height: "64px", fontSize: "28px" },
229
204
  };
230
- return (jsxRuntime.jsx(BuniChatButton, { className: `buni-chat-floating-button buni-chat-floating-button--${position} buni-chat-floating-button--${size} buni-chat-floating-button--${theme} ${className || ''}`, style: combinedStyles, ...props, children: "\uD83D\uDCAC" }));
205
+ return (jsxRuntime.jsxs("button", { onClick: handleClick, disabled: disabled, className: `buni-chat-floating-button ${theme} ${className}`, style: {
206
+ position: "fixed",
207
+ ...positionStyles[position],
208
+ ...sizeStyles[size],
209
+ borderRadius: "50%",
210
+ border: "none",
211
+ cursor: disabled ? "not-allowed" : "pointer",
212
+ opacity: disabled ? 0.5 : 1,
213
+ zIndex: 9999,
214
+ ...style,
215
+ }, children: ["\uD83D\uDCAC", showUnreadCount && unreadCount > 0 && (jsxRuntime.jsx("span", { className: "buni-chat-badge", style: {
216
+ position: "absolute",
217
+ top: "-5px",
218
+ right: "-5px",
219
+ background: "red",
220
+ color: "white",
221
+ borderRadius: "50%",
222
+ padding: "2px 6px",
223
+ fontSize: "12px",
224
+ fontWeight: "bold",
225
+ }, children: unreadCount }))] }));
231
226
  };
232
227
 
233
228
  exports.BuniChatButton = BuniChatButton;
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);\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 } from 'react';\nimport { useBuniChat } from './hooks';\nimport { BuniChatConfig } from '@buni.ai/chatbot-core';\n\n// Widget component\ninterface BuniChatWidgetProps {\n className?: string;\n style?: React.CSSProperties;\n config?: BuniChatConfig;\n}\n\nexport const BuniChatWidget: React.FC<BuniChatWidgetProps> = ({ \n className,\n style,\n config \n}) => {\n const { isReady, isOpen } = useBuniChat();\n \n if (!isReady) {\n return null;\n }\n \n return (\n <div \n className={`buni-chat-widget ${className || ''}`}\n style={style}\n data-widget-open={isOpen}\n id=\"buni-chat-widget-container\"\n >\n {/* Widget will be rendered here by the core widget */}\n </div>\n );\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,\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 className={`buni-chat-button ${className || ''}`}\n style={style}\n onClick={handleClick}\n disabled={disabled}\n aria-label=\"Open chat widget\"\n >\n {children || 'Chat with us'}\n {showUnreadCount && unreadCount > 0 && (\n <span className=\"buni-chat-unread-badge\" aria-label={`${unreadCount} unread messages`}>\n {unreadCount}\n </span>\n )}\n </button>\n );\n};\n\n// Floating chat button with default styling\ninterface BuniChatFloatingButtonProps 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 className,\n style,\n ...props\n}) => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n transition: 'all 0.3s ease',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n ...style,\n };\n\n // Position styles\n const positionStyles: Record<string, React.CSSProperties> = {\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 // Size styles\n const sizeStyles: Record<string, React.CSSProperties> = {\n small: { width: '48px', height: '48px', fontSize: '14px' },\n medium: { width: '60px', height: '60px', fontSize: '16px' },\n large: { width: '72px', height: '72px', fontSize: '18px' },\n };\n\n // Theme styles\n const themeStyles: Record<string, React.CSSProperties> = {\n default: { \n backgroundColor: '#007bff', \n color: 'white',\n },\n minimal: { \n backgroundColor: '#f8f9fa', \n color: '#333',\n border: '1px solid #dee2e6',\n },\n colorful: { \n background: 'linear-gradient(45deg, #007bff, #28a745)',\n color: 'white',\n },\n };\n\n const combinedStyles = {\n ...baseStyles,\n ...positionStyles[position],\n ...sizeStyles[size],\n ...themeStyles[theme],\n };\n\n return (\n <BuniChatButton\n className={`buni-chat-floating-button buni-chat-floating-button--${position} buni-chat-floating-button--${size} buni-chat-floating-button--${theme} ${className || ''}`}\n style={combinedStyles}\n {...props}\n >\n 💬\n </BuniChatButton>\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);\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buni.ai/chatbot-react",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
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.2"
41
+ "@buni.ai/chatbot-core": "^1.0.3"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@rollup/plugin-node-resolve": "^15.0.0",