@buni.ai/chatbot-core 1.0.23 → 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 +71 -67
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +71 -67
- package/dist/index.js.map +1 -1
- package/dist/widget.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -316,12 +316,12 @@ class BuniChatWidget {
|
|
|
316
316
|
if (event.source === ((_j = this.chatIframe) === null || _j === void 0 ? void 0 : _j.contentWindow) &&
|
|
317
317
|
event.origin === this.getBaseUrl()) {
|
|
318
318
|
if (this.isMinimalModeEnabled()) {
|
|
319
|
-
if (!this.state.isOpen) {
|
|
320
|
-
void this.openChat();
|
|
321
|
-
}
|
|
322
319
|
this.postMessageToWidget("minimize");
|
|
320
|
+
this.applyMinimalContainerFrame();
|
|
323
321
|
this.displayMode = "minimal";
|
|
324
322
|
this.state.displayMode = "minimal";
|
|
323
|
+
this.state.isOpen = true;
|
|
324
|
+
this.state.isMinimized = false;
|
|
325
325
|
}
|
|
326
326
|
else {
|
|
327
327
|
this.closeChat();
|
|
@@ -474,56 +474,47 @@ class BuniChatWidget {
|
|
|
474
474
|
async openChatInMinimalMode() {
|
|
475
475
|
if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
|
|
476
476
|
return;
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
const
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
: isTablet
|
|
495
|
-
? "min(calc(100vw - 3rem), 370px)"
|
|
496
|
-
: widthValue;
|
|
497
|
-
const chatHeight = isMobile
|
|
498
|
-
? "100vh"
|
|
499
|
-
: isTablet
|
|
500
|
-
? "min(calc(100vh - 3rem), 620px)"
|
|
501
|
-
: heightValue;
|
|
502
|
-
// Size container to full chat dimensions initially (iframe needs space to render)
|
|
477
|
+
this.applyMinimalContainerFrame();
|
|
478
|
+
this.state.isMinimized = false;
|
|
479
|
+
this.state.isOpen = true;
|
|
480
|
+
this.displayMode = "minimal";
|
|
481
|
+
this.state.displayMode = "minimal";
|
|
482
|
+
// Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
|
|
483
|
+
this.postMessageToWidget("minimize");
|
|
484
|
+
this.emit("minimized", { timestamp: Date.now() });
|
|
485
|
+
}
|
|
486
|
+
applyMinimalContainerFrame() {
|
|
487
|
+
var _a;
|
|
488
|
+
if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
|
|
489
|
+
return;
|
|
490
|
+
const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
|
|
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";
|
|
503
494
|
this.widgetElement.style.cssText = `
|
|
504
495
|
position: fixed;
|
|
505
496
|
pointer-events: none;
|
|
506
497
|
z-index: 999999;
|
|
507
|
-
width:
|
|
508
|
-
|
|
509
|
-
|
|
498
|
+
width: min(calc(100vw - 1.5rem), 390px);
|
|
499
|
+
max-width: min(calc(100vw - 1.5rem), 390px);
|
|
500
|
+
height: ${initialMinimalHeight};
|
|
501
|
+
max-height: ${initialMinimalHeight};
|
|
510
502
|
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
511
|
-
${this.getPositionStyles(
|
|
503
|
+
${this.getPositionStyles(position, true)}
|
|
512
504
|
display: block;
|
|
513
|
-
overflow:
|
|
505
|
+
overflow: hidden;
|
|
506
|
+
border-radius: 16px;
|
|
507
|
+
box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);
|
|
514
508
|
box-sizing: border-box;
|
|
515
509
|
`;
|
|
516
|
-
// Hide trigger, show chat iframe
|
|
517
510
|
this.triggerIframe.style.display = "none";
|
|
518
511
|
this.chatIframe.style.display = "block";
|
|
519
512
|
this.chatIframe.style.visibility = "visible";
|
|
520
|
-
this.
|
|
521
|
-
this.
|
|
522
|
-
this.
|
|
523
|
-
this.
|
|
524
|
-
|
|
525
|
-
this.postMessageToWidget("minimize");
|
|
526
|
-
this.emit("minimized", { timestamp: Date.now() });
|
|
513
|
+
this.chatIframe.style.width = "100%";
|
|
514
|
+
this.chatIframe.style.height = initialMinimalHeight;
|
|
515
|
+
this.chatIframe.style.maxHeight = initialMinimalHeight;
|
|
516
|
+
this.chatIframe.style.borderRadius = "0";
|
|
517
|
+
this.chatIframe.style.boxShadow = "none";
|
|
527
518
|
}
|
|
528
519
|
async openChat() {
|
|
529
520
|
if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
|
|
@@ -574,6 +565,11 @@ class BuniChatWidget {
|
|
|
574
565
|
this.triggerIframe.style.display = "none";
|
|
575
566
|
this.chatIframe.style.display = "block";
|
|
576
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)";
|
|
577
573
|
this.state.isMinimized = false;
|
|
578
574
|
this.state.isOpen = true;
|
|
579
575
|
this.displayMode = "full";
|
|
@@ -660,7 +656,7 @@ class BuniChatWidget {
|
|
|
660
656
|
setupPostMessageAPI(iframe) {
|
|
661
657
|
// Listen for messages from the iframe
|
|
662
658
|
window.addEventListener("message", (event) => {
|
|
663
|
-
var _a
|
|
659
|
+
var _a;
|
|
664
660
|
if (event.source !== iframe.contentWindow) {
|
|
665
661
|
return;
|
|
666
662
|
}
|
|
@@ -702,45 +698,34 @@ class BuniChatWidget {
|
|
|
702
698
|
this.options.onNewMessage(data);
|
|
703
699
|
}
|
|
704
700
|
break;
|
|
705
|
-
case "minimized":
|
|
701
|
+
case "minimized": {
|
|
706
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
|
+
}
|
|
707
712
|
if (this.isMinimalModeEnabled()) {
|
|
708
713
|
this.displayMode = "minimal";
|
|
709
714
|
this.state.displayMode = "minimal";
|
|
710
715
|
this.state.isOpen = true;
|
|
711
716
|
this.state.isMinimized = false;
|
|
712
|
-
|
|
713
|
-
if (this.widgetElement && this.chatIframe && this.triggerIframe) {
|
|
714
|
-
const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
|
|
715
|
-
this.widgetElement.style.cssText = `
|
|
716
|
-
position: fixed;
|
|
717
|
-
pointer-events: none;
|
|
718
|
-
z-index: 999999;
|
|
719
|
-
width: min(calc(100vw - 1.5rem), 390px);
|
|
720
|
-
max-width: min(calc(100vw - 1.5rem), 390px);
|
|
721
|
-
height: auto;
|
|
722
|
-
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
723
|
-
${this.getPositionStyles(position, true)}
|
|
724
|
-
display: block;
|
|
725
|
-
overflow: visible;
|
|
726
|
-
box-sizing: border-box;
|
|
727
|
-
`;
|
|
728
|
-
this.triggerIframe.style.display = "none";
|
|
729
|
-
this.chatIframe.style.display = "block";
|
|
730
|
-
this.chatIframe.style.visibility = "visible";
|
|
731
|
-
this.chatIframe.style.width = "100%";
|
|
732
|
-
this.chatIframe.style.height = "min(calc(100vh - 1.5rem), 520px)";
|
|
733
|
-
}
|
|
717
|
+
this.applyMinimalContainerFrame();
|
|
734
718
|
}
|
|
735
719
|
else {
|
|
736
720
|
// Backward-compatible behavior.
|
|
737
721
|
this.closeChat();
|
|
738
722
|
}
|
|
739
723
|
break;
|
|
724
|
+
}
|
|
740
725
|
case "new_unread_message":
|
|
741
726
|
// Update unread count in trigger
|
|
742
727
|
this.state.unreadCount++;
|
|
743
|
-
if ((
|
|
728
|
+
if ((_a = this.triggerIframe) === null || _a === void 0 ? void 0 : _a.contentWindow) {
|
|
744
729
|
this.triggerIframe.contentWindow.postMessage({ type: "updateUnreadCount", count: this.state.unreadCount }, window.location.origin);
|
|
745
730
|
}
|
|
746
731
|
break;
|
|
@@ -758,6 +743,25 @@ class BuniChatWidget {
|
|
|
758
743
|
this.options.onError(data.error);
|
|
759
744
|
}
|
|
760
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;
|
|
761
765
|
}
|
|
762
766
|
});
|
|
763
767
|
}
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Default BuniAI platform URL\nconst BUNI_PLATFORM_URL = \"https://www.buni.ai\";\n\nconst PARENT_HANDSHAKE_TYPE = \"buni:parent_handshake\";\nconst IFRAME_HANDSHAKE_ACK_TYPE = \"buni:iframe_handshake_ack\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private readonly state: BuniChatState;\n private readonly eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private triggerIframe: HTMLIFrameElement | null;\n private chatIframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n private chatTargetOrigin: string | null;\n private handshakeComplete: boolean;\n private outboundMessageQueue: Array<{ type: string; data?: any }>;\n private displayMode: \"full\" | \"minimal\" | \"hidden\";\n private readonly serverBehavior: {\n enableMinimalMode?: boolean;\n defaultMode?: \"full\" | \"minimal\" | \"hidden\";\n };\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.triggerIframe = null;\n this.chatIframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n this.chatTargetOrigin = null;\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n this.displayMode = \"hidden\";\n this.serverBehavior = {};\n }\n\n private isMinimalModeEnabled(): boolean {\n if (typeof this.options?.config?.enableMinimalMode === \"boolean\") {\n return this.options.config.enableMinimalMode;\n }\n\n return Boolean(this.serverBehavior.enableMinimalMode);\n }\n\n private syncServerBehaviorFromData(data: any): void {\n if (!data || typeof data !== \"object\") {\n return;\n }\n\n const behaviorCandidate =\n data.behavior && typeof data.behavior === \"object\"\n ? data.behavior\n : data;\n\n if (typeof behaviorCandidate.enableMinimalMode === \"boolean\") {\n this.serverBehavior.enableMinimalMode = behaviorCandidate.enableMinimalMode;\n }\n\n if (\n behaviorCandidate.defaultMode === \"full\" ||\n behaviorCandidate.defaultMode === \"minimal\" ||\n behaviorCandidate.defaultMode === \"hidden\"\n ) {\n this.serverBehavior.defaultMode = behaviorCandidate.defaultMode;\n }\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\",\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string,\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Configuration\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n const primaryColor = config.primaryColor || \"#795548\";\n const triggerText = config.triggerText || \"\";\n const companyName = config.companyName || \"Chat Support\";\n\n // Responsive breakpoints\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n // Calculate trigger dimensions\n const triggerWidth = showTriggerText && hasTriggerText ? \"auto\" : \"52px\";\n const triggerHeight = \"52px\";\n const triggerMinWidth = showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n // Container starts as trigger size, initially hidden until connection is ready\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${triggerWidth};\n height: ${triggerHeight};\n ${triggerMinWidth ? `min-width: ${triggerMinWidth};` : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", true)}\n display: none;\n overflow: hidden;\n box-sizing: border-box;\n `;\n\n // Create inline trigger iframe (no src)\n const triggerIframe = document.createElement(\"iframe\");\n triggerIframe.id = \"buni-trigger-iframe\";\n triggerIframe.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n border: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: ${showTriggerText && hasTriggerText ? \"26px\" : \"50%\"};\n transition: border-radius 0.3s ease, box-shadow 0.3s ease;\n pointer-events: auto;\n `;\n triggerIframe.setAttribute(\"title\", \"BuniAI Chat Trigger\");\n\n // Inject trigger HTML content directly (no src)\n container.appendChild(triggerIframe);\n document.body.appendChild(container);\n\n triggerIframe.onload = () => {\n const triggerDoc =\n triggerIframe.contentDocument ||\n triggerIframe.contentWindow?.document;\n if (!triggerDoc) {\n reject(new Error(\"Failed to access trigger iframe document\"));\n return;\n }\n\n // Build inline HTML for trigger\n const triggerHTML = this.buildTriggerHTML(\n primaryColor,\n triggerText || companyName,\n showTriggerText && hasTriggerText,\n config.customAvatar,\n config.avatarType,\n config.avatarText,\n );\n\n triggerDoc.open();\n triggerDoc.write(triggerHTML);\n triggerDoc.close();\n\n // Create chat iframe (initially hidden)\n const chatIframe = document.createElement(\"iframe\");\n chatIframe.id = \"buni-chat-iframe\";\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\",\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add all configuration parameters\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor)\n params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar)\n params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius)\n params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options\n if (config.showBranding !== undefined)\n params.set(\"showBranding\", String(config.showBranding));\n if (config.autoOpen !== undefined)\n params.set(\"autoOpen\", String(config.autoOpen));\n if (config.allowMinimize !== undefined)\n params.set(\"allowMinimize\", String(config.allowMinimize));\n if (config.showMinimize !== undefined)\n params.set(\"showMinimize\", String(config.showMinimize));\n if (config.allowClose !== undefined)\n params.set(\"allowClose\", String(config.allowClose));\n if (config.enableFileUpload !== undefined)\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n if (config.showTimestamps !== undefined)\n params.set(\"showTimestamps\", String(config.showTimestamps));\n if (config.enableMobile !== undefined)\n params.set(\"enableMobile\", String(config.enableMobile));\n if (config.showPreChatForm !== undefined)\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n if (config.showStartButton !== undefined)\n params.set(\"showStartButton\", String(config.showStartButton));\n if (config.startButtonText)\n params.set(\"startButtonText\", config.startButtonText);\n if (config.preChatFormFields)\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields),\n );\n if (config.enableMinimalMode !== undefined) {\n params.set(\"enableMinimalMode\", String(config.enableMinimalMode));\n }\n if (config.defaultMode) {\n params.set(\"defaultMode\", config.defaultMode);\n }\n if (config.autoMessages && Array.isArray(config.autoMessages)) {\n params.set(\"autoMessages\", JSON.stringify(config.autoMessages));\n }\n\n chatIframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Chat iframe styling - initially hidden\n chatIframe.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n border: none;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: ${isMobile ? \"0\" : \"16px\"};\n transition: border-radius 0.3s ease, box-shadow 0.3s ease;\n pointer-events: auto;\n box-shadow: ${isMobile ? \"none\" : \"0 8px 32px rgba(0,0,0,0.15)\"};\n display: none;\n `;\n chatIframe.setAttribute(\"allow\", \"clipboard-write\");\n chatIframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n container.appendChild(chatIframe);\n\n // Wait for chat iframe to load before resolving\n chatIframe.onload = () => {\n // Set visibility hidden after iframe loads to allow content initialization\n chatIframe.style.visibility = \"hidden\";\n\n // Compute the iframe origin once we know the final src.\n try {\n this.chatTargetOrigin = new URL(chatIframe.src).origin;\n } catch {\n this.chatTargetOrigin = this.getBaseUrl();\n }\n\n // Reset handshake state for this iframe instance.\n this.handshakeComplete = false;\n this.outboundMessageQueue = [];\n\n this.setupPostMessageAPI(chatIframe);\n this.sendParentHandshake();\n \n // Now that both iframes are loaded, resolve the promise\n this.widgetElement = container;\n this.triggerIframe = triggerIframe;\n this.chatIframe = chatIframe;\n this.state.isMinimized = true;\n this.state.displayMode = \"hidden\";\n this.displayMode = \"hidden\";\n this.state.isLoaded = true;\n resolve();\n };\n };\n\n // Listen for trigger and connection events\n window.addEventListener(\"message\", (event) => {\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n if (typeof payload.type !== \"string\") return;\n\n switch (payload.type) {\n case \"connection_ready\":\n // Check if message is from chat iframe\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.syncServerBehaviorFromData(payload.data);\n\n const effectiveDefaultMode =\n this.options.config?.defaultMode ??\n this.serverBehavior.defaultMode ??\n \"full\";\n const effectiveMinimalEnabled = this.isMinimalModeEnabled();\n\n if (effectiveMinimalEnabled && effectiveDefaultMode === \"minimal\") {\n // Auto-open in minimal card mode\n void this.openChatInMinimalMode();\n } else if (this.options.config?.autoOpen) {\n void this.openChat();\n } else if (container && !config.hideDefaultTrigger) {\n // Show the trigger button\n container.style.display = \"block\";\n }\n\n // Emit connection_ready event for consumers\n this.emit(\"connection_ready\", {\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n if (\n this.options.onConnectionReady &&\n typeof this.options.onConnectionReady === \"function\"\n ) {\n this.options.onConnectionReady({\n timestamp: Date.now(),\n behavior: payload.data?.behavior,\n });\n }\n }\n break;\n\n case \"chatbot:close\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n break;\n\n case \"chatbot:minimize\":\n if (\n event.source === this.chatIframe?.contentWindow &&\n event.origin === this.getBaseUrl()\n ) {\n if (this.isMinimalModeEnabled()) {\n if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\n });\n }\n\n private buildTriggerHTML(\n primaryColor: string,\n text: string,\n showText: boolean,\n customAvatar?: string,\n avatarType?: string,\n avatarText?: string,\n ): string {\n const avatarContent = customAvatar\n ? `<img src=\"${customAvatar}\" alt=\"Avatar\" style=\"width: 32px; height: 32px; border-radius: 50%;\" />`\n : avatarType === \"text\" && avatarText\n ? `<div style=\"width: 32px; height: 32px; border-radius: 50%; background: rgba(255,255,255,0.3); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; color: white;\">${avatarText.substring(0, 2).toUpperCase()}</div>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1 0-.9-2-2zm0 14H6l-2 2V4h16v12z\"/></svg>`;\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n overflow: hidden;\n }\n .trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${showText ? \"12px\" : \"0\"};\n padding: ${showText ? \"10px 20px\" : \"10px\"};\n background: ${primaryColor};\n color: white;\n border-radius: ${showText ? \"26px\" : \"50%\"};\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n animation: pulse 2s infinite;\n ${showText ? \"\" : \"width: 52px; height: 52px;\"}\n }\n .trigger:hover {\n transform: translateY(-2px);\n filter: brightness(1.1);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n .trigger:active {\n transform: translateY(0);\n }\n .avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n .text {\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n }\n .badge {\n position: absolute;\n top: -4px;\n right: -4px;\n background: #f44336;\n color: white;\n border-radius: 10px;\n padding: 2px 6px;\n font-size: 11px;\n font-weight: 600;\n min-width: 18px;\n text-align: center;\n display: none;\n animation: pulse 2s infinite;\n }\n .badge.show {\n display: block;\n }\n @keyframes pulse {\n 0%, 100% {\n transform: scale(1);\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n }\n 50% {\n transform: scale(1.02);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n }\n </style>\n</head>\n<body>\n <div style=\"position: relative;\">\n <div class=\"trigger\" onclick=\"handleClick()\">\n <div class=\"avatar\">${avatarContent}</div>\n ${showText ? `<span class=\"text\">${text}</span>` : \"\"}\n </div>\n <div class=\"badge\" id=\"badge\">0</div>\n </div>\n <script>\n function handleClick() {\n // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\n if (event.data.type === 'updateUnreadCount') {\n const badge = document.getElementById('badge');\n const count = event.data.count || 0;\n badge.textContent = count;\n if (count > 0) {\n badge.classList.add('show');\n } else {\n badge.classList.remove('show');\n }\n }\n });\n </script>\n</body>\n</html>`;\n }\n\n private async openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n\n const config = this.options.config || {};\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string,\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n const chatWidth = isMobile\n ? \"100vw\"\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\"\n : widthValue;\n\n const chatHeight = isMobile\n ? \"100vh\"\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\"\n : heightValue;\n\n // Size container to full chat dimensions initially (iframe needs space to render)\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${chatWidth};\n height: ${chatHeight};\n ${isMobile ? \"max-width: 100vw; max-height: 100vh;\" : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", false)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n // Hide trigger, show chat iframe\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\n\n const config = this.options.config || {};\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string,\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Calculate chat dimensions\n const chatWidth = isMobile\n ? \"100vw\"\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\"\n : widthValue;\n\n const chatHeight = isMobile\n ? \"100vh\"\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\"\n : heightValue;\n\n // Resize container for chat\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${chatWidth};\n height: ${chatHeight};\n ${isMobile ? \"max-width: 100vw; max-height: 100vh;\" : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", false)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n // Hide trigger, show chat\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n private closeChat(): void {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n\n const config = this.options.config || {};\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Hide chat iframe\n this.chatIframe.style.display = \"none\";\n this.chatIframe.style.visibility = \"hidden\";\n\n // Resize container back to trigger size\n const triggerWidth = showTriggerText && hasTriggerText ? \"auto\" : \"52px\";\n const triggerHeight = \"52px\";\n const triggerMinWidth = showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${triggerWidth};\n height: ${triggerHeight};\n ${triggerMinWidth ? `min-width: ${triggerMinWidth};` : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", true)}\n display: block;\n overflow: hidden;\n box-sizing: border-box;\n `;\n\n // Show trigger again\n this.triggerIframe.style.display = \"block\";\n\n this.state.isMinimized = true;\n this.state.isOpen = false;\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private getPositionStyles(\n position: string,\n isMinimized: boolean = false,\n ): string {\n // Responsive positioning following mobile-first best practices\n const viewportWidth = window.innerWidth;\n const isExtraSmall = viewportWidth <= 375;\n const isMobile = viewportWidth <= 768;\n const isTablet = viewportWidth > 768 && viewportWidth <= 1024;\n\n // For extra small devices (Galaxy S8+, iPhone SE, etc.), use minimal or no margins\n // For mobile, use small margins for breathing room\n // For tablet/desktop, use larger margins for floating appearance\n let margin: string;\n\n if (isMinimized) {\n // Minimized button always needs some space from edges\n margin = isMobile ? \"12px\" : \"20px\";\n } else if (isMobile) {\n // Full screen on all mobile devices (no margins)\n margin = \"0\";\n } else if (isTablet) {\n // Medium margins on tablets\n margin = \"16px\";\n } else {\n // Larger margins on desktop for floating effect\n margin = \"24px\";\n }\n\n // On mobile screens when not minimized, position at edges for full coverage\n if (isMobile && !isMinimized) {\n return `top: 0; left: 0; right: 0; bottom: 0;`;\n }\n\n // Standard positioning for larger screens or minimized state\n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n // Apply a full minimal-mode frame update to avoid stale full-mode sizing/position.\n if (this.widgetElement && this.chatIframe && this.triggerIframe) {\n const position =\n 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 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 }\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
|
@@ -320,12 +320,12 @@ class BuniChatWidget {
|
|
|
320
320
|
if (event.source === ((_j = this.chatIframe) === null || _j === void 0 ? void 0 : _j.contentWindow) &&
|
|
321
321
|
event.origin === this.getBaseUrl()) {
|
|
322
322
|
if (this.isMinimalModeEnabled()) {
|
|
323
|
-
if (!this.state.isOpen) {
|
|
324
|
-
void this.openChat();
|
|
325
|
-
}
|
|
326
323
|
this.postMessageToWidget("minimize");
|
|
324
|
+
this.applyMinimalContainerFrame();
|
|
327
325
|
this.displayMode = "minimal";
|
|
328
326
|
this.state.displayMode = "minimal";
|
|
327
|
+
this.state.isOpen = true;
|
|
328
|
+
this.state.isMinimized = false;
|
|
329
329
|
}
|
|
330
330
|
else {
|
|
331
331
|
this.closeChat();
|
|
@@ -478,56 +478,47 @@ class BuniChatWidget {
|
|
|
478
478
|
async openChatInMinimalMode() {
|
|
479
479
|
if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
|
|
480
480
|
return;
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
const
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
: isTablet
|
|
499
|
-
? "min(calc(100vw - 3rem), 370px)"
|
|
500
|
-
: widthValue;
|
|
501
|
-
const chatHeight = isMobile
|
|
502
|
-
? "100vh"
|
|
503
|
-
: isTablet
|
|
504
|
-
? "min(calc(100vh - 3rem), 620px)"
|
|
505
|
-
: heightValue;
|
|
506
|
-
// Size container to full chat dimensions initially (iframe needs space to render)
|
|
481
|
+
this.applyMinimalContainerFrame();
|
|
482
|
+
this.state.isMinimized = false;
|
|
483
|
+
this.state.isOpen = true;
|
|
484
|
+
this.displayMode = "minimal";
|
|
485
|
+
this.state.displayMode = "minimal";
|
|
486
|
+
// Ask the iframe to enter minimal mode; it will reply with "minimized" when ready
|
|
487
|
+
this.postMessageToWidget("minimize");
|
|
488
|
+
this.emit("minimized", { timestamp: Date.now() });
|
|
489
|
+
}
|
|
490
|
+
applyMinimalContainerFrame() {
|
|
491
|
+
var _a;
|
|
492
|
+
if (!this.widgetElement || !this.chatIframe || !this.triggerIframe)
|
|
493
|
+
return;
|
|
494
|
+
const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
|
|
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";
|
|
507
498
|
this.widgetElement.style.cssText = `
|
|
508
499
|
position: fixed;
|
|
509
500
|
pointer-events: none;
|
|
510
501
|
z-index: 999999;
|
|
511
|
-
width:
|
|
512
|
-
|
|
513
|
-
|
|
502
|
+
width: min(calc(100vw - 1.5rem), 390px);
|
|
503
|
+
max-width: min(calc(100vw - 1.5rem), 390px);
|
|
504
|
+
height: ${initialMinimalHeight};
|
|
505
|
+
max-height: ${initialMinimalHeight};
|
|
514
506
|
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
515
|
-
${this.getPositionStyles(
|
|
507
|
+
${this.getPositionStyles(position, true)}
|
|
516
508
|
display: block;
|
|
517
|
-
overflow:
|
|
509
|
+
overflow: hidden;
|
|
510
|
+
border-radius: 16px;
|
|
511
|
+
box-shadow: 0 18px 40px -24px rgba(15, 23, 42, 0.45);
|
|
518
512
|
box-sizing: border-box;
|
|
519
513
|
`;
|
|
520
|
-
// Hide trigger, show chat iframe
|
|
521
514
|
this.triggerIframe.style.display = "none";
|
|
522
515
|
this.chatIframe.style.display = "block";
|
|
523
516
|
this.chatIframe.style.visibility = "visible";
|
|
524
|
-
this.
|
|
525
|
-
this.
|
|
526
|
-
this.
|
|
527
|
-
this.
|
|
528
|
-
|
|
529
|
-
this.postMessageToWidget("minimize");
|
|
530
|
-
this.emit("minimized", { timestamp: Date.now() });
|
|
517
|
+
this.chatIframe.style.width = "100%";
|
|
518
|
+
this.chatIframe.style.height = initialMinimalHeight;
|
|
519
|
+
this.chatIframe.style.maxHeight = initialMinimalHeight;
|
|
520
|
+
this.chatIframe.style.borderRadius = "0";
|
|
521
|
+
this.chatIframe.style.boxShadow = "none";
|
|
531
522
|
}
|
|
532
523
|
async openChat() {
|
|
533
524
|
if (!this.chatIframe || !this.widgetElement || !this.triggerIframe)
|
|
@@ -578,6 +569,11 @@ class BuniChatWidget {
|
|
|
578
569
|
this.triggerIframe.style.display = "none";
|
|
579
570
|
this.chatIframe.style.display = "block";
|
|
580
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)";
|
|
581
577
|
this.state.isMinimized = false;
|
|
582
578
|
this.state.isOpen = true;
|
|
583
579
|
this.displayMode = "full";
|
|
@@ -664,7 +660,7 @@ class BuniChatWidget {
|
|
|
664
660
|
setupPostMessageAPI(iframe) {
|
|
665
661
|
// Listen for messages from the iframe
|
|
666
662
|
window.addEventListener("message", (event) => {
|
|
667
|
-
var _a
|
|
663
|
+
var _a;
|
|
668
664
|
if (event.source !== iframe.contentWindow) {
|
|
669
665
|
return;
|
|
670
666
|
}
|
|
@@ -706,45 +702,34 @@ class BuniChatWidget {
|
|
|
706
702
|
this.options.onNewMessage(data);
|
|
707
703
|
}
|
|
708
704
|
break;
|
|
709
|
-
case "minimized":
|
|
705
|
+
case "minimized": {
|
|
710
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
|
+
}
|
|
711
716
|
if (this.isMinimalModeEnabled()) {
|
|
712
717
|
this.displayMode = "minimal";
|
|
713
718
|
this.state.displayMode = "minimal";
|
|
714
719
|
this.state.isOpen = true;
|
|
715
720
|
this.state.isMinimized = false;
|
|
716
|
-
|
|
717
|
-
if (this.widgetElement && this.chatIframe && this.triggerIframe) {
|
|
718
|
-
const position = ((_a = this.options.config) === null || _a === void 0 ? void 0 : _a.position) || "bottom-right";
|
|
719
|
-
this.widgetElement.style.cssText = `
|
|
720
|
-
position: fixed;
|
|
721
|
-
pointer-events: none;
|
|
722
|
-
z-index: 999999;
|
|
723
|
-
width: min(calc(100vw - 1.5rem), 390px);
|
|
724
|
-
max-width: min(calc(100vw - 1.5rem), 390px);
|
|
725
|
-
height: auto;
|
|
726
|
-
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
727
|
-
${this.getPositionStyles(position, true)}
|
|
728
|
-
display: block;
|
|
729
|
-
overflow: visible;
|
|
730
|
-
box-sizing: border-box;
|
|
731
|
-
`;
|
|
732
|
-
this.triggerIframe.style.display = "none";
|
|
733
|
-
this.chatIframe.style.display = "block";
|
|
734
|
-
this.chatIframe.style.visibility = "visible";
|
|
735
|
-
this.chatIframe.style.width = "100%";
|
|
736
|
-
this.chatIframe.style.height = "min(calc(100vh - 1.5rem), 520px)";
|
|
737
|
-
}
|
|
721
|
+
this.applyMinimalContainerFrame();
|
|
738
722
|
}
|
|
739
723
|
else {
|
|
740
724
|
// Backward-compatible behavior.
|
|
741
725
|
this.closeChat();
|
|
742
726
|
}
|
|
743
727
|
break;
|
|
728
|
+
}
|
|
744
729
|
case "new_unread_message":
|
|
745
730
|
// Update unread count in trigger
|
|
746
731
|
this.state.unreadCount++;
|
|
747
|
-
if ((
|
|
732
|
+
if ((_a = this.triggerIframe) === null || _a === void 0 ? void 0 : _a.contentWindow) {
|
|
748
733
|
this.triggerIframe.contentWindow.postMessage({ type: "updateUnreadCount", count: this.state.unreadCount }, window.location.origin);
|
|
749
734
|
}
|
|
750
735
|
break;
|
|
@@ -762,6 +747,25 @@ class BuniChatWidget {
|
|
|
762
747
|
this.options.onError(data.error);
|
|
763
748
|
}
|
|
764
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;
|
|
765
769
|
}
|
|
766
770
|
});
|
|
767
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 if (!this.state.isOpen) {\n void this.openChat();\n }\n this.postMessageToWidget(\"minimize\");\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n } else {\n this.closeChat();\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n }\n }\n break;\n\n case \"trigger_clicked\":\n if (\n event.source === this.triggerIframe?.contentWindow &&\n event.origin === window.location.origin\n ) {\n this.openChat();\n }\n break;\n }\n });\n // Trigger the load event\n // if by 10 seconds the ready message is not received, we want to manually, set the container to visible\n setTimeout(() => {\n if (\n container &&\n !config.hideDefaultTrigger &&\n container.style.display === \"none\" &&\n this.state.isOpen === false\n ) {\n container.style.display = \"block\";\n }\n }, 10000);\n triggerIframe.src = \"about:blank\";\n });\n }\n\n private buildTriggerHTML(\n primaryColor: string,\n text: string,\n showText: boolean,\n customAvatar?: string,\n avatarType?: string,\n avatarText?: string,\n ): string {\n const avatarContent = customAvatar\n ? `<img src=\"${customAvatar}\" alt=\"Avatar\" style=\"width: 32px; height: 32px; border-radius: 50%;\" />`\n : avatarType === \"text\" && avatarText\n ? `<div style=\"width: 32px; height: 32px; border-radius: 50%; background: rgba(255,255,255,0.3); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; color: white;\">${avatarText.substring(0, 2).toUpperCase()}</div>`\n : `<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"white\"><path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1 0-.9-2-2zm0 14H6l-2 2V4h16v12z\"/></svg>`;\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n overflow: hidden;\n }\n .trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${showText ? \"12px\" : \"0\"};\n padding: ${showText ? \"10px 20px\" : \"10px\"};\n background: ${primaryColor};\n color: white;\n border-radius: ${showText ? \"26px\" : \"50%\"};\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n animation: pulse 2s infinite;\n ${showText ? \"\" : \"width: 52px; height: 52px;\"}\n }\n .trigger:hover {\n transform: translateY(-2px);\n filter: brightness(1.1);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n .trigger:active {\n transform: translateY(0);\n }\n .avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n .text {\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n }\n .badge {\n position: absolute;\n top: -4px;\n right: -4px;\n background: #f44336;\n color: white;\n border-radius: 10px;\n padding: 2px 6px;\n font-size: 11px;\n font-weight: 600;\n min-width: 18px;\n text-align: center;\n display: none;\n animation: pulse 2s infinite;\n }\n .badge.show {\n display: block;\n }\n @keyframes pulse {\n 0%, 100% {\n transform: scale(1);\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n }\n 50% {\n transform: scale(1.02);\n box-shadow: 0 6px 24px ${primaryColor}99;\n }\n }\n </style>\n</head>\n<body>\n <div style=\"position: relative;\">\n <div class=\"trigger\" onclick=\"handleClick()\">\n <div class=\"avatar\">${avatarContent}</div>\n ${showText ? `<span class=\"text\">${text}</span>` : \"\"}\n </div>\n <div class=\"badge\" id=\"badge\">0</div>\n </div>\n <script>\n function handleClick() {\n // Trigger iframe is same-origin with parent (about:blank + document.write),\n // so we can safely target the parent's origin.\n window.parent.postMessage({ type: 'trigger_clicked' }, window.location.origin);\n }\n \n // Listen for unread count updates\n window.addEventListener('message', function(event) {\n if (event.source !== window.parent) return;\n if (event.origin !== window.location.origin) return;\n if (event.data.type === 'updateUnreadCount') {\n const badge = document.getElementById('badge');\n const count = event.data.count || 0;\n badge.textContent = count;\n if (count > 0) {\n badge.classList.add('show');\n } else {\n badge.classList.remove('show');\n }\n }\n });\n </script>\n</body>\n</html>`;\n }\n\n private async openChatInMinimalMode(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n\n const config = this.options.config || {};\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string,\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n const chatWidth = isMobile\n ? \"100vw\"\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\"\n : widthValue;\n\n const chatHeight = isMobile\n ? \"100vh\"\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\"\n : heightValue;\n\n // Size container to full chat dimensions initially (iframe needs space to render)\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${chatWidth};\n height: ${chatHeight};\n ${isMobile ? \"max-width: 100vw; max-height: 100vh;\" : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", false)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n // Hide trigger, show chat iframe\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n\n // Ask the iframe to enter minimal mode; it will reply with \"minimized\" when ready\n this.postMessageToWidget(\"minimize\");\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private async openChat(): Promise<void> {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n if (this.state.isOpen && this.displayMode !== \"minimal\") return; // Already open in full mode\n\n const config = this.options.config || {};\n const isMobile = window.innerWidth <= 768;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string,\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Calculate chat dimensions\n const chatWidth = isMobile\n ? \"100vw\"\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\"\n : widthValue;\n\n const chatHeight = isMobile\n ? \"100vh\"\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\"\n : heightValue;\n\n // Resize container for chat\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${chatWidth};\n height: ${chatHeight};\n ${isMobile ? \"max-width: 100vw; max-height: 100vh;\" : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", false)}\n display: block;\n overflow: visible;\n box-sizing: border-box;\n `;\n\n // Hide trigger, show chat\n this.triggerIframe.style.display = \"none\";\n this.chatIframe.style.display = \"block\";\n this.chatIframe.style.visibility = \"visible\";\n\n this.state.isMinimized = false;\n this.state.isOpen = true;\n this.displayMode = \"full\";\n this.state.displayMode = \"full\";\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n private closeChat(): void {\n if (!this.chatIframe || !this.widgetElement || !this.triggerIframe) return;\n\n const config = this.options.config || {};\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Hide chat iframe\n this.chatIframe.style.display = \"none\";\n this.chatIframe.style.visibility = \"hidden\";\n\n // Resize container back to trigger size\n const triggerWidth = showTriggerText && hasTriggerText ? \"auto\" : \"52px\";\n const triggerHeight = \"52px\";\n const triggerMinWidth = showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n this.widgetElement.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${triggerWidth};\n height: ${triggerHeight};\n ${triggerMinWidth ? `min-width: ${triggerMinWidth};` : \"\"}\n transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\", true)}\n display: block;\n overflow: hidden;\n box-sizing: border-box;\n `;\n\n // Show trigger again\n this.triggerIframe.style.display = \"block\";\n\n this.state.isMinimized = true;\n this.state.isOpen = false;\n this.displayMode = \"hidden\";\n this.state.displayMode = \"hidden\";\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n private getPositionStyles(\n position: string,\n isMinimized: boolean = false,\n ): string {\n // Responsive positioning following mobile-first best practices\n const viewportWidth = window.innerWidth;\n const isExtraSmall = viewportWidth <= 375;\n const isMobile = viewportWidth <= 768;\n const isTablet = viewportWidth > 768 && viewportWidth <= 1024;\n\n // For extra small devices (Galaxy S8+, iPhone SE, etc.), use minimal or no margins\n // For mobile, use small margins for breathing room\n // For tablet/desktop, use larger margins for floating appearance\n let margin: string;\n\n if (isMinimized) {\n // Minimized button always needs some space from edges\n margin = isMobile ? \"12px\" : \"20px\";\n } else if (isMobile) {\n // Full screen on all mobile devices (no margins)\n margin = \"0\";\n } else if (isTablet) {\n // Medium margins on tablets\n margin = \"16px\";\n } else {\n // Larger margins on desktop for floating effect\n margin = \"24px\";\n }\n\n // On mobile screens when not minimized, position at edges for full coverage\n if (isMobile && !isMinimized) {\n return `top: 0; left: 0; right: 0; bottom: 0;`;\n }\n\n // Standard positioning for larger screens or minimized state\n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n if (event.source !== iframe.contentWindow) {\n return;\n }\n\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const payload = event.data;\n if (!payload || typeof payload !== \"object\") return;\n const { type, data } = payload;\n if (typeof type !== \"string\") return;\n\n switch (type) {\n case IFRAME_HANDSHAKE_ACK_TYPE:\n this.handshakeComplete = true;\n this.flushOutboundMessageQueue();\n break;\n\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.syncServerBehaviorFromData(data);\n if (this.isMinimalModeEnabled()) {\n this.displayMode = \"minimal\";\n this.state.displayMode = \"minimal\";\n this.state.isOpen = true;\n this.state.isMinimized = false;\n // Apply a full minimal-mode frame update to avoid stale full-mode sizing/position.\n if (this.widgetElement && this.chatIframe && this.triggerIframe) {\n const position =\n 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 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 }\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":";;;;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,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACtB,oCAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;iCACtB;AACD,gCAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrC,gCAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,gCAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;6BACpC;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;QAE3E,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;QAExD,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;AAE7C,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;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;AAE7C,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;AAER,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACtC,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;;AAE/B,wBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE;AAC/D,4BAAA,MAAM,QAAQ,GACZ,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;AAElD,4BAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;;AAQ/B,gBAAA,EAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;;;;eAIzC,CAAC;4BAEF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;4BAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;4BACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;4BAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;4BACrC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,kCAAkC,CAAC;yBACnE;qBACF;yBAAM;;wBAEL,IAAI,CAAC,SAAS,EAAE,CAAC;qBAClB;oBACD,MAAM;AAER,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;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;;ACrnCA;AAEA;;;;;;"}
|
|
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":"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"}
|
package/dist/widget.d.ts
CHANGED