@buni.ai/chatbot-core 1.0.22 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -316,12 +316,12 @@ class BuniChatWidget {
316
316
  if (event.source === ((_j = this.chatIframe) === null || _j === void 0 ? void 0 : _j.contentWindow) &&
317
317
  event.origin === this.getBaseUrl()) {
318
318
  if (this.isMinimalModeEnabled()) {
319
- if (!this.state.isOpen) {
320
- void this.openChat();
321
- }
322
319
  this.postMessageToWidget("minimize");
320
+ this.applyMinimalContainerFrame();
323
321
  this.displayMode = "minimal";
324
322
  this.state.displayMode = "minimal";
323
+ this.state.isOpen = true;
324
+ this.state.isMinimized = false;
325
325
  }
326
326
  else {
327
327
  this.closeChat();
@@ -474,56 +474,41 @@ class BuniChatWidget {
474
474
  async openChatInMinimalMode() {
475
475
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
476
476
  return;
477
- const config = this.options.config || {};
478
- const isMobile = window.innerWidth <= 768;
479
- const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;
480
- const ensureUnits = (value, defaultValue) => {
481
- if (!value)
482
- return defaultValue;
483
- const str = String(value);
484
- if (str.match(/^[\d.]+\s*(px|em|rem|%|vh|vw)$/))
485
- return str;
486
- if (str.match(/^[\d.]+$/))
487
- return `${str}px`;
488
- return str;
489
- };
490
- const widthValue = ensureUnits(config.width, "350px");
491
- const heightValue = ensureUnits(config.height, "650px");
492
- const chatWidth = isMobile
493
- ? "100vw"
494
- : isTablet
495
- ? "min(calc(100vw - 3rem), 370px)"
496
- : widthValue;
497
- const chatHeight = isMobile
498
- ? "100vh"
499
- : isTablet
500
- ? "min(calc(100vh - 3rem), 620px)"
501
- : heightValue;
502
- // Size container to full chat dimensions initially (iframe needs space to render)
477
+ this.applyMinimalContainerFrame();
478
+ this.state.isMinimized = false;
479
+ this.state.isOpen = true;
480
+ this.displayMode = "minimal";
481
+ this.state.displayMode = "minimal";
482
+ // Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
483
+ this.postMessageToWidget("minimize");
484
+ this.emit("minimized", { timestamp: Date.now() });
485
+ }
486
+ applyMinimalContainerFrame() {
487
+ var _a;
488
+ if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
489
+ return;
490
+ const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
503
491
  this.widgetElement.style.cssText = `
504
492
  position: fixed;
505
493
  pointer-events: none;
506
494
  z-index: 999999;
507
- width: ${chatWidth};
508
- height: ${chatHeight};
509
- ${isMobile ? "max-width: 100vw; max-height: 100vh;" : ""}
495
+ width: min(calc(100vw - 1.5rem), 390px);
496
+ max-width: min(calc(100vw - 1.5rem), 390px);
497
+ height: auto;
498
+ max-height: none;
499
+ min-height: 0;
510
500
  transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
511
- ${this.getPositionStyles(config.position || "bottom-right", false)}
501
+ ${this.getPositionStyles(position, true)}
512
502
  display: block;
513
503
  overflow: visible;
514
504
  box-sizing: border-box;
515
505
  `;
516
- // Hide trigger, show chat iframe
517
506
  this.triggerIframe.style.display = "none";
518
507
  this.chatIframe.style.display = "block";
519
508
  this.chatIframe.style.visibility = "visible";
520
- this.state.isMinimized = false;
521
- this.state.isOpen = true;
522
- this.displayMode = "minimal";
523
- this.state.displayMode = "minimal";
524
- // Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
525
- this.postMessageToWidget("minimize");
526
- this.emit("minimized", { timestamp: Date.now() });
509
+ this.chatIframe.style.width = "100%";
510
+ this.chatIframe.style.height = "min(calc(100vh - 1.5rem), 520px)";
511
+ this.chatIframe.style.maxHeight = "min(calc(100vh - 1.5rem), 520px)";
527
512
  }
528
513
  async openChat() {
529
514
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
@@ -705,23 +690,11 @@ class BuniChatWidget {
705
690
  case "minimized":
706
691
  this.syncServerBehaviorFromData(data);
707
692
  if (this.isMinimalModeEnabled()) {
708
- if (!this.state.isOpen) {
709
- void this.openChat();
710
- }
711
693
  this.displayMode = "minimal";
712
694
  this.state.displayMode = "minimal";
713
- // Shrink container to actual minimal card size
714
- if (this.widgetElement && this.chatIframe) {
715
- const isMobile = window.innerWidth <= 768;
716
- if (!isMobile) {
717
- this.widgetElement.style.width =
718
- "min(calc(100vw - 1.5rem), 390px)";
719
- this.widgetElement.style.height = "auto";
720
- this.widgetElement.style.overflow = "visible";
721
- this.chatIframe.style.height = "520px";
722
- this.chatIframe.style.width = "100%";
723
- }
724
- }
695
+ this.state.isOpen = true;
696
+ this.state.isMinimized = false;
697
+ this.applyMinimalContainerFrame();
725
698
  }
726
699
  else {
727
700
  // Backward-compatible behavior.
@@ -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// Default BuniAI platform URL\nconst BUNI_PLATFORM_URL = \"https://www.buni.ai\";\n\nconst PARENT_HANDSHAKE_TYPE = \"buni:parent_handshake\";\nconst IFRAME_HANDSHAKE_ACK_TYPE = \"buni:iframe_handshake_ack\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private readonly state: BuniChatState;\n private readonly 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 private chatTargetOrigin: string | null;\n private handshakeComplete: boolean;\n private outboundMessageQueue: Array<{ type: string; data?: any }>;\n private displayMode: \"full\" | \"minimal\" | \"hidden\";\n private readonly serverBehavior: {\n enableMinimalMode?: boolean;\n defaultMode?: \"full\" | \"minimal\" | \"hidden\";\n };\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 this.chatTargetOrigin = null;\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n this.displayMode = \"hidden\";\n this.serverBehavior = {};\n }\n\n private isMinimalModeEnabled(): boolean {\n if (typeof this.options?.config?.enableMinimalMode === \"boolean\") {\n return this.options.config.enableMinimalMode;\n }\n\n return Boolean(this.serverBehavior.enableMinimalMode);\n }\n\n private syncServerBehaviorFromData(data: any): void {\n if (!data || typeof data !== \"object\") {\n return;\n }\n\n const behaviorCandidate =\n data.behavior && typeof data.behavior === \"object\"\n ? data.behavior\n : data;\n\n if (typeof behaviorCandidate.enableMinimalMode === \"boolean\") {\n this.serverBehavior.enableMinimalMode = behaviorCandidate.enableMinimalMode;\n }\n\n if (\n behaviorCandidate.defaultMode === \"full\" ||\n behaviorCandidate.defaultMode === \"minimal\" ||\n behaviorCandidate.defaultMode === \"hidden\"\n ) {\n this.serverBehavior.defaultMode = behaviorCandidate.defaultMode;\n }\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, initially hidden until connection is ready\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: none;\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 if (config.enableMinimalMode !== undefined) {\n params.set(\"enableMinimalMode\", String(config.enableMinimalMode));\n }\n if (config.defaultMode) {\n params.set(\"defaultMode\", config.defaultMode);\n }\n if (config.autoMessages && Array.isArray(config.autoMessages)) {\n params.set(\"autoMessages\", JSON.stringify(config.autoMessages));\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 // Wait for chat iframe to load before resolving\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n\n // Compute the iframe origin once we know the final src.\n try {\n this.chatTargetOrigin = new URL(chatIframe.src).origin;\n } catch {\n this.chatTargetOrigin = this.getBaseUrl();\n }\n\n // Reset handshake state for this iframe instance.\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n\n this.setupPostMessageAPI(chatIframe);\n this.sendParentHandshake();\n \n // Now that both iframes are loaded, resolve the promise\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.displayMode = \"hidden\";\n this.displayMode = \"hidden\";\n this.state.isLoaded = true;\n resolve();\n };\n };\n\n // Listen for trigger and connection events\n window.addEventListener(\"message\", (event) => {\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n if (typeof payload.type !== \"string\") return;\n\n switch (payload.type) {\n case \"connection_ready\":\n // Check if message is from chat iframe\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.syncServerBehaviorFromData(payload.data);\n\n const effectiveDefaultMode =\n this.options.config?.defaultMode ??\n this.serverBehavior.defaultMode ??\n \"full\";\n const effectiveMinimalEnabled = this.isMinimalModeEnabled();\n\n if (effectiveMinimalEnabled && effectiveDefaultMode === \"minimal\") {\n // Auto-open in minimal card mode\n void this.openChatInMinimalMode();\n } else if (this.options.config?.autoOpen) {\n void this.openChat();\n } else if (container && !config.hideDefaultTrigger) {\n // Show the trigger button\n container.style.display = \"block\";\n }\n\n // Emit connection_ready event for consumers\n this.emit(\"connection_ready\", {\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n if (\n this.options.onConnectionReady &&\n typeof this.options.onConnectionReady === \"function\"\n ) {\n this.options.onConnectionReady({\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n }\n }\n break;\n\n case \"chatbot:close\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n break;\n\n case \"chatbot:minimize\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\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 // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\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 openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\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 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 // Size container to full chat dimensions initially (iframe needs space to render)\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 iframe\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.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\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.displayMode = \"full\";\n this.state.displayMode = \"full\";\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.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\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.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n // Shrink container to actual minimal card size\n if (this.widgetElement && this.chatIframe) {\n const isMobile = window.innerWidth <= 768;\n if (!isMobile) {\n this.widgetElement.style.width =\n \"min(calc(100vw - 1.5rem), 390px)\";\n this.widgetElement.style.height = \"auto\";\n this.widgetElement.style.overflow = \"visible\";\n this.chatIframe.style.height = \"520px\";\n this.chatIframe.style.width = \"100%\";\n }\n }\n } else {\n // Backward-compatible behavior.\n this.closeChat();\n }\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 window.location.origin,\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 sendParentHandshake(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n try {\n iframeWindow.postMessage(\n {\n type: PARENT_HANDSHAKE_TYPE,\n data: { origin: window.location.origin },\n },\n targetOrigin,\n );\n } catch {\n // Best-effort; iframe may fall back to document.referrer for origin discovery.\n }\n }\n\n private flushOutboundMessageQueue(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n const queued = this.outboundMessageQueue;\n if (queued.length === 0) return;\n\n this.outboundMessageQueue = [];\n for (const msg of queued) {\n iframeWindow.postMessage({ type: msg.type, data: msg.data }, targetOrigin);\n }\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n\n // Ensure handshake is sent before any other commands; queue until ack.\n if (!this.handshakeComplete && type !== PARENT_HANDSHAKE_TYPE) {\n const queue = this.outboundMessageQueue;\n if (queue.length < 50) {\n queue.push({ type, data });\n } else {\n this.outboundMessageQueue = [...queue.slice(-49), { type, data }];\n }\n this.sendParentHandshake();\n return;\n }\n\n iframeWindow.postMessage({ type, data }, targetOrigin);\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n // Priority: 1. config.baseUrl, 2. global BUNI_API_URL, 3. default platform URL\n const configUrl = (this.options?.config as any)?.baseUrl;\n const globalUrl = (globalThis as any).BUNI_API_URL;\n const rawUrl = configUrl || globalUrl || BUNI_PLATFORM_URL;\n\n try {\n return new URL(rawUrl).origin;\n } catch {\n return rawUrl;\n }\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 if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n return;\n }\n\n this.closeChat();\n }\n\n maximize(): void {\n void this.openChat();\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\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 setTheme(theme: \"light\" | \"dark\" | \"system\"): void {\n this.postMessageToWidget(\"theme-change\", { theme });\n this.emit(\"theme_changed\", { theme, timestamp: Date.now() });\n }\n\n open(): void {\n this.openChat();\n }\n\n close(): void {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 {\n ...this.state,\n displayMode: this.displayMode,\n };\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 setTheme: (theme: \"light\" | \"dark\" | \"system\") => void;\n open: () => void;\n close: () => 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// Default BuniAI platform URL\nconst BUNI_PLATFORM_URL = \"https://www.buni.ai\";\n\nconst PARENT_HANDSHAKE_TYPE = \"buni:parent_handshake\";\nconst IFRAME_HANDSHAKE_ACK_TYPE = \"buni:iframe_handshake_ack\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private readonly state: BuniChatState;\n private readonly 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 private chatTargetOrigin: string | null;\n private handshakeComplete: boolean;\n private outboundMessageQueue: Array<{ type: string; data?: any }>;\n private displayMode: \"full\" | \"minimal\" | \"hidden\";\n private readonly serverBehavior: {\n enableMinimalMode?: boolean;\n defaultMode?: \"full\" | \"minimal\" | \"hidden\";\n };\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 this.chatTargetOrigin = null;\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n this.displayMode = \"hidden\";\n this.serverBehavior = {};\n }\n\n private isMinimalModeEnabled(): boolean {\n if (typeof this.options?.config?.enableMinimalMode === \"boolean\") {\n return this.options.config.enableMinimalMode;\n }\n\n return Boolean(this.serverBehavior.enableMinimalMode);\n }\n\n private syncServerBehaviorFromData(data: any): void {\n if (!data || typeof data !== \"object\") {\n return;\n }\n\n const behaviorCandidate =\n data.behavior && typeof data.behavior === \"object\"\n ? data.behavior\n : data;\n\n if (typeof behaviorCandidate.enableMinimalMode === \"boolean\") {\n this.serverBehavior.enableMinimalMode = behaviorCandidate.enableMinimalMode;\n }\n\n if (\n behaviorCandidate.defaultMode === \"full\" ||\n behaviorCandidate.defaultMode === \"minimal\" ||\n behaviorCandidate.defaultMode === \"hidden\"\n ) {\n this.serverBehavior.defaultMode = behaviorCandidate.defaultMode;\n }\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, initially hidden until connection is ready\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: none;\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 if (config.enableMinimalMode !== undefined) {\n params.set(\"enableMinimalMode\", String(config.enableMinimalMode));\n }\n if (config.defaultMode) {\n params.set(\"defaultMode\", config.defaultMode);\n }\n if (config.autoMessages && Array.isArray(config.autoMessages)) {\n params.set(\"autoMessages\", JSON.stringify(config.autoMessages));\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 // Wait for chat iframe to load before resolving\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n\n // Compute the iframe origin once we know the final src.\n try {\n this.chatTargetOrigin = new URL(chatIframe.src).origin;\n } catch {\n this.chatTargetOrigin = this.getBaseUrl();\n }\n\n // Reset handshake state for this iframe instance.\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n\n this.setupPostMessageAPI(chatIframe);\n this.sendParentHandshake();\n \n // Now that both iframes are loaded, resolve the promise\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.displayMode = \"hidden\";\n this.displayMode = \"hidden\";\n this.state.isLoaded = true;\n resolve();\n };\n };\n\n // Listen for trigger and connection events\n window.addEventListener(\"message\", (event) => {\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n if (typeof payload.type !== \"string\") return;\n\n switch (payload.type) {\n case \"connection_ready\":\n // Check if message is from chat iframe\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.syncServerBehaviorFromData(payload.data);\n\n const effectiveDefaultMode =\n this.options.config?.defaultMode ??\n this.serverBehavior.defaultMode ??\n \"full\";\n const effectiveMinimalEnabled = this.isMinimalModeEnabled();\n\n if (effectiveMinimalEnabled && effectiveDefaultMode === \"minimal\") {\n // Auto-open in minimal card mode\n void this.openChatInMinimalMode();\n } else if (this.options.config?.autoOpen) {\n void this.openChat();\n } else if (container && !config.hideDefaultTrigger) {\n // Show the trigger button\n container.style.display = \"block\";\n }\n\n // Emit connection_ready event for consumers\n this.emit(\"connection_ready\", {\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n if (\n this.options.onConnectionReady &&\n typeof this.options.onConnectionReady === \"function\"\n ) {\n this.options.onConnectionReady({\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n }\n }\n break;\n\n case \"chatbot:close\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n break;\n\n case \"chatbot:minimize\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n if (this.isMinimalModeEnabled()) {\n this.postMessageToWidget(\"minimize\");\n this.applyMinimalContainerFrame();\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\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 // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\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 openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n this.applyMinimalContainerFrame();\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private applyMinimalContainerFrame(): void {\n if (!this.widgetElement || !this.chatIframe || !this.triggerIframe) return;\n\n const position = this.options.config?.position || \"bottom-right\";\n\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: min(calc(100vw - 1.5rem), 390px);\n max-width: min(calc(100vw - 1.5rem), 390px);\n height: auto;\n max-height: none;\n min-height: 0;\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(position, true)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n this.chatIframe.style.width = \"100%\";\n this.chatIframe.style.height = \"min(calc(100vh - 1.5rem), 520px)\";\n this.chatIframe.style.maxHeight = \"min(calc(100vh - 1.5rem), 520px)\";\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\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.displayMode = \"full\";\n this.state.displayMode = \"full\";\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.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\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.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n this.applyMinimalContainerFrame();\n } else {\n // Backward-compatible behavior.\n this.closeChat();\n }\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 window.location.origin,\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 sendParentHandshake(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n try {\n iframeWindow.postMessage(\n {\n type: PARENT_HANDSHAKE_TYPE,\n data: { origin: window.location.origin },\n },\n targetOrigin,\n );\n } catch {\n // Best-effort; iframe may fall back to document.referrer for origin discovery.\n }\n }\n\n private flushOutboundMessageQueue(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n const queued = this.outboundMessageQueue;\n if (queued.length === 0) return;\n\n this.outboundMessageQueue = [];\n for (const msg of queued) {\n iframeWindow.postMessage({ type: msg.type, data: msg.data }, targetOrigin);\n }\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n\n // Ensure handshake is sent before any other commands; queue until ack.\n if (!this.handshakeComplete && type !== PARENT_HANDSHAKE_TYPE) {\n const queue = this.outboundMessageQueue;\n if (queue.length < 50) {\n queue.push({ type, data });\n } else {\n this.outboundMessageQueue = [...queue.slice(-49), { type, data }];\n }\n this.sendParentHandshake();\n return;\n }\n\n iframeWindow.postMessage({ type, data }, targetOrigin);\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n // Priority: 1. config.baseUrl, 2. global BUNI_API_URL, 3. default platform URL\n const configUrl = (this.options?.config as any)?.baseUrl;\n const globalUrl = (globalThis as any).BUNI_API_URL;\n const rawUrl = configUrl || globalUrl || BUNI_PLATFORM_URL;\n\n try {\n return new URL(rawUrl).origin;\n } catch {\n return rawUrl;\n }\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 if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n return;\n }\n\n this.closeChat();\n }\n\n maximize(): void {\n void this.openChat();\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\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 setTheme(theme: \"light\" | \"dark\" | \"system\"): void {\n this.postMessageToWidget(\"theme-change\", { theme });\n this.emit(\"theme_changed\", { theme, timestamp: Date.now() });\n }\n\n open(): void {\n this.openChat();\n }\n\n close(): void {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 {\n ...this.state,\n displayMode: this.displayMode,\n };\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 setTheme: (theme: \"light\" | \"dark\" | \"system\") => void;\n open: () => void;\n close: () => 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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"}
package/dist/index.js CHANGED
@@ -320,12 +320,12 @@ class BuniChatWidget {
320
320
  if (event.source === ((_j = this.chatIframe) === null || _j === void 0 ? void 0 : _j.contentWindow) &&
321
321
  event.origin === this.getBaseUrl()) {
322
322
  if (this.isMinimalModeEnabled()) {
323
- if (!this.state.isOpen) {
324
- void this.openChat();
325
- }
326
323
  this.postMessageToWidget("minimize");
324
+ this.applyMinimalContainerFrame();
327
325
  this.displayMode = "minimal";
328
326
  this.state.displayMode = "minimal";
327
+ this.state.isOpen = true;
328
+ this.state.isMinimized = false;
329
329
  }
330
330
  else {
331
331
  this.closeChat();
@@ -478,56 +478,41 @@ class BuniChatWidget {
478
478
  async openChatInMinimalMode() {
479
479
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
480
480
  return;
481
- const config = this.options.config || {};
482
- const isMobile = window.innerWidth <= 768;
483
- const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;
484
- const ensureUnits = (value, defaultValue) => {
485
- if (!value)
486
- return defaultValue;
487
- const str = String(value);
488
- if (str.match(/^[\d.]+\s*(px|em|rem|%|vh|vw)$/))
489
- return str;
490
- if (str.match(/^[\d.]+$/))
491
- return `${str}px`;
492
- return str;
493
- };
494
- const widthValue = ensureUnits(config.width, "350px");
495
- const heightValue = ensureUnits(config.height, "650px");
496
- const chatWidth = isMobile
497
- ? "100vw"
498
- : isTablet
499
- ? "min(calc(100vw - 3rem), 370px)"
500
- : widthValue;
501
- const chatHeight = isMobile
502
- ? "100vh"
503
- : isTablet
504
- ? "min(calc(100vh - 3rem), 620px)"
505
- : heightValue;
506
- // Size container to full chat dimensions initially (iframe needs space to render)
481
+ this.applyMinimalContainerFrame();
482
+ this.state.isMinimized = false;
483
+ this.state.isOpen = true;
484
+ this.displayMode = "minimal";
485
+ this.state.displayMode = "minimal";
486
+ // Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
487
+ this.postMessageToWidget("minimize");
488
+ this.emit("minimized", { timestamp: Date.now() });
489
+ }
490
+ applyMinimalContainerFrame() {
491
+ var _a;
492
+ if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
493
+ return;
494
+ const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
507
495
  this.widgetElement.style.cssText = `
508
496
  position: fixed;
509
497
  pointer-events: none;
510
498
  z-index: 999999;
511
- width: ${chatWidth};
512
- height: ${chatHeight};
513
- ${isMobile ? "max-width: 100vw; max-height: 100vh;" : ""}
499
+ width: min(calc(100vw - 1.5rem), 390px);
500
+ max-width: min(calc(100vw - 1.5rem), 390px);
501
+ height: auto;
502
+ max-height: none;
503
+ min-height: 0;
514
504
  transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
515
- ${this.getPositionStyles(config.position || "bottom-right", false)}
505
+ ${this.getPositionStyles(position, true)}
516
506
  display: block;
517
507
  overflow: visible;
518
508
  box-sizing: border-box;
519
509
  `;
520
- // Hide trigger, show chat iframe
521
510
  this.triggerIframe.style.display = "none";
522
511
  this.chatIframe.style.display = "block";
523
512
  this.chatIframe.style.visibility = "visible";
524
- this.state.isMinimized = false;
525
- this.state.isOpen = true;
526
- this.displayMode = "minimal";
527
- this.state.displayMode = "minimal";
528
- // Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
529
- this.postMessageToWidget("minimize");
530
- this.emit("minimized", { timestamp: Date.now() });
513
+ this.chatIframe.style.width = "100%";
514
+ this.chatIframe.style.height = "min(calc(100vh - 1.5rem), 520px)";
515
+ this.chatIframe.style.maxHeight = "min(calc(100vh - 1.5rem), 520px)";
531
516
  }
532
517
  async openChat() {
533
518
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
@@ -709,23 +694,11 @@ class BuniChatWidget {
709
694
  case "minimized":
710
695
  this.syncServerBehaviorFromData(data);
711
696
  if (this.isMinimalModeEnabled()) {
712
- if (!this.state.isOpen) {
713
- void this.openChat();
714
- }
715
697
  this.displayMode = "minimal";
716
698
  this.state.displayMode = "minimal";
717
- // Shrink container to actual minimal card size
718
- if (this.widgetElement && this.chatIframe) {
719
- const isMobile = window.innerWidth <= 768;
720
- if (!isMobile) {
721
- this.widgetElement.style.width =
722
- "min(calc(100vw - 1.5rem), 390px)";
723
- this.widgetElement.style.height = "auto";
724
- this.widgetElement.style.overflow = "visible";
725
- this.chatIframe.style.height = "520px";
726
- this.chatIframe.style.width = "100%";
727
- }
728
- }
699
+ this.state.isOpen = true;
700
+ this.state.isMinimized = false;
701
+ this.applyMinimalContainerFrame();
729
702
  }
730
703
  else {
731
704
  // Backward-compatible behavior.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.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// Default BuniAI platform URL\nconst BUNI_PLATFORM_URL = \"https://www.buni.ai\";\n\nconst PARENT_HANDSHAKE_TYPE = \"buni:parent_handshake\";\nconst IFRAME_HANDSHAKE_ACK_TYPE = \"buni:iframe_handshake_ack\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private readonly state: BuniChatState;\n private readonly 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 private chatTargetOrigin: string | null;\n private handshakeComplete: boolean;\n private outboundMessageQueue: Array<{ type: string; data?: any }>;\n private displayMode: \"full\" | \"minimal\" | \"hidden\";\n private readonly serverBehavior: {\n enableMinimalMode?: boolean;\n defaultMode?: \"full\" | \"minimal\" | \"hidden\";\n };\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 this.chatTargetOrigin = null;\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n this.displayMode = \"hidden\";\n this.serverBehavior = {};\n }\n\n private isMinimalModeEnabled(): boolean {\n if (typeof this.options?.config?.enableMinimalMode === \"boolean\") {\n return this.options.config.enableMinimalMode;\n }\n\n return Boolean(this.serverBehavior.enableMinimalMode);\n }\n\n private syncServerBehaviorFromData(data: any): void {\n if (!data || typeof data !== \"object\") {\n return;\n }\n\n const behaviorCandidate =\n data.behavior && typeof data.behavior === \"object\"\n ? data.behavior\n : data;\n\n if (typeof behaviorCandidate.enableMinimalMode === \"boolean\") {\n this.serverBehavior.enableMinimalMode = behaviorCandidate.enableMinimalMode;\n }\n\n if (\n behaviorCandidate.defaultMode === \"full\" ||\n behaviorCandidate.defaultMode === \"minimal\" ||\n behaviorCandidate.defaultMode === \"hidden\"\n ) {\n this.serverBehavior.defaultMode = behaviorCandidate.defaultMode;\n }\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, initially hidden until connection is ready\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: none;\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 if (config.enableMinimalMode !== undefined) {\n params.set(\"enableMinimalMode\", String(config.enableMinimalMode));\n }\n if (config.defaultMode) {\n params.set(\"defaultMode\", config.defaultMode);\n }\n if (config.autoMessages && Array.isArray(config.autoMessages)) {\n params.set(\"autoMessages\", JSON.stringify(config.autoMessages));\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 // Wait for chat iframe to load before resolving\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n\n // Compute the iframe origin once we know the final src.\n try {\n this.chatTargetOrigin = new URL(chatIframe.src).origin;\n } catch {\n this.chatTargetOrigin = this.getBaseUrl();\n }\n\n // Reset handshake state for this iframe instance.\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n\n this.setupPostMessageAPI(chatIframe);\n this.sendParentHandshake();\n \n // Now that both iframes are loaded, resolve the promise\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.displayMode = \"hidden\";\n this.displayMode = \"hidden\";\n this.state.isLoaded = true;\n resolve();\n };\n };\n\n // Listen for trigger and connection events\n window.addEventListener(\"message\", (event) => {\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n if (typeof payload.type !== \"string\") return;\n\n switch (payload.type) {\n case \"connection_ready\":\n // Check if message is from chat iframe\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.syncServerBehaviorFromData(payload.data);\n\n const effectiveDefaultMode =\n this.options.config?.defaultMode ??\n this.serverBehavior.defaultMode ??\n \"full\";\n const effectiveMinimalEnabled = this.isMinimalModeEnabled();\n\n if (effectiveMinimalEnabled && effectiveDefaultMode === \"minimal\") {\n // Auto-open in minimal card mode\n void this.openChatInMinimalMode();\n } else if (this.options.config?.autoOpen) {\n void this.openChat();\n } else if (container && !config.hideDefaultTrigger) {\n // Show the trigger button\n container.style.display = \"block\";\n }\n\n // Emit connection_ready event for consumers\n this.emit(\"connection_ready\", {\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n if (\n this.options.onConnectionReady &&\n typeof this.options.onConnectionReady === \"function\"\n ) {\n this.options.onConnectionReady({\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n }\n }\n break;\n\n case \"chatbot:close\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n break;\n\n case \"chatbot:minimize\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\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 // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\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 openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\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 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 // Size container to full chat dimensions initially (iframe needs space to render)\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 iframe\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.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\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.displayMode = \"full\";\n this.state.displayMode = \"full\";\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.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\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.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n // Shrink container to actual minimal card size\n if (this.widgetElement && this.chatIframe) {\n const isMobile = window.innerWidth <= 768;\n if (!isMobile) {\n this.widgetElement.style.width =\n \"min(calc(100vw - 1.5rem), 390px)\";\n this.widgetElement.style.height = \"auto\";\n this.widgetElement.style.overflow = \"visible\";\n this.chatIframe.style.height = \"520px\";\n this.chatIframe.style.width = \"100%\";\n }\n }\n } else {\n // Backward-compatible behavior.\n this.closeChat();\n }\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 window.location.origin,\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 sendParentHandshake(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n try {\n iframeWindow.postMessage(\n {\n type: PARENT_HANDSHAKE_TYPE,\n data: { origin: window.location.origin },\n },\n targetOrigin,\n );\n } catch {\n // Best-effort; iframe may fall back to document.referrer for origin discovery.\n }\n }\n\n private flushOutboundMessageQueue(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n const queued = this.outboundMessageQueue;\n if (queued.length === 0) return;\n\n this.outboundMessageQueue = [];\n for (const msg of queued) {\n iframeWindow.postMessage({ type: msg.type, data: msg.data }, targetOrigin);\n }\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n\n // Ensure handshake is sent before any other commands; queue until ack.\n if (!this.handshakeComplete && type !== PARENT_HANDSHAKE_TYPE) {\n const queue = this.outboundMessageQueue;\n if (queue.length < 50) {\n queue.push({ type, data });\n } else {\n this.outboundMessageQueue = [...queue.slice(-49), { type, data }];\n }\n this.sendParentHandshake();\n return;\n }\n\n iframeWindow.postMessage({ type, data }, targetOrigin);\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n // Priority: 1. config.baseUrl, 2. global BUNI_API_URL, 3. default platform URL\n const configUrl = (this.options?.config as any)?.baseUrl;\n const globalUrl = (globalThis as any).BUNI_API_URL;\n const rawUrl = configUrl || globalUrl || BUNI_PLATFORM_URL;\n\n try {\n return new URL(rawUrl).origin;\n } catch {\n return rawUrl;\n }\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 if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n return;\n }\n\n this.closeChat();\n }\n\n maximize(): void {\n void this.openChat();\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\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 setTheme(theme: \"light\" | \"dark\" | \"system\"): void {\n this.postMessageToWidget(\"theme-change\", { theme });\n this.emit(\"theme_changed\", { theme, timestamp: Date.now() });\n }\n\n open(): void {\n this.openChat();\n }\n\n close(): void {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 {\n ...this.state,\n displayMode: this.displayMode,\n };\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 setTheme: (theme: \"light\" | \"dark\" | \"system\") => void;\n open: () => void;\n close: () => 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.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// Default BuniAI platform URL\nconst BUNI_PLATFORM_URL = \"https://www.buni.ai\";\n\nconst PARENT_HANDSHAKE_TYPE = \"buni:parent_handshake\";\nconst IFRAME_HANDSHAKE_ACK_TYPE = \"buni:iframe_handshake_ack\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private readonly state: BuniChatState;\n private readonly 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 private chatTargetOrigin: string | null;\n private handshakeComplete: boolean;\n private outboundMessageQueue: Array<{ type: string; data?: any }>;\n private displayMode: \"full\" | \"minimal\" | \"hidden\";\n private readonly serverBehavior: {\n enableMinimalMode?: boolean;\n defaultMode?: \"full\" | \"minimal\" | \"hidden\";\n };\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 this.chatTargetOrigin = null;\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n this.displayMode = \"hidden\";\n this.serverBehavior = {};\n }\n\n private isMinimalModeEnabled(): boolean {\n if (typeof this.options?.config?.enableMinimalMode === \"boolean\") {\n return this.options.config.enableMinimalMode;\n }\n\n return Boolean(this.serverBehavior.enableMinimalMode);\n }\n\n private syncServerBehaviorFromData(data: any): void {\n if (!data || typeof data !== \"object\") {\n return;\n }\n\n const behaviorCandidate =\n data.behavior && typeof data.behavior === \"object\"\n ? data.behavior\n : data;\n\n if (typeof behaviorCandidate.enableMinimalMode === \"boolean\") {\n this.serverBehavior.enableMinimalMode = behaviorCandidate.enableMinimalMode;\n }\n\n if (\n behaviorCandidate.defaultMode === \"full\" ||\n behaviorCandidate.defaultMode === \"minimal\" ||\n behaviorCandidate.defaultMode === \"hidden\"\n ) {\n this.serverBehavior.defaultMode = behaviorCandidate.defaultMode;\n }\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, initially hidden until connection is ready\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: none;\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 if (config.enableMinimalMode !== undefined) {\n params.set(\"enableMinimalMode\", String(config.enableMinimalMode));\n }\n if (config.defaultMode) {\n params.set(\"defaultMode\", config.defaultMode);\n }\n if (config.autoMessages && Array.isArray(config.autoMessages)) {\n params.set(\"autoMessages\", JSON.stringify(config.autoMessages));\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 // Wait for chat iframe to load before resolving\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n\n // Compute the iframe origin once we know the final src.\n try {\n this.chatTargetOrigin = new URL(chatIframe.src).origin;\n } catch {\n this.chatTargetOrigin = this.getBaseUrl();\n }\n\n // Reset handshake state for this iframe instance.\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n\n this.setupPostMessageAPI(chatIframe);\n this.sendParentHandshake();\n \n // Now that both iframes are loaded, resolve the promise\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.displayMode = \"hidden\";\n this.displayMode = \"hidden\";\n this.state.isLoaded = true;\n resolve();\n };\n };\n\n // Listen for trigger and connection events\n window.addEventListener(\"message\", (event) => {\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n if (typeof payload.type !== \"string\") return;\n\n switch (payload.type) {\n case \"connection_ready\":\n // Check if message is from chat iframe\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.syncServerBehaviorFromData(payload.data);\n\n const effectiveDefaultMode =\n this.options.config?.defaultMode ??\n this.serverBehavior.defaultMode ??\n \"full\";\n const effectiveMinimalEnabled = this.isMinimalModeEnabled();\n\n if (effectiveMinimalEnabled && effectiveDefaultMode === \"minimal\") {\n // Auto-open in minimal card mode\n void this.openChatInMinimalMode();\n } else if (this.options.config?.autoOpen) {\n void this.openChat();\n } else if (container && !config.hideDefaultTrigger) {\n // Show the trigger button\n container.style.display = \"block\";\n }\n\n // Emit connection_ready event for consumers\n this.emit(\"connection_ready\", {\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n if (\n this.options.onConnectionReady &&\n typeof this.options.onConnectionReady === \"function\"\n ) {\n this.options.onConnectionReady({\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n }\n }\n break;\n\n case \"chatbot:close\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n break;\n\n case \"chatbot:minimize\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n if (this.isMinimalModeEnabled()) {\n this.postMessageToWidget(\"minimize\");\n this.applyMinimalContainerFrame();\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\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 // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\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 openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n this.applyMinimalContainerFrame();\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private applyMinimalContainerFrame(): void {\n if (!this.widgetElement || !this.chatIframe || !this.triggerIframe) return;\n\n const position = this.options.config?.position || \"bottom-right\";\n\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: min(calc(100vw - 1.5rem), 390px);\n max-width: min(calc(100vw - 1.5rem), 390px);\n height: auto;\n max-height: none;\n min-height: 0;\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(position, true)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n this.chatIframe.style.width = \"100%\";\n this.chatIframe.style.height = \"min(calc(100vh - 1.5rem), 520px)\";\n this.chatIframe.style.maxHeight = \"min(calc(100vh - 1.5rem), 520px)\";\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\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.displayMode = \"full\";\n this.state.displayMode = \"full\";\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.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\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.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n this.applyMinimalContainerFrame();\n } else {\n // Backward-compatible behavior.\n this.closeChat();\n }\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 window.location.origin,\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 sendParentHandshake(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n try {\n iframeWindow.postMessage(\n {\n type: PARENT_HANDSHAKE_TYPE,\n data: { origin: window.location.origin },\n },\n targetOrigin,\n );\n } catch {\n // Best-effort; iframe may fall back to document.referrer for origin discovery.\n }\n }\n\n private flushOutboundMessageQueue(): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n const queued = this.outboundMessageQueue;\n if (queued.length === 0) return;\n\n this.outboundMessageQueue = [];\n for (const msg of queued) {\n iframeWindow.postMessage({ type: msg.type, data: msg.data }, targetOrigin);\n }\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n const iframeWindow = this.chatIframe?.contentWindow;\n if (!iframeWindow) return;\n\n const targetOrigin = this.chatTargetOrigin ?? this.getBaseUrl();\n\n // Ensure handshake is sent before any other commands; queue until ack.\n if (!this.handshakeComplete && type !== PARENT_HANDSHAKE_TYPE) {\n const queue = this.outboundMessageQueue;\n if (queue.length < 50) {\n queue.push({ type, data });\n } else {\n this.outboundMessageQueue = [...queue.slice(-49), { type, data }];\n }\n this.sendParentHandshake();\n return;\n }\n\n iframeWindow.postMessage({ type, data }, targetOrigin);\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n // Priority: 1. config.baseUrl, 2. global BUNI_API_URL, 3. default platform URL\n const configUrl = (this.options?.config as any)?.baseUrl;\n const globalUrl = (globalThis as any).BUNI_API_URL;\n const rawUrl = configUrl || globalUrl || BUNI_PLATFORM_URL;\n\n try {\n return new URL(rawUrl).origin;\n } catch {\n return rawUrl;\n }\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 if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n return;\n }\n\n this.closeChat();\n }\n\n maximize(): void {\n void this.openChat();\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\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 setTheme(theme: \"light\" | \"dark\" | \"system\"): void {\n this.postMessageToWidget(\"theme-change\", { theme });\n this.emit(\"theme_changed\", { theme, timestamp: Date.now() });\n }\n\n open(): void {\n this.openChat();\n }\n\n close(): void {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\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 {\n ...this.state,\n displayMode: this.displayMode,\n };\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 setTheme: (theme: \"light\" | \"dark\" | \"system\") => void;\n open: () => void;\n close: () => 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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"}
package/dist/widget.d.ts CHANGED
@@ -20,6 +20,7 @@ export declare class BuniChatWidget implements BuniChatAPI {
20
20
  private loadWidget;
21
21
  private buildTriggerHTML;
22
22
  private openChatInMinimalMode;
23
+ private applyMinimalContainerFrame;
23
24
  private openChat;
24
25
  private closeChat;
25
26
  private getPositionStyles;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buni.ai/chatbot-core",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "description": "Core functionality for BuniAI chat widget adapters",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",