@buni.ai/chatbot-core 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +413 -212
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +413 -212
- package/dist/index.js.map +1 -1
- package/dist/widget.d.ts +5 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private iframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.iframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Check if widget should start minimized\n const shouldStartMinimized = config.initialMinimized === true;\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Detect if we're on mobile\n const isMobile = window.innerWidth <= 768;\n\n // Calculate initial dimensions based on minimized state\n // On mobile, enforce responsive sizing; on desktop, respect custom dimensions\n const initialWidth = shouldStartMinimized\n ? showTriggerText && hasTriggerText\n ? \"auto\"\n : \"52px\"\n : isMobile\n ? \"min(calc(100vw - 2rem), 370px)\"\n : widthValue;\n const initialHeight = shouldStartMinimized\n ? \"52px\"\n : isMobile\n ? \"min(calc(100vh - 2rem), 580px)\"\n : heightValue;\n const initialMinWidth =\n shouldStartMinimized && showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${initialWidth};\n height: ${initialHeight};\n ${initialMinWidth ? `min-width: ${initialMinWidth};` : \"\"}\n ${isMobile ? \"max-width: 370px; max-height: 580px;\" : \"\"}\n transition: all 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\")}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: ${shouldStartMinimized ? \"hidden\" : \"visible\"};\n `;\n\n // Create iframe for secure embedding\n const iframe = document.createElement(\"iframe\");\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\", // Enable postMessage communication\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add string parameters only if provided\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor) params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar) params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius) params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options - only pass if explicitly defined\n if (config.showBranding !== undefined) {\n params.set(\"showBranding\", String(config.showBranding));\n }\n if (config.autoOpen !== undefined) {\n params.set(\"autoOpen\", String(config.autoOpen));\n }\n if (config.minimized !== undefined) {\n params.set(\"minimized\", String(config.minimized));\n }\n if (config.initialMinimized !== undefined) {\n params.set(\"initialMinimized\", String(config.initialMinimized));\n }\n if (config.allowMinimize !== undefined) {\n params.set(\"allowMinimize\", String(config.allowMinimize));\n }\n if (config.showMinimize !== undefined) {\n params.set(\"showMinimize\", String(config.showMinimize));\n }\n if (config.allowClose !== undefined) {\n params.set(\"allowClose\", String(config.allowClose));\n }\n if (config.enableFileUpload !== undefined) {\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n }\n if (config.showTimestamps !== undefined) {\n params.set(\"showTimestamps\", String(config.showTimestamps));\n }\n if (config.showTriggerText !== undefined) {\n params.set(\"showTriggerText\", String(config.showTriggerText));\n }\n if (config.hideDefaultTrigger !== undefined) {\n params.set(\"hideDefaultTrigger\", String(config.hideDefaultTrigger));\n }\n if (config.enableMobile !== undefined) {\n params.set(\"enableMobile\", String(config.enableMobile));\n }\n\n // Pre-chat form and start button - only pass if explicitly defined\n if (config.showPreChatForm !== undefined) {\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n }\n if (config.showStartButton !== undefined) {\n params.set(\"showStartButton\", String(config.showStartButton));\n }\n if (config.startButtonText) {\n params.set(\"startButtonText\", config.startButtonText);\n }\n if (config.preChatFormFields) {\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n }\n\n iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Set styles individually - iframe fills container 100%\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n iframe.style.border = \"none\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n // Use circular border for icon-only minimized, rounded for text button or expanded\n iframe.style.borderRadius =\n shouldStartMinimized && initialWidth === \"52px\" ? \"50%\" : \"12px\";\n iframe.style.transition = \"all 0.3s ease\";\n iframe.style.pointerEvents = \"auto\";\n iframe.style.boxShadow = \"0 4px 12px rgba(0,0,0,0.15)\";\n\n iframe.setAttribute(\"allow\", \"clipboard-write\");\n iframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n iframe.onload = () => {\n this.widgetElement = container;\n this.iframe = iframe;\n this.state.isMinimized = shouldStartMinimized;\n this.setupPostMessageAPI(iframe);\n resolve();\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load BuniAI widget iframe\"));\n };\n\n container.appendChild(iframe);\n document.body.appendChild(container);\n });\n }\n\n private getPositionStyles(position: string): string {\n // Use smaller margins on mobile for better space utilization\n const isMobile = window.innerWidth <= 768;\n const margin = isMobile ? \"8px\" : \"20px\";\n \n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.state.isMinimized = true;\n if (this.widgetElement && data.dimensions) {\n // Resize container to trigger button size when minimized\n this.widgetElement.style.width = data.dimensions.width;\n this.widgetElement.style.height = data.dimensions.height;\n this.widgetElement.style.overflow = \"hidden\";\n if (data.dimensions.minWidth) {\n this.widgetElement.style.minWidth = data.dimensions.minWidth;\n }\n }\n if (this.iframe) {\n // Use circular border for icon-only, rounded for text button\n this.iframe.style.borderRadius =\n data.dimensions?.width === data.dimensions?.height\n ? \"50%\"\n : \"26px\";\n }\n this.emit(\"minimized\", data);\n break;\n\n case \"maximized\":\n this.state.isMinimized = false;\n if (this.widgetElement) {\n // Check if we're on mobile\n const isMobile = window.innerWidth <= 768;\n const config = this.options.config || {};\n\n if (isMobile) {\n // On mobile, enforce responsive sizing\n this.widgetElement.style.width = \"min(calc(100vw - 2rem), 370px)\";\n this.widgetElement.style.height =\n \"min(calc(100vh - 2rem), 680px)\";\n this.widgetElement.style.maxWidth = \"370px\";\n this.widgetElement.style.maxHeight = \"680px\";\n } else {\n // On desktop, respect custom dimensions\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n this.widgetElement.style.width = ensureUnits(\n config.width,\n \"350px\"\n );\n this.widgetElement.style.height = ensureUnits(\n config.height,\n \"650px\"\n );\n }\n this.widgetElement.style.overflow = \"visible\";\n }\n if (this.iframe) {\n this.iframe.style.borderRadius = \"12px\";\n }\n this.emit(\"maximized\", data);\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.widgetElement && this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.contentWindow?.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the iframe if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.style.display = \"block\";\n }\n this.postMessageToWidget(\"show\");\n this.state.isOpen = true;\n this.state.unreadCount = 0;\n this.emit(\"visibility_changed\", { visibility: \"visible\" });\n }\n\n hide(): void {\n this.postMessageToWidget(\"hide\");\n // If hideDefaultTrigger is enabled, completely hide the iframe\n if (\n this.options.config?.hideDefaultTrigger &&\n this.widgetElement instanceof HTMLIFrameElement\n ) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n this.state.isOpen ? this.hide() : this.show();\n }\n\n minimize(): void {\n this.postMessageToWidget(\"minimize\");\n this.state.isMinimized = true;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n maximize(): void {\n this.postMessageToWidget(\"maximize\");\n this.state.isMinimized = false;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private triggerIframe: HTMLIFrameElement | null;\n private chatIframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.triggerIframe = null;\n this.chatIframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Configuration\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n const primaryColor = config.primaryColor || \"#795548\";\n const triggerText = config.triggerText || \"\";\n const companyName = config.companyName || \"Chat Support\";\n\n // Responsive breakpoints\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n // Calculate trigger dimensions\n const triggerWidth = showTriggerText && hasTriggerText ? \"auto\" : \"52px\";\n const triggerHeight = \"52px\";\n const triggerMinWidth = showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n // Container starts as trigger size\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${triggerWidth};\n height: ${triggerHeight};\n ${triggerMinWidth ? `min-width: ${triggerMinWidth};` : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", true)}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: hidden;\n box-sizing: border-box;\n `;\n\n // Create inline trigger iframe (no src)\n const triggerIframe = document.createElement(\"iframe\");\n triggerIframe.id = \"buni-trigger-iframe\";\n triggerIframe.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n border: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: ${showTriggerText && hasTriggerText ? \"26px\" : \"50%\"};\n transition: border-radius 0.3s ease, box-shadow 0.3s ease;\n pointer-events: auto;\n `;\n triggerIframe.setAttribute(\"title\", \"BuniAI Chat Trigger\");\n\n // Inject trigger HTML content directly (no src)\n container.appendChild(triggerIframe);\n document.body.appendChild(container);\n\n triggerIframe.onload = () => {\n const triggerDoc =\n triggerIframe.contentDocument ||\n triggerIframe.contentWindow?.document;\n if (!triggerDoc) {\n reject(new Error(\"Failed to access trigger iframe document\"));\n return;\n }\n\n // Build inline HTML for trigger\n const triggerHTML = this.buildTriggerHTML(\n primaryColor,\n triggerText || companyName,\n showTriggerText && hasTriggerText,\n config.customAvatar,\n config.avatarType,\n config.avatarText\n );\n\n triggerDoc.open();\n triggerDoc.write(triggerHTML);\n triggerDoc.close();\n\n // Create chat iframe (initially hidden)\n const chatIframe = document.createElement(\"iframe\");\n chatIframe.id = \"buni-chat-iframe\";\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\",\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add all configuration parameters\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor)\n params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar)\n params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius)\n params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options\n if (config.showBranding !== undefined)\n params.set(\"showBranding\", String(config.showBranding));\n if (config.autoOpen !== undefined)\n params.set(\"autoOpen\", String(config.autoOpen));\n if (config.allowMinimize !== undefined)\n params.set(\"allowMinimize\", String(config.allowMinimize));\n if (config.showMinimize !== undefined)\n params.set(\"showMinimize\", String(config.showMinimize));\n if (config.allowClose !== undefined)\n params.set(\"allowClose\", String(config.allowClose));\n if (config.enableFileUpload !== undefined)\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n if (config.showTimestamps !== undefined)\n params.set(\"showTimestamps\", String(config.showTimestamps));\n if (config.enableMobile !== undefined)\n params.set(\"enableMobile\", String(config.enableMobile));\n if (config.showPreChatForm !== undefined)\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n if (config.showStartButton !== undefined)\n params.set(\"showStartButton\", String(config.showStartButton));\n if (config.startButtonText)\n params.set(\"startButtonText\", config.startButtonText);\n if (config.preChatFormFields)\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n\n chatIframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Chat iframe styling - initially hidden\n chatIframe.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n border: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: ${isMobile ? \"0\" : \"16px\"};\n transition: border-radius 0.3s ease, box-shadow 0.3s ease;\n pointer-events: auto;\n box-shadow: ${isMobile ? \"none\" : \"0 8px 32px rgba(0,0,0,0.15)\"};\n display: none;\n `;\n chatIframe.setAttribute(\"allow\", \"clipboard-write\");\n chatIframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n container.appendChild(chatIframe);\n\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n this.setupPostMessageAPI(chatIframe);\n };\n\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.isLoaded = true;\n resolve();\n };\n\n // Trigger the load event\n triggerIframe.src = \"about:blank\";\n\n // Set up communication with trigger iframe\n window.addEventListener(\"message\", (event) => {\n // Check if message is from trigger iframe\n if (\n event.data.type === \"trigger_clicked\" &&\n event.source === triggerIframe.contentWindow\n ) {\n this.openChat();\n }\n });\n });\n }\n\n private buildTriggerHTML(\n primaryColor: string,\n text: string,\n showText: boolean,\n customAvatar?: string,\n avatarType?: string,\n avatarText?: string\n ): string {\n const avatarContent = customAvatar\n ? `<img src=\"${customAvatar}\" alt=\"Avatar\" style=\"width: 32px; height: 32px; border-radius: 50%;\" />`\n : avatarType === \"text\" && avatarText\n ? `<div style=\"width: 32px; height: 32px; border-radius: 50%; background: rgba(255,255,255,0.3); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; color: white;\">${avatarText.substring(0, 2).toUpperCase()}</div>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1 0-.9-2-2zm0 14H6l-2 2V4h16v12z\"/></svg>`;\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n overflow: hidden;\n }\n .trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${showText ? \"12px\" : \"0\"};\n padding: ${showText ? \"10px 20px\" : \"10px\"};\n background: ${primaryColor};\n color: white;\n border-radius: ${showText ? \"26px\" : \"50%\"};\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n animation: pulse 2s infinite;\n ${showText ? \"\" : \"width: 52px; height: 52px;\"}\n }\n .trigger:hover {\n transform: translateY(-2px);\n filter: brightness(1.1);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n .trigger:active {\n transform: translateY(0);\n }\n .avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n .text {\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n }\n .badge {\n position: absolute;\n top: -4px;\n right: -4px;\n background: #f44336;\n color: white;\n border-radius: 10px;\n padding: 2px 6px;\n font-size: 11px;\n font-weight: 600;\n min-width: 18px;\n text-align: center;\n display: none;\n animation: pulse 2s infinite;\n }\n .badge.show {\n display: block;\n }\n @keyframes pulse {\n 0%, 100% {\n transform: scale(1);\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n }\n 50% {\n transform: scale(1.02);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n }\n </style>\n</head>\n<body>\n <div style=\"position: relative;\">\n <div class=\"trigger\" onclick=\"handleClick()\">\n <div class=\"avatar\">${avatarContent}</div>\n ${showText ? `<span class=\"text\">${text}</span>` : \"\"}\n </div>\n <div class=\"badge\" id=\"badge\">0</div>\n </div>\n <script>\n function handleClick() {\n window.parent.postMessage({ type: 'trigger_clicked' }, '*');\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.data.type === 'updateUnreadCount') {\n const badge = document.getElementById('badge');\n const count = event.data.count || 0;\n badge.textContent = count;\n if (count > 0) {\n badge.classList.add('show');\n } else {\n badge.classList.remove('show');\n }\n }\n });\n </script>\n</body>\n</html>`;\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen) return; // Already open\n\n const config = this.options.config || {};\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Calculate chat dimensions\n const chatWidth = isMobile\n ? \"100vw\"\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\"\n : widthValue;\n\n const chatHeight = isMobile\n ? \"100vh\"\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\"\n : heightValue;\n\n // Resize container for chat\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${chatWidth};\n height: ${chatHeight};\n ${isMobile ? \"max-width: 100vw; max-height: 100vh;\" : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", false)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n // Hide trigger, show chat\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n private closeChat(): void {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n\n const config = this.options.config || {};\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Hide chat iframe\n this.chatIframe.style.display = \"none\";\n this.chatIframe.style.visibility = \"hidden\";\n\n // Resize container back to trigger size\n const triggerWidth = showTriggerText && hasTriggerText ? \"auto\" : \"52px\";\n const triggerHeight = \"52px\";\n const triggerMinWidth = showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${triggerWidth};\n height: ${triggerHeight};\n ${triggerMinWidth ? `min-width: ${triggerMinWidth};` : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", true)}\n display: block;\n overflow: hidden;\n box-sizing: border-box;\n `;\n\n // Show trigger again\n this.triggerIframe.style.display = \"block\";\n\n this.state.isMinimized = true;\n this.state.isOpen = false;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private getPositionStyles(\n position: string,\n isMinimized: boolean = false\n ): string {\n // Responsive positioning following mobile-first best practices\n const viewportWidth = window.innerWidth;\n const isExtraSmall = viewportWidth <= 375;\n const isMobile = viewportWidth <= 768;\n const isTablet = viewportWidth > 768 && viewportWidth <= 1024;\n\n // For extra small devices (Galaxy S8+, iPhone SE, etc.), use minimal or no margins\n // For mobile, use small margins for breathing room\n // For tablet/desktop, use larger margins for floating appearance\n let margin: string;\n\n if (isMinimized) {\n // Minimized button always needs some space from edges\n margin = isMobile ? \"12px\" : \"20px\";\n } else if (isMobile) {\n // Full screen on all mobile devices (no margins)\n margin = \"0\";\n } else if (isTablet) {\n // Medium margins on tablets\n margin = \"16px\";\n } else {\n // Larger margins on desktop for floating effect\n margin = \"24px\";\n }\n\n // On mobile screens when not minimized, position at edges for full coverage\n if (isMobile && !isMinimized) {\n return `top: 0; left: 0; right: 0; bottom: 0;`;\n }\n\n // Standard positioning for larger screens or minimized state\n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n // User clicked minimize in chat - close chat and show trigger\n this.closeChat();\n break;\n\n case \"new_unread_message\":\n // Update unread count in trigger\n this.state.unreadCount++;\n if (this.triggerIframe?.contentWindow) {\n this.triggerIframe.contentWindow.postMessage(\n { type: \"updateUnreadCount\", count: this.state.unreadCount },\n \"*\"\n );\n }\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.chatIframe?.contentWindow) {\n this.chatIframe.contentWindow.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.triggerIframe = null;\n this.chatIframe = null;\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the widget container if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement) {\n this.widgetElement.style.display = \"block\";\n }\n // Open chat if not already open\n if (!this.chatIframe && !this.state.isOpen) {\n this.openChat();\n }\n }\n\n hide(): void {\n // Close chat if open\n if (this.chatIframe) {\n this.closeChat();\n }\n // If hideDefaultTrigger is enabled, completely hide the container\n if (this.options.config?.hideDefaultTrigger && this.widgetElement) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n if (this.chatIframe || this.state.isOpen) {\n this.closeChat();\n } else {\n this.openChat();\n }\n }\n\n minimize(): void {\n this.closeChat();\n }\n\n maximize(): void {\n this.openChat();\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|