@buni.ai/chatbot-core 1.0.24 → 1.0.25

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
@@ -488,27 +488,33 @@ class BuniChatWidget {
488
488
  if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
489
489
  return;
490
490
  const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
491
+ // Use a conservative initial height; the iframe will report the exact
492
+ // rendered card height via "minimal_card_size" and we'll resize then.
493
+ const initialMinimalHeight = "420px";
491
494
  this.widgetElement.style.cssText = `
492
495
  position: fixed;
493
496
  pointer-events: none;
494
497
  z-index: 999999;
495
498
  width: min(calc(100vw - 1.5rem), 390px);
496
499
  max-width: min(calc(100vw - 1.5rem), 390px);
497
- height: auto;
498
- max-height: none;
499
- min-height: 0;
500
+ height: ${initialMinimalHeight};
501
+ max-height: ${initialMinimalHeight};
500
502
  transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
501
503
  ${this.getPositionStyles(position, true)}
502
504
  display: block;
503
- overflow: visible;
505
+ overflow: hidden;
506
+ border-radius: 16px;
507
+ box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);
504
508
  box-sizing: border-box;
505
509
  `;
506
510
  this.triggerIframe.style.display = "none";
507
511
  this.chatIframe.style.display = "block";
508
512
  this.chatIframe.style.visibility = "visible";
509
513
  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)";
514
+ this.chatIframe.style.height = initialMinimalHeight;
515
+ this.chatIframe.style.maxHeight = initialMinimalHeight;
516
+ this.chatIframe.style.borderRadius = "0";
517
+ this.chatIframe.style.boxShadow = "none";
512
518
  }
513
519
  async openChat() {
514
520
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
@@ -559,6 +565,11 @@ class BuniChatWidget {
559
565
  this.triggerIframe.style.display = "none";
560
566
  this.chatIframe.style.display = "block";
561
567
  this.chatIframe.style.visibility = "visible";
568
+ // Restore full-mode iframe styles that may have been overridden in minimal mode
569
+ this.chatIframe.style.height = "100%";
570
+ this.chatIframe.style.maxHeight = "100%";
571
+ this.chatIframe.style.borderRadius = isMobile ? "0" : "16px";
572
+ this.chatIframe.style.boxShadow = isMobile ? "none" : "0 8px 32px rgba(0,0,0,0.15)";
562
573
  this.state.isMinimized = false;
563
574
  this.state.isOpen = true;
564
575
  this.displayMode = "full";
@@ -687,8 +698,17 @@ class BuniChatWidget {
687
698
  this.options.onNewMessage(data);
688
699
  }
689
700
  break;
690
- case "minimized":
701
+ case "minimized": {
691
702
  this.syncServerBehaviorFromData(data);
703
+ const reportedDisplayMode = (data === null || data === void 0 ? void 0 : data.displayMode) === "minimal" || (data === null || data === void 0 ? void 0 : data.displayMode) === "hidden"
704
+ ? data.displayMode
705
+ : null;
706
+ if (reportedDisplayMode === "hidden") {
707
+ this.closeChat();
708
+ this.displayMode = "hidden";
709
+ this.state.displayMode = "hidden";
710
+ break;
711
+ }
692
712
  if (this.isMinimalModeEnabled()) {
693
713
  this.displayMode = "minimal";
694
714
  this.state.displayMode = "minimal";
@@ -701,6 +721,7 @@ class BuniChatWidget {
701
721
  this.closeChat();
702
722
  }
703
723
  break;
724
+ }
704
725
  case "new_unread_message":
705
726
  // Update unread count in trigger
706
727
  this.state.unreadCount++;
@@ -722,6 +743,25 @@ class BuniChatWidget {
722
743
  this.options.onError(data.error);
723
744
  }
724
745
  break;
746
+ case "maximized":
747
+ // The iframe has switched to full mode (e.g. user clicked expand from
748
+ // minimal card). Resize the host container to the configured full size.
749
+ void this.openChat();
750
+ break;
751
+ case "minimal_card_size":
752
+ // The iframe reports its rendered card height so we can shrink the
753
+ // container to wrap the card tightly. Without this the host-page
754
+ // box-shadow renders around the full container, appearing as padding.
755
+ // Only apply when still in minimal mode to avoid overriding a pending
756
+ // full-mode transition.
757
+ if (this.widgetElement && this.chatIframe && (data === null || data === void 0 ? void 0 : data.height) > 0 && this.displayMode === "minimal") {
758
+ const h = `${data.height}px`;
759
+ this.widgetElement.style.height = h;
760
+ this.widgetElement.style.maxHeight = h;
761
+ this.chatIframe.style.height = h;
762
+ this.chatIframe.style.maxHeight = h;
763
+ }
764
+ break;
725
765
  }
726
766
  });
727
767
  }
@@ -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 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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"}
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 // Use a conservative initial height; the iframe will report the exact\n // rendered card height via \"minimal_card_size\" and we'll resize then.\n const initialMinimalHeight = \"420px\";\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: ${initialMinimalHeight};\n max-height: ${initialMinimalHeight};\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: hidden;\n border-radius: 16px;\n box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);\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 = initialMinimalHeight;\n this.chatIframe.style.maxHeight = initialMinimalHeight;\n this.chatIframe.style.borderRadius = \"0\";\n this.chatIframe.style.boxShadow = \"none\";\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 // Restore full-mode iframe styles that may have been overridden in minimal mode\n this.chatIframe.style.height = \"100%\";\n this.chatIframe.style.maxHeight = \"100%\";\n this.chatIframe.style.borderRadius = isMobile ? \"0\" : \"16px\";\n this.chatIframe.style.boxShadow = isMobile ? \"none\" : \"0 8px 32px rgba(0,0,0,0.15)\";\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 const reportedDisplayMode =\n data?.displayMode === \"minimal\" || data?.displayMode === \"hidden\"\n ? data.displayMode\n : null;\n\n if (reportedDisplayMode === \"hidden\") {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n break;\n }\n\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\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 case \"maximized\":\n // The iframe has switched to full mode (e.g. user clicked expand from\n // minimal card). Resize the host container to the configured full size.\n void this.openChat();\n break;\n\n case \"minimal_card_size\":\n // The iframe reports its rendered card height so we can shrink the\n // container to wrap the card tightly. Without this the host-page\n // box-shadow renders around the full container, appearing as padding.\n // Only apply when still in minimal mode to avoid overriding a pending\n // full-mode transition.\n if (this.widgetElement && this.chatIframe && data?.height > 0 && this.displayMode === \"minimal\") {\n const h = `${data.height}px`;\n this.widgetElement.style.height = h;\n this.widgetElement.style.maxHeight = h;\n this.chatIframe.style.height = h;\n this.chatIframe.style.maxHeight = h;\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
@@ -492,27 +492,33 @@ class BuniChatWidget {
492
492
  if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
493
493
  return;
494
494
  const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
495
+ // Use a conservative initial height; the iframe will report the exact
496
+ // rendered card height via "minimal_card_size" and we'll resize then.
497
+ const initialMinimalHeight = "420px";
495
498
  this.widgetElement.style.cssText = `
496
499
  position: fixed;
497
500
  pointer-events: none;
498
501
  z-index: 999999;
499
502
  width: min(calc(100vw - 1.5rem), 390px);
500
503
  max-width: min(calc(100vw - 1.5rem), 390px);
501
- height: auto;
502
- max-height: none;
503
- min-height: 0;
504
+ height: ${initialMinimalHeight};
505
+ max-height: ${initialMinimalHeight};
504
506
  transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
505
507
  ${this.getPositionStyles(position, true)}
506
508
  display: block;
507
- overflow: visible;
509
+ overflow: hidden;
510
+ border-radius: 16px;
511
+ box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);
508
512
  box-sizing: border-box;
509
513
  `;
510
514
  this.triggerIframe.style.display = "none";
511
515
  this.chatIframe.style.display = "block";
512
516
  this.chatIframe.style.visibility = "visible";
513
517
  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)";
518
+ this.chatIframe.style.height = initialMinimalHeight;
519
+ this.chatIframe.style.maxHeight = initialMinimalHeight;
520
+ this.chatIframe.style.borderRadius = "0";
521
+ this.chatIframe.style.boxShadow = "none";
516
522
  }
517
523
  async openChat() {
518
524
  if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
@@ -563,6 +569,11 @@ class BuniChatWidget {
563
569
  this.triggerIframe.style.display = "none";
564
570
  this.chatIframe.style.display = "block";
565
571
  this.chatIframe.style.visibility = "visible";
572
+ // Restore full-mode iframe styles that may have been overridden in minimal mode
573
+ this.chatIframe.style.height = "100%";
574
+ this.chatIframe.style.maxHeight = "100%";
575
+ this.chatIframe.style.borderRadius = isMobile ? "0" : "16px";
576
+ this.chatIframe.style.boxShadow = isMobile ? "none" : "0 8px 32px rgba(0,0,0,0.15)";
566
577
  this.state.isMinimized = false;
567
578
  this.state.isOpen = true;
568
579
  this.displayMode = "full";
@@ -691,8 +702,17 @@ class BuniChatWidget {
691
702
  this.options.onNewMessage(data);
692
703
  }
693
704
  break;
694
- case "minimized":
705
+ case "minimized": {
695
706
  this.syncServerBehaviorFromData(data);
707
+ const reportedDisplayMode = (data === null || data === void 0 ? void 0 : data.displayMode) === "minimal" || (data === null || data === void 0 ? void 0 : data.displayMode) === "hidden"
708
+ ? data.displayMode
709
+ : null;
710
+ if (reportedDisplayMode === "hidden") {
711
+ this.closeChat();
712
+ this.displayMode = "hidden";
713
+ this.state.displayMode = "hidden";
714
+ break;
715
+ }
696
716
  if (this.isMinimalModeEnabled()) {
697
717
  this.displayMode = "minimal";
698
718
  this.state.displayMode = "minimal";
@@ -705,6 +725,7 @@ class BuniChatWidget {
705
725
  this.closeChat();
706
726
  }
707
727
  break;
728
+ }
708
729
  case "new_unread_message":
709
730
  // Update unread count in trigger
710
731
  this.state.unreadCount++;
@@ -726,6 +747,25 @@ class BuniChatWidget {
726
747
  this.options.onError(data.error);
727
748
  }
728
749
  break;
750
+ case "maximized":
751
+ // The iframe has switched to full mode (e.g. user clicked expand from
752
+ // minimal card). Resize the host container to the configured full size.
753
+ void this.openChat();
754
+ break;
755
+ case "minimal_card_size":
756
+ // The iframe reports its rendered card height so we can shrink the
757
+ // container to wrap the card tightly. Without this the host-page
758
+ // box-shadow renders around the full container, appearing as padding.
759
+ // Only apply when still in minimal mode to avoid overriding a pending
760
+ // full-mode transition.
761
+ if (this.widgetElement && this.chatIframe && (data === null || data === void 0 ? void 0 : data.height) > 0 && this.displayMode === "minimal") {
762
+ const h = `${data.height}px`;
763
+ this.widgetElement.style.height = h;
764
+ this.widgetElement.style.maxHeight = h;
765
+ this.chatIframe.style.height = h;
766
+ this.chatIframe.style.maxHeight = h;
767
+ }
768
+ break;
729
769
  }
730
770
  });
731
771
  }
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 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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"}
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 // Use a conservative initial height; the iframe will report the exact\n // rendered card height via \"minimal_card_size\" and we'll resize then.\n const initialMinimalHeight = \"420px\";\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: ${initialMinimalHeight};\n max-height: ${initialMinimalHeight};\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: hidden;\n border-radius: 16px;\n box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);\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 = initialMinimalHeight;\n this.chatIframe.style.maxHeight = initialMinimalHeight;\n this.chatIframe.style.borderRadius = \"0\";\n this.chatIframe.style.boxShadow = \"none\";\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 // Restore full-mode iframe styles that may have been overridden in minimal mode\n this.chatIframe.style.height = \"100%\";\n this.chatIframe.style.maxHeight = \"100%\";\n this.chatIframe.style.borderRadius = isMobile ? \"0\" : \"16px\";\n this.chatIframe.style.boxShadow = isMobile ? \"none\" : \"0 8px 32px rgba(0,0,0,0.15)\";\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 const reportedDisplayMode =\n data?.displayMode === \"minimal\" || data?.displayMode === \"hidden\"\n ? data.displayMode\n : null;\n\n if (reportedDisplayMode === \"hidden\") {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n break;\n }\n\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\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 case \"maximized\":\n // The iframe has switched to full mode (e.g. user clicked expand from\n // minimal card). Resize the host container to the configured full size.\n void this.openChat();\n break;\n\n case \"minimal_card_size\":\n // The iframe reports its rendered card height so we can shrink the\n // container to wrap the card tightly. Without this the host-page\n // box-shadow renders around the full container, appearing as padding.\n // Only apply when still in minimal mode to avoid overriding a pending\n // full-mode transition.\n if (this.widgetElement && this.chatIframe && data?.height > 0 && this.displayMode === \"minimal\") {\n const h = `${data.height}px`;\n this.widgetElement.style.height = h;\n this.widgetElement.style.maxHeight = h;\n this.chatIframe.style.height = h;\n this.chatIframe.style.maxHeight = h;\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":";;;;AAQA;AACA,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEhD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AACtD,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAE9D;MACa,cAAc,CAAA;AAkBzB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,WAAW,EAAE,CAAC;SACf,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC1B;IAEO,oBAAoB,GAAA;;AAC1B,QAAA,IAAI,QAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,iBAAiB,CAAA,KAAK,SAAS,EAAE;AAChE,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;SAC9C;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;KACvD;AAEO,IAAA,0BAA0B,CAAC,IAAS,EAAA;QAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACrC,OAAO;SACR;QAED,MAAM,iBAAiB,GACrB,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;cAC9C,IAAI,CAAC,QAAQ;cACb,IAAI,CAAC;AAEX,QAAA,IAAI,OAAO,iBAAiB,CAAC,iBAAiB,KAAK,SAAS,EAAE;YAC5D,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;SAC7E;AAED,QAAA,IACE,iBAAiB,CAAC,WAAW,KAAK,MAAM;YACxC,iBAAiB,CAAC,WAAW,KAAK,SAAS;AAC3C,YAAA,iBAAiB,CAAC,WAAW,KAAK,QAAQ,EAC1C;YACA,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;SACjE;KACF;IAED,MAAM,UAAU,CAAC,OAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAEvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE9C,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC5C;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,QAAQ,GACZ,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEnE,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aAC3B;AACD,YAAA,MAAM,QAAQ,CAAC;SAChB;KACF;AAEO,IAAA,MAAM,UAAU,GAAA;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAErC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,cAAc,CAC/C,4BAA4B,CAC7B,CAAC;YACF,IAAI,iBAAiB,EAAE;gBACrB,iBAAiB,CAAC,MAAM,EAAE,CAAC;aAC5B;;YAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,SAAS,CAAC,EAAE,GAAG,4BAA4B,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AAEzC,YAAA,MAAM,WAAW,GAAG,CAClB,KAAkC,EAClC,YAAoB,KACV;AACV,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,YAAY,CAAC;AAChC,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,gBAAA,IAAI,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAAE,oBAAA,OAAO,GAAG,CAAC;AAC5D,gBAAA,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;oBAAE,OAAO,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAC;AAC7C,gBAAA,OAAO,GAAG,CAAC;AACb,aAAC,CAAC;YAEF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;AAGxD,YAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;AACzD,YAAA,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;AACtD,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AAC7C,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC;;AAGzD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;;AAI1C,YAAA,MAAM,YAAY,GAAG,eAAe,IAAI,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;YACzE,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,YAAA,MAAM,eAAe,GAAG,eAAe,IAAI,cAAc,GAAG,MAAM,GAAG,EAAE,CAAC;;AAGxE,YAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;iBAIf,YAAY,CAAA;kBACX,aAAa,CAAA;UACrB,eAAe,GAAG,CAAA,WAAA,EAAc,eAAe,CAAG,CAAA,CAAA,GAAG,EAAE,CAAA;;UAEvD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,EAAE,IAAI,CAAC,CAAA;;;;OAIlE,CAAC;;YAGF,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,aAAa,CAAC,EAAE,GAAG,qBAAqB,CAAC;AACzC,YAAA,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;;yBAQX,eAAe,IAAI,cAAc,GAAG,MAAM,GAAG,KAAK,CAAA;;;OAGpE,CAAC;AACF,YAAA,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;;AAG3D,YAAA,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAErC,YAAA,aAAa,CAAC,MAAM,GAAG,MAAK;;AAC1B,gBAAA,MAAM,UAAU,GACd,aAAa,CAAC,eAAe;AAC7B,qBAAA,CAAA,EAAA,GAAA,aAAa,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAA,CAAC;gBACxC,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;oBAC9D,OAAO;iBACR;;AAGD,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CACvC,YAAY,EACZ,WAAW,IAAI,WAAW,EAC1B,eAAe,IAAI,cAAc,EACjC,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;gBAEF,UAAU,CAAC,IAAI,EAAE,CAAC;AAClB,gBAAA,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;;gBAGnB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD,gBAAA,UAAU,CAAC,EAAE,GAAG,kBAAkB,CAAC;;AAGnC,gBAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;AACjC,oBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AACzB,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS;AAC/C,iBAAA,CAAC,CAAC;;gBAGH,IAAI,MAAM,CAAC,KAAK;oBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,MAAM,CAAC,YAAY;oBACrB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,cAAc;oBACvB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,QAAQ;oBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7D,gBAAA,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;AAC1C,oBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAClC,gBAAA,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;AAC5C,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,YAAY;oBACrB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,WAAW;oBAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,MAAM,CAAC,cAAc;oBACvB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,WAAW;oBAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,MAAM,CAAC,YAAY;oBACrB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,UAAU;oBAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,UAAU;oBAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;;AAGnE,gBAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;AACnC,oBAAA,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;AAC/B,oBAAA,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,gBAAA,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;AACpC,oBAAA,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;AACnC,oBAAA,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;AACjC,oBAAA,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACtD,gBAAA,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;AACvC,oBAAA,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClE,gBAAA,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;AACrC,oBAAA,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;AAC9D,gBAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;AACnC,oBAAA,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;AACtC,oBAAA,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;AACtC,oBAAA,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;gBAChE,IAAI,MAAM,CAAC,eAAe;oBACxB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBACxD,IAAI,MAAM,CAAC,iBAAiB;AAC1B,oBAAA,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CACzC,CAAC;AACJ,gBAAA,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE;AAC1C,oBAAA,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBACnE;AACD,gBAAA,IAAI,MAAM,CAAC,WAAW,EAAE;oBACtB,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;iBAC/C;AACD,gBAAA,IAAI,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AAC7D,oBAAA,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;iBACjE;AAED,gBAAA,UAAU,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,YAAA,EAAe,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;;AAGxE,gBAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;;AAQR,yBAAA,EAAA,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAA;;;AAG1B,sBAAA,EAAA,QAAQ,GAAG,MAAM,GAAG,6BAA6B,CAAA;;SAEhE,CAAC;AACF,gBAAA,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACpD,gBAAA,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAEvD,gBAAA,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;;AAGlC,gBAAA,UAAU,CAAC,MAAM,GAAG,MAAK;;AAEvB,oBAAA,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;;AAGvC,oBAAA,IAAI;AACF,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;qBACxD;AAAC,oBAAA,OAAA,EAAA,EAAM;AACN,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;qBAC3C;;AAGD,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,oBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAE/B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;oBACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;;AAG3B,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,oBAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,oBAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,oBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,oBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;AAClC,oBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,oBAAA,OAAO,EAAE,CAAC;AACZ,iBAAC,CAAC;AACJ,aAAC,CAAC;;YAGF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;;AAC3C,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;oBAAE,OAAO;AACpD,gBAAA,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;AAE7C,gBAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,oBAAA,KAAK,kBAAkB;;wBAErB,IACE,KAAK,CAAC,MAAM,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA;4BAC/C,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,EAClC;AACA,4BAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BAE9C,MAAM,oBAAoB,GACxB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,OAAO,CAAC,MAAM,0CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAChC,IAAI,CAAC,cAAc,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAC/B,MAAM,CAAC;AACT,4BAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5D,4BAAA,IAAI,uBAAuB,IAAI,oBAAoB,KAAK,SAAS,EAAE;;AAEjE,gCAAA,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC;6BACnC;iCAAM,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,EAAE;AACxC,gCAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;6BACtB;AAAM,iCAAA,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;;AAElD,gCAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;6BACnC;;AAGD,4BAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,gCAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,gCAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ;AACjC,6BAAA,CAAC,CAAC;AACH,4BAAA,IACE,IAAI,CAAC,OAAO,CAAC,iBAAiB;gCAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU,EACpD;AACA,gCAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AAC7B,oCAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oCAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ;AACjC,iCAAA,CAAC,CAAC;6BACJ;yBACF;wBACD,MAAM;AAER,oBAAA,KAAK,eAAe;wBAClB,IACE,KAAK,CAAC,MAAM,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA;4BAC/C,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,EAClC;4BACA,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,4BAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,4BAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;yBACnC;wBACD,MAAM;AAER,oBAAA,KAAK,kBAAkB;wBACrB,IACE,KAAK,CAAC,MAAM,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA;4BAC/C,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,EAClC;AACA,4BAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAC/B,gCAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gCACrC,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,gCAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,gCAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;AACnC,gCAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,gCAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;6BAChC;iCAAM;gCACL,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,gCAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,gCAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;6BACnC;yBACF;wBACD,MAAM;AAER,oBAAA,KAAK,iBAAiB;wBACpB,IACE,KAAK,CAAC,MAAM,MAAK,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAA;4BAClD,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EACvC;4BACA,IAAI,CAAC,QAAQ,EAAE,CAAC;yBACjB;wBACD,MAAM;iBACT;AACH,aAAC,CAAC,CAAC;;;YAGH,UAAU,CAAC,MAAK;AACd,gBAAA,IACE,SAAS;oBACT,CAAC,MAAM,CAAC,kBAAkB;AAC1B,oBAAA,SAAS,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM;AAClC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,EAC3B;AACA,oBAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;iBACnC;aACF,EAAE,KAAK,CAAC,CAAC;AACV,YAAA,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;IAEO,gBAAgB,CACtB,YAAoB,EACpB,IAAY,EACZ,QAAiB,EACjB,YAAqB,EACrB,UAAmB,EACnB,UAAmB,EAAA;QAEnB,MAAM,aAAa,GAAG,YAAY;cAC9B,CAAa,UAAA,EAAA,YAAY,CAA0E,wEAAA,CAAA;AACrG,cAAE,UAAU,KAAK,MAAM,IAAI,UAAU;AACnC,kBAAE,CAAA,6MAAA,EAAgN,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAQ,MAAA,CAAA;kBAChQ,wKAAwK,CAAC;QAE/K,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;AAoBE,WAAA,EAAA,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAA;AACnB,eAAA,EAAA,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAA;oBAC5B,YAAY,CAAA;;AAET,qBAAA,EAAA,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;;;;;AAKxC,MAAA,EAAA,QAAQ,GAAG,EAAE,GAAG,4BAA4B,CAAA;;;;;+BAKrB,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAyCV,YAAY,CAAA;;;;;;;;4BAQjB,aAAa,CAAA;QACjC,QAAQ,GAAG,CAAA,mBAAA,EAAsB,IAAI,CAAS,OAAA,CAAA,GAAG,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BnD,CAAC;KACN;AAEO,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3E,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAElC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;;AAGnC,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KACnD;IAEO,0BAA0B,GAAA;;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAE3E,QAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,cAAc,CAAC;;;QAIjE,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;gBAMvB,oBAAoB,CAAA;oBAChB,oBAAoB,CAAA;;AAEhC,MAAA,EAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;;;;;;KAMzC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;KAC1C;AAEO,IAAA,MAAM,QAAQ,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3E,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,OAAO;QAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AACzC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;AAEtE,QAAA,MAAM,WAAW,GAAG,CAClB,KAAkC,EAClC,YAAoB,KACV;AACV,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,YAAY,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAAE,gBAAA,OAAO,GAAG,CAAC;AAC5D,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,OAAO,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI,CAAC;AAC7C,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC;QAEF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;QAGxD,MAAM,SAAS,GAAG,QAAQ;AACxB,cAAE,OAAO;AACT,cAAE,QAAQ;AACR,kBAAE,gCAAgC;kBAChC,UAAU,CAAC;QAEjB,MAAM,UAAU,GAAG,QAAQ;AACzB,cAAE,OAAO;AACT,cAAE,QAAQ;AACR,kBAAE,gCAAgC;kBAChC,WAAW,CAAC;;AAGlB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;eAIxB,SAAS,CAAA;gBACR,UAAU,CAAA;AAClB,MAAA,EAAA,QAAQ,GAAG,sCAAsC,GAAG,EAAE,CAAA;;QAEtD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,EAAE,KAAK,CAAC,CAAA;;;;KAInE,CAAC;;QAGF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;;QAE7C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,6BAA6B,CAAC;AAEpF,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KACnD;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AACzC,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;AACzD,QAAA,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;;QAG5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;;AAG5C,QAAA,MAAM,YAAY,GAAG,eAAe,IAAI,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;QACzE,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,QAAA,MAAM,eAAe,GAAG,eAAe,IAAI,cAAc,GAAG,MAAM,GAAG,EAAE,CAAC;AAExE,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;eAIxB,YAAY,CAAA;gBACX,aAAa,CAAA;QACrB,eAAe,GAAG,CAAA,WAAA,EAAc,eAAe,CAAG,CAAA,CAAA,GAAG,EAAE,CAAA;;QAEvD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,EAAE,IAAI,CAAC,CAAA;;;;KAIlE,CAAC;;QAGF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAE3C,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KACnD;AAEO,IAAA,iBAAiB,CACvB,QAAgB,EAChB,WAAA,GAAuB,KAAK,EAAA;;AAG5B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;AAExC,QAAA,MAAM,QAAQ,GAAG,aAAa,IAAI,GAAG,CAAC;QACtC,MAAM,QAAQ,GAAG,aAAa,GAAG,GAAG,IAAI,aAAa,IAAI,IAAI,CAAC;;;;AAK9D,QAAA,IAAI,MAAc,CAAC;QAEnB,IAAI,WAAW,EAAE;;YAEf,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;SACrC;aAAM,IAAI,QAAQ,EAAE;;YAEnB,MAAM,GAAG,GAAG,CAAC;SACd;aAAM,IAAI,QAAQ,EAAE;;YAEnB,MAAM,GAAG,MAAM,CAAC;SACjB;aAAM;;YAEL,MAAM,GAAG,MAAM,CAAC;SACjB;;AAGD,QAAA,IAAI,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,OAAO,uCAAuC,CAAC;SAChD;;QAGD,QAAQ,QAAQ;AACd,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,CAAW,QAAA,EAAA,MAAM,CAAY,SAAA,EAAA,MAAM,GAAG,CAAC;AAChD,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,CAAW,QAAA,EAAA,MAAM,CAAW,QAAA,EAAA,MAAM,GAAG,CAAC;AAC/C,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,CAAQ,KAAA,EAAA,MAAM,CAAY,SAAA,EAAA,MAAM,GAAG,CAAC;AAC7C,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAQ,KAAA,EAAA,MAAM,CAAW,QAAA,EAAA,MAAM,GAAG,CAAC;AAC5C,YAAA;AACE,gBAAA,OAAO,CAAW,QAAA,EAAA,MAAM,CAAY,SAAA,EAAA,MAAM,GAAG,CAAC;SACjD;KACF;AAEO,IAAA,mBAAmB,CAAC,MAAyB,EAAA;;QAEnD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;;YAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,EAAE;gBACzC,OAAO;aACR;;YAGD,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;gBACtC,OAAO;aACR;AAED,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO;AACpD,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAErC,QAAQ,IAAI;AACV,gBAAA,KAAK,yBAAyB;AAC5B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9B,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACjC,MAAM;AAER,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzB,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACxB,wBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBAC5B;oBACD,MAAM;AAER,gBAAA,KAAK,oBAAoB;oBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC;AAClD,oBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AACtC,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;AACpC,wBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;qBACxC;oBACD,MAAM;AAER,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,wBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;qBAC1B;AACD,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC/B,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC7B,wBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;qBACjC;oBACD,MAAM;gBAER,KAAK,WAAW,EAAE;AAChB,oBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,mBAAmB,GACvB,CAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,WAAW,MAAK,SAAS,IAAI,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,WAAW,MAAK,QAAQ;0BAC7D,IAAI,CAAC,WAAW;0BAChB,IAAI,CAAC;AAEX,oBAAA,IAAI,mBAAmB,KAAK,QAAQ,EAAE;wBACpC,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,wBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,wBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;wBAClC,MAAM;qBACP;AAED,oBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAC/B,wBAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,wBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;AACnC,wBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,wBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;wBAC/B,IAAI,CAAC,0BAA0B,EAAE,CAAC;qBACnC;yBAAM;;wBAEL,IAAI,CAAC,SAAS,EAAE,CAAC;qBAClB;oBACD,MAAM;iBACP;AAED,gBAAA,KAAK,oBAAoB;;AAEvB,oBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACzB,oBAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE;wBACrC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAC1C,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAC5D,MAAM,CAAC,QAAQ,CAAC,MAAM,CACvB,CAAC;qBACH;oBACD,MAAM;AAER,gBAAA,KAAK,uBAAuB;AAC1B,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,oBAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;oBACzC,MAAM;AAER,gBAAA,KAAK,iBAAiB;AACpB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;oBACnC,MAAM;AAER,gBAAA,KAAK,OAAO;AACV,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzB,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;wBACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAClC;oBACD,MAAM;AAER,gBAAA,KAAK,WAAW;;;AAGd,oBAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrB,MAAM;AAER,gBAAA,KAAK,mBAAmB;;;;;;oBAMtB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,IAAG,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;AAC/F,wBAAA,MAAM,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,IAAI,CAAC;wBAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;wBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;wBACvC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;wBACjC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;qBACrC;oBACD,MAAM;aACT;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,mBAAmB,GAAA;;QACzB,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AAChE,QAAA,IAAI;YACF,YAAY,CAAC,WAAW,CACtB;AACE,gBAAA,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;aACzC,EACD,YAAY,CACb,CAAC;SACH;AAAC,QAAA,OAAA,EAAA,EAAM;;SAEP;KACF;IAEO,yBAAyB,GAAA;;QAC/B,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AAChE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;AAEhC,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAC/B,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,YAAA,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;SAC5E;KACF;IAEO,mBAAmB,CAAC,IAAY,EAAE,IAAU,EAAA;;QAClD,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,UAAU,EAAE,CAAC;;QAGhE,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,KAAK,qBAAqB,EAAE;AAC7D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACxC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;gBACrB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5B;iBAAM;AACL,gBAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACnE;YACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;SACR;QAED,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;KACxD;IAEO,UAAU,GAAA;;;;QAGhB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAC;AACzD,QAAA,MAAM,SAAS,GAAI,UAAkB,CAAC,YAAY,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,IAAI,iBAAiB,CAAC;AAE3D,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;SAC/B;AAAC,QAAA,OAAA,EAAA,EAAM;AACN,YAAA,OAAO,MAAM,CAAC;SACf;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC9B;IAED,IAAI,GAAA;;AAEF,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SAC5C;;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,IAAI,GAAA;;;AAEF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;;AAED,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAkB,KAAI,IAAI,CAAC,aAAa,EAAE;YACjE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;SAC3C;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC3D;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACxC,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;aAAM;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACtB,gBAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;aACtB;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;YACnC,OAAO;SACR;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,QAAQ,GAAA;AACN,QAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;KACjC;AAED,IAAA,eAAe,CAAC,IAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KACjE;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;KAC5D;AAED,IAAA,mBAAmB,CAAC,SAA2B,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,SAAS,EAAE,CAAC;QACnE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;KACpE;IAED,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC;KACpE;AAED,IAAA,WAAW,CAAC,OAAe,EAAA;QACzB,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAErD,QAAA,MAAM,WAAW,GAAG;YAClB,OAAO;AACP,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA;SAC1E,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;KACvC;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;KAC5B;AAED,IAAA,QAAQ,CAAC,KAAkC,EAAA;QACzC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KAC9D;IAED,IAAI,GAAA;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,KAAK,GAAA;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;KACnC;IAED,EAAE,CAAC,KAAa,EAAE,QAAkB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACpC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChD;IAED,GAAG,CAAC,KAAa,EAAE,QAAmB,EAAA;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,IAAI,QAAQ,EAAE;YACZ,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,gBAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC5B;SACF;aAAM;YACL,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACpC;KACF;IAED,IAAI,CAAC,KAAa,EAAE,IAAU,EAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC7B,gBAAA,IAAI;oBACF,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAChB;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,KAAK,CAAG,CAAA,CAAA,EAAE,KAAK,CAAC,CAAC;iBAC/D;AACH,aAAC,CAAC,CAAC;SACJ;KACF;IAED,QAAQ,GAAA;QACN,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;KACH;IAED,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC5B;AACF,CAAA;AAED;AACM,SAAU,oBAAoB,CAAC,OAAwB,EAAA;AAC3D,IAAA,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;AACpC,IAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,OAAO,MAAM,CAAC;AAChB;;ACvnCA;AAEA;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buni.ai/chatbot-core",
3
- "version": "1.0.24",
3
+ "version": "1.0.25",
4
4
  "description": "Core functionality for BuniAI chat widget adapters",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",