@buni.ai/chatbot-core 1.0.11 → 1.0.12
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 +95 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +95 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -59,23 +59,34 @@ class BuniChatWidget {
|
|
|
59
59
|
const shouldStartMinimized = config.initialMinimized === true;
|
|
60
60
|
const showTriggerText = config.showTriggerText !== false;
|
|
61
61
|
const hasTriggerText = !!config.triggerText;
|
|
62
|
-
//
|
|
62
|
+
// Responsive breakpoints following mobile-first best practices
|
|
63
63
|
const isMobile = window.innerWidth <= 768;
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
const isExtraSmall = window.innerWidth <= 375;
|
|
65
|
+
const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;
|
|
66
|
+
// Calculate initial dimensions based on minimized state with responsive scaling
|
|
67
|
+
// Mobile-first approach: Full viewport on mobile, constrained on desktop
|
|
66
68
|
const initialWidth = shouldStartMinimized
|
|
67
69
|
? showTriggerText && hasTriggerText
|
|
68
70
|
? "auto"
|
|
69
71
|
: "52px"
|
|
70
|
-
:
|
|
71
|
-
? "
|
|
72
|
-
:
|
|
72
|
+
: isExtraSmall
|
|
73
|
+
? "100vw" // Full width on very small devices
|
|
74
|
+
: isMobile
|
|
75
|
+
? "min(100vw, 370px)" // Constrained width on mobile
|
|
76
|
+
: isTablet
|
|
77
|
+
? "min(calc(100vw - 3rem), 370px)" // Slightly smaller on tablets
|
|
78
|
+
: widthValue; // Custom width on desktop
|
|
73
79
|
const initialHeight = shouldStartMinimized
|
|
74
80
|
? "52px"
|
|
75
|
-
:
|
|
76
|
-
? "
|
|
77
|
-
:
|
|
81
|
+
: isExtraSmall
|
|
82
|
+
? "100vh" // Full height on very small devices
|
|
83
|
+
: isMobile
|
|
84
|
+
? "min(100vh, 600px)" // Constrained height on mobile
|
|
85
|
+
: isTablet
|
|
86
|
+
? "min(calc(100vh - 3rem), 620px)" // Slightly smaller on tablets
|
|
87
|
+
: heightValue; // Custom height on desktop
|
|
78
88
|
const initialMinWidth = shouldStartMinimized && showTriggerText && hasTriggerText ? "auto" : "";
|
|
89
|
+
// Use CSS custom properties for dynamic styling
|
|
79
90
|
container.style.cssText = `
|
|
80
91
|
position: fixed;
|
|
81
92
|
pointer-events: none;
|
|
@@ -83,11 +94,12 @@ class BuniChatWidget {
|
|
|
83
94
|
width: ${initialWidth};
|
|
84
95
|
height: ${initialHeight};
|
|
85
96
|
${initialMinWidth ? `min-width: ${initialMinWidth};` : ""}
|
|
86
|
-
${isMobile ? "max-width:
|
|
87
|
-
transition:
|
|
88
|
-
${this.getPositionStyles(config.position || "bottom-right")}
|
|
97
|
+
${isMobile && !shouldStartMinimized ? "max-width: 100vw; max-height: 100vh;" : ""}
|
|
98
|
+
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
99
|
+
${this.getPositionStyles(config.position || "bottom-right", shouldStartMinimized)}
|
|
89
100
|
display: ${config.hideDefaultTrigger ? "none" : "block"};
|
|
90
101
|
overflow: ${shouldStartMinimized ? "hidden" : "visible"};
|
|
102
|
+
box-sizing: border-box;
|
|
91
103
|
`;
|
|
92
104
|
// Create iframe for secure embedding
|
|
93
105
|
const iframe = document.createElement("iframe");
|
|
@@ -176,19 +188,40 @@ class BuniChatWidget {
|
|
|
176
188
|
params.set("preChatFormFields", JSON.stringify(config.preChatFormFields));
|
|
177
189
|
}
|
|
178
190
|
iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;
|
|
179
|
-
//
|
|
191
|
+
// Responsive iframe styling with smooth transitions
|
|
180
192
|
iframe.style.position = "absolute";
|
|
181
193
|
iframe.style.top = "0";
|
|
182
194
|
iframe.style.left = "0";
|
|
183
195
|
iframe.style.border = "none";
|
|
184
196
|
iframe.style.width = "100%";
|
|
185
197
|
iframe.style.height = "100%";
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
198
|
+
iframe.style.boxSizing = "border-box";
|
|
199
|
+
// Adaptive border radius: circular for icon, rounded for button/expanded
|
|
200
|
+
// No radius on extra small full-screen mode
|
|
201
|
+
if (isExtraSmall && !shouldStartMinimized) {
|
|
202
|
+
iframe.style.borderRadius = "0"; // Full screen, no radius
|
|
203
|
+
}
|
|
204
|
+
else if (shouldStartMinimized && initialWidth === "52px") {
|
|
205
|
+
iframe.style.borderRadius = "50%"; // Circular for icon-only
|
|
206
|
+
}
|
|
207
|
+
else if (shouldStartMinimized) {
|
|
208
|
+
iframe.style.borderRadius = "26px"; // Pill shape for text button
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
iframe.style.borderRadius = isMobile ? "0" : "16px"; // Rounded on desktop, square on mobile
|
|
212
|
+
}
|
|
213
|
+
iframe.style.transition = "border-radius 0.3s ease, box-shadow 0.3s ease";
|
|
190
214
|
iframe.style.pointerEvents = "auto";
|
|
191
|
-
|
|
215
|
+
// Adaptive shadow: larger on desktop, minimal on mobile
|
|
216
|
+
if (shouldStartMinimized) {
|
|
217
|
+
iframe.style.boxShadow = "0 4px 16px rgba(0,0,0,0.15)";
|
|
218
|
+
}
|
|
219
|
+
else if (isMobile) {
|
|
220
|
+
iframe.style.boxShadow = isExtraSmall ? "none" : "0 2px 8px rgba(0,0,0,0.1)";
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
iframe.style.boxShadow = "0 8px 32px rgba(0,0,0,0.15)";
|
|
224
|
+
}
|
|
192
225
|
iframe.setAttribute("allow", "clipboard-write");
|
|
193
226
|
iframe.setAttribute("title", "BuniAI Chat Widget");
|
|
194
227
|
iframe.onload = () => {
|
|
@@ -205,10 +238,50 @@ class BuniChatWidget {
|
|
|
205
238
|
document.body.appendChild(container);
|
|
206
239
|
});
|
|
207
240
|
}
|
|
208
|
-
getPositionStyles(position) {
|
|
209
|
-
//
|
|
210
|
-
const
|
|
211
|
-
const
|
|
241
|
+
getPositionStyles(position, isMinimized = false) {
|
|
242
|
+
// Responsive positioning following mobile-first best practices
|
|
243
|
+
const viewportWidth = window.innerWidth;
|
|
244
|
+
const isExtraSmall = viewportWidth <= 375;
|
|
245
|
+
const isMobile = viewportWidth <= 768;
|
|
246
|
+
const isTablet = viewportWidth > 768 && viewportWidth <= 1024;
|
|
247
|
+
// For extra small devices (Galaxy S8+, iPhone SE, etc.), use minimal or no margins
|
|
248
|
+
// For mobile, use small margins for breathing room
|
|
249
|
+
// For tablet/desktop, use larger margins for floating appearance
|
|
250
|
+
let margin;
|
|
251
|
+
if (isMinimized) {
|
|
252
|
+
// Minimized button always needs some space from edges
|
|
253
|
+
margin = isMobile ? "12px" : "20px";
|
|
254
|
+
}
|
|
255
|
+
else if (isExtraSmall) {
|
|
256
|
+
// Full screen on extra small devices (no margins)
|
|
257
|
+
margin = "0";
|
|
258
|
+
}
|
|
259
|
+
else if (isMobile) {
|
|
260
|
+
// Small margins on mobile for breathing room
|
|
261
|
+
margin = "8px";
|
|
262
|
+
}
|
|
263
|
+
else if (isTablet) {
|
|
264
|
+
// Medium margins on tablets
|
|
265
|
+
margin = "16px";
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// Larger margins on desktop for floating effect
|
|
269
|
+
margin = "24px";
|
|
270
|
+
}
|
|
271
|
+
// On extra small screens when not minimized, position at edges for full coverage
|
|
272
|
+
if (isExtraSmall && !isMinimized) {
|
|
273
|
+
switch (position) {
|
|
274
|
+
case "bottom-right":
|
|
275
|
+
case "bottom-left":
|
|
276
|
+
return `bottom: 0; left: 0; right: 0;`;
|
|
277
|
+
case "top-right":
|
|
278
|
+
case "top-left":
|
|
279
|
+
return `top: 0; left: 0; right: 0;`;
|
|
280
|
+
default:
|
|
281
|
+
return `bottom: 0; left: 0; right: 0;`;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Standard positioning for larger screens or minimized state
|
|
212
285
|
switch (position) {
|
|
213
286
|
case "bottom-right":
|
|
214
287
|
return `bottom: ${margin}; right: ${margin};`;
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private iframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.iframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Check if widget should start minimized\n const shouldStartMinimized = config.initialMinimized === true;\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Detect if we're on mobile\n const isMobile = window.innerWidth <= 768;\n\n // Calculate initial dimensions based on minimized state\n // On mobile, enforce responsive sizing; on desktop, respect custom dimensions\n const initialWidth = shouldStartMinimized\n ? showTriggerText && hasTriggerText\n ? \"auto\"\n : \"52px\"\n : isMobile\n ? \"min(calc(100vw - 2rem), 370px)\"\n : widthValue;\n const initialHeight = shouldStartMinimized\n ? \"52px\"\n : isMobile\n ? \"min(calc(100vh - 2rem), 580px)\"\n : heightValue;\n const initialMinWidth =\n shouldStartMinimized && showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${initialWidth};\n height: ${initialHeight};\n ${initialMinWidth ? `min-width: ${initialMinWidth};` : \"\"}\n ${isMobile ? \"max-width: 370px; max-height: 580px;\" : \"\"}\n transition: all 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\")}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: ${shouldStartMinimized ? \"hidden\" : \"visible\"};\n `;\n\n // Create iframe for secure embedding\n const iframe = document.createElement(\"iframe\");\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\", // Enable postMessage communication\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add string parameters only if provided\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor) params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar) params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius) params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options - only pass if explicitly defined\n if (config.showBranding !== undefined) {\n params.set(\"showBranding\", String(config.showBranding));\n }\n if (config.autoOpen !== undefined) {\n params.set(\"autoOpen\", String(config.autoOpen));\n }\n if (config.minimized !== undefined) {\n params.set(\"minimized\", String(config.minimized));\n }\n if (config.initialMinimized !== undefined) {\n params.set(\"initialMinimized\", String(config.initialMinimized));\n }\n if (config.allowMinimize !== undefined) {\n params.set(\"allowMinimize\", String(config.allowMinimize));\n }\n if (config.showMinimize !== undefined) {\n params.set(\"showMinimize\", String(config.showMinimize));\n }\n if (config.allowClose !== undefined) {\n params.set(\"allowClose\", String(config.allowClose));\n }\n if (config.enableFileUpload !== undefined) {\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n }\n if (config.showTimestamps !== undefined) {\n params.set(\"showTimestamps\", String(config.showTimestamps));\n }\n if (config.showTriggerText !== undefined) {\n params.set(\"showTriggerText\", String(config.showTriggerText));\n }\n if (config.hideDefaultTrigger !== undefined) {\n params.set(\"hideDefaultTrigger\", String(config.hideDefaultTrigger));\n }\n if (config.enableMobile !== undefined) {\n params.set(\"enableMobile\", String(config.enableMobile));\n }\n\n // Pre-chat form and start button - only pass if explicitly defined\n if (config.showPreChatForm !== undefined) {\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n }\n if (config.showStartButton !== undefined) {\n params.set(\"showStartButton\", String(config.showStartButton));\n }\n if (config.startButtonText) {\n params.set(\"startButtonText\", config.startButtonText);\n }\n if (config.preChatFormFields) {\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n }\n\n iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Set styles individually - iframe fills container 100%\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n iframe.style.border = \"none\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n // Use circular border for icon-only minimized, rounded for text button or expanded\n iframe.style.borderRadius =\n shouldStartMinimized && initialWidth === \"52px\" ? \"50%\" : \"12px\";\n iframe.style.transition = \"all 0.3s ease\";\n iframe.style.pointerEvents = \"auto\";\n iframe.style.boxShadow = \"0 4px 12px rgba(0,0,0,0.15)\";\n\n iframe.setAttribute(\"allow\", \"clipboard-write\");\n iframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n iframe.onload = () => {\n this.widgetElement = container;\n this.iframe = iframe;\n this.state.isMinimized = shouldStartMinimized;\n this.setupPostMessageAPI(iframe);\n resolve();\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load BuniAI widget iframe\"));\n };\n\n container.appendChild(iframe);\n document.body.appendChild(container);\n });\n }\n\n private getPositionStyles(position: string): string {\n // Use smaller margins on mobile for better space utilization\n const isMobile = window.innerWidth <= 768;\n const margin = isMobile ? \"8px\" : \"20px\";\n \n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.state.isMinimized = true;\n if (this.widgetElement && data.dimensions) {\n // Resize container to trigger button size when minimized\n this.widgetElement.style.width = data.dimensions.width;\n this.widgetElement.style.height = data.dimensions.height;\n this.widgetElement.style.overflow = \"hidden\";\n if (data.dimensions.minWidth) {\n this.widgetElement.style.minWidth = data.dimensions.minWidth;\n }\n }\n if (this.iframe) {\n // Use circular border for icon-only, rounded for text button\n this.iframe.style.borderRadius =\n data.dimensions?.width === data.dimensions?.height\n ? \"50%\"\n : \"26px\";\n }\n this.emit(\"minimized\", data);\n break;\n\n case \"maximized\":\n this.state.isMinimized = false;\n if (this.widgetElement) {\n // Check if we're on mobile\n const isMobile = window.innerWidth <= 768;\n const config = this.options.config || {};\n\n if (isMobile) {\n // On mobile, enforce responsive sizing\n this.widgetElement.style.width = \"min(calc(100vw - 2rem), 370px)\";\n this.widgetElement.style.height =\n \"min(calc(100vh - 2rem), 680px)\";\n this.widgetElement.style.maxWidth = \"370px\";\n this.widgetElement.style.maxHeight = \"680px\";\n } else {\n // On desktop, respect custom dimensions\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n this.widgetElement.style.width = ensureUnits(\n config.width,\n \"350px\"\n );\n this.widgetElement.style.height = ensureUnits(\n config.height,\n \"650px\"\n );\n }\n this.widgetElement.style.overflow = \"visible\";\n }\n if (this.iframe) {\n this.iframe.style.borderRadius = \"12px\";\n }\n this.emit(\"maximized\", data);\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.widgetElement && this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.contentWindow?.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the iframe if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.style.display = \"block\";\n }\n this.postMessageToWidget(\"show\");\n this.state.isOpen = true;\n this.state.unreadCount = 0;\n this.emit(\"visibility_changed\", { visibility: \"visible\" });\n }\n\n hide(): void {\n this.postMessageToWidget(\"hide\");\n // If hideDefaultTrigger is enabled, completely hide the iframe\n if (\n this.options.config?.hideDefaultTrigger &&\n this.widgetElement instanceof HTMLIFrameElement\n ) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n this.state.isOpen ? this.hide() : this.show();\n }\n\n minimize(): void {\n this.postMessageToWidget(\"minimize\");\n this.state.isMinimized = true;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n maximize(): void {\n this.postMessageToWidget(\"maximize\");\n this.state.isMinimized = false;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private iframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.iframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Check if widget should start minimized\n const shouldStartMinimized = config.initialMinimized === true;\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Responsive breakpoints following mobile-first best practices\n const isMobile = window.innerWidth <= 768;\n const isExtraSmall = window.innerWidth <= 375;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n // Calculate initial dimensions based on minimized state with responsive scaling\n // Mobile-first approach: Full viewport on mobile, constrained on desktop\n const initialWidth = shouldStartMinimized\n ? showTriggerText && hasTriggerText\n ? \"auto\"\n : \"52px\"\n : isExtraSmall\n ? \"100vw\" // Full width on very small devices\n : isMobile\n ? \"min(100vw, 370px)\" // Constrained width on mobile\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\" // Slightly smaller on tablets\n : widthValue; // Custom width on desktop\n\n const initialHeight = shouldStartMinimized\n ? \"52px\"\n : isExtraSmall\n ? \"100vh\" // Full height on very small devices\n : isMobile\n ? \"min(100vh, 600px)\" // Constrained height on mobile\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\" // Slightly smaller on tablets\n : heightValue; // Custom height on desktop\n\n const initialMinWidth =\n shouldStartMinimized && showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n // Use CSS custom properties for dynamic styling\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${initialWidth};\n height: ${initialHeight};\n ${initialMinWidth ? `min-width: ${initialMinWidth};` : \"\"}\n ${isMobile && !shouldStartMinimized ? \"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\", shouldStartMinimized)}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: ${shouldStartMinimized ? \"hidden\" : \"visible\"};\n box-sizing: border-box;\n `;\n\n // Create iframe for secure embedding\n const iframe = document.createElement(\"iframe\");\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\", // Enable postMessage communication\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add string parameters only if provided\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor) params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar) params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius) params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options - only pass if explicitly defined\n if (config.showBranding !== undefined) {\n params.set(\"showBranding\", String(config.showBranding));\n }\n if (config.autoOpen !== undefined) {\n params.set(\"autoOpen\", String(config.autoOpen));\n }\n if (config.minimized !== undefined) {\n params.set(\"minimized\", String(config.minimized));\n }\n if (config.initialMinimized !== undefined) {\n params.set(\"initialMinimized\", String(config.initialMinimized));\n }\n if (config.allowMinimize !== undefined) {\n params.set(\"allowMinimize\", String(config.allowMinimize));\n }\n if (config.showMinimize !== undefined) {\n params.set(\"showMinimize\", String(config.showMinimize));\n }\n if (config.allowClose !== undefined) {\n params.set(\"allowClose\", String(config.allowClose));\n }\n if (config.enableFileUpload !== undefined) {\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n }\n if (config.showTimestamps !== undefined) {\n params.set(\"showTimestamps\", String(config.showTimestamps));\n }\n if (config.showTriggerText !== undefined) {\n params.set(\"showTriggerText\", String(config.showTriggerText));\n }\n if (config.hideDefaultTrigger !== undefined) {\n params.set(\"hideDefaultTrigger\", String(config.hideDefaultTrigger));\n }\n if (config.enableMobile !== undefined) {\n params.set(\"enableMobile\", String(config.enableMobile));\n }\n\n // Pre-chat form and start button - only pass if explicitly defined\n if (config.showPreChatForm !== undefined) {\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n }\n if (config.showStartButton !== undefined) {\n params.set(\"showStartButton\", String(config.showStartButton));\n }\n if (config.startButtonText) {\n params.set(\"startButtonText\", config.startButtonText);\n }\n if (config.preChatFormFields) {\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n }\n\n iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Responsive iframe styling with smooth transitions\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n iframe.style.border = \"none\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.style.boxSizing = \"border-box\";\n \n // Adaptive border radius: circular for icon, rounded for button/expanded\n // No radius on extra small full-screen mode\n if (isExtraSmall && !shouldStartMinimized) {\n iframe.style.borderRadius = \"0\"; // Full screen, no radius\n } else if (shouldStartMinimized && initialWidth === \"52px\") {\n iframe.style.borderRadius = \"50%\"; // Circular for icon-only\n } else if (shouldStartMinimized) {\n iframe.style.borderRadius = \"26px\"; // Pill shape for text button\n } else {\n iframe.style.borderRadius = isMobile ? \"0\" : \"16px\"; // Rounded on desktop, square on mobile\n }\n \n iframe.style.transition = \"border-radius 0.3s ease, box-shadow 0.3s ease\";\n iframe.style.pointerEvents = \"auto\";\n \n // Adaptive shadow: larger on desktop, minimal on mobile\n if (shouldStartMinimized) {\n iframe.style.boxShadow = \"0 4px 16px rgba(0,0,0,0.15)\";\n } else if (isMobile) {\n iframe.style.boxShadow = isExtraSmall ? \"none\" : \"0 2px 8px rgba(0,0,0,0.1)\";\n } else {\n iframe.style.boxShadow = \"0 8px 32px rgba(0,0,0,0.15)\";\n }\n\n iframe.setAttribute(\"allow\", \"clipboard-write\");\n iframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n iframe.onload = () => {\n this.widgetElement = container;\n this.iframe = iframe;\n this.state.isMinimized = shouldStartMinimized;\n this.setupPostMessageAPI(iframe);\n resolve();\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load BuniAI widget iframe\"));\n };\n\n container.appendChild(iframe);\n document.body.appendChild(container);\n });\n }\n\n private getPositionStyles(position: string, isMinimized: boolean = false): 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 (isExtraSmall) {\n // Full screen on extra small devices (no margins)\n margin = \"0\";\n } else if (isMobile) {\n // Small margins on mobile for breathing room\n margin = \"8px\";\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 extra small screens when not minimized, position at edges for full coverage\n if (isExtraSmall && !isMinimized) {\n switch (position) {\n case \"bottom-right\":\n case \"bottom-left\":\n return `bottom: 0; left: 0; right: 0;`;\n case \"top-right\":\n case \"top-left\":\n return `top: 0; left: 0; right: 0;`;\n default:\n return `bottom: 0; left: 0; right: 0;`;\n }\n }\n \n // Standard positioning for larger screens or minimized state\n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.state.isMinimized = true;\n if (this.widgetElement && data.dimensions) {\n // Resize container to trigger button size when minimized\n this.widgetElement.style.width = data.dimensions.width;\n this.widgetElement.style.height = data.dimensions.height;\n this.widgetElement.style.overflow = \"hidden\";\n if (data.dimensions.minWidth) {\n this.widgetElement.style.minWidth = data.dimensions.minWidth;\n }\n }\n if (this.iframe) {\n // Use circular border for icon-only, rounded for text button\n this.iframe.style.borderRadius =\n data.dimensions?.width === data.dimensions?.height\n ? \"50%\"\n : \"26px\";\n }\n this.emit(\"minimized\", data);\n break;\n\n case \"maximized\":\n this.state.isMinimized = false;\n if (this.widgetElement) {\n // Check if we're on mobile\n const isMobile = window.innerWidth <= 768;\n const config = this.options.config || {};\n\n if (isMobile) {\n // On mobile, enforce responsive sizing\n this.widgetElement.style.width = \"min(calc(100vw - 2rem), 370px)\";\n this.widgetElement.style.height =\n \"min(calc(100vh - 2rem), 680px)\";\n this.widgetElement.style.maxWidth = \"370px\";\n this.widgetElement.style.maxHeight = \"680px\";\n } else {\n // On desktop, respect custom dimensions\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n this.widgetElement.style.width = ensureUnits(\n config.width,\n \"350px\"\n );\n this.widgetElement.style.height = ensureUnits(\n config.height,\n \"650px\"\n );\n }\n this.widgetElement.style.overflow = \"visible\";\n }\n if (this.iframe) {\n this.iframe.style.borderRadius = \"12px\";\n }\n this.emit(\"maximized\", data);\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.widgetElement && this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.contentWindow?.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the iframe if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.style.display = \"block\";\n }\n this.postMessageToWidget(\"show\");\n this.state.isOpen = true;\n this.state.unreadCount = 0;\n this.emit(\"visibility_changed\", { visibility: \"visible\" });\n }\n\n hide(): void {\n this.postMessageToWidget(\"hide\");\n // If hideDefaultTrigger is enabled, completely hide the iframe\n if (\n this.options.config?.hideDefaultTrigger &&\n this.widgetElement instanceof HTMLIFrameElement\n ) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n this.state.isOpen ? this.hide() : this.show();\n }\n\n minimize(): void {\n this.postMessageToWidget(\"minimize\");\n this.state.isMinimized = true;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n maximize(): void {\n this.postMessageToWidget(\"maximize\");\n this.state.isMinimized = false;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -63,23 +63,34 @@ class BuniChatWidget {
|
|
|
63
63
|
const shouldStartMinimized = config.initialMinimized === true;
|
|
64
64
|
const showTriggerText = config.showTriggerText !== false;
|
|
65
65
|
const hasTriggerText = !!config.triggerText;
|
|
66
|
-
//
|
|
66
|
+
// Responsive breakpoints following mobile-first best practices
|
|
67
67
|
const isMobile = window.innerWidth <= 768;
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
const isExtraSmall = window.innerWidth <= 375;
|
|
69
|
+
const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;
|
|
70
|
+
// Calculate initial dimensions based on minimized state with responsive scaling
|
|
71
|
+
// Mobile-first approach: Full viewport on mobile, constrained on desktop
|
|
70
72
|
const initialWidth = shouldStartMinimized
|
|
71
73
|
? showTriggerText && hasTriggerText
|
|
72
74
|
? "auto"
|
|
73
75
|
: "52px"
|
|
74
|
-
:
|
|
75
|
-
? "
|
|
76
|
-
:
|
|
76
|
+
: isExtraSmall
|
|
77
|
+
? "100vw" // Full width on very small devices
|
|
78
|
+
: isMobile
|
|
79
|
+
? "min(100vw, 370px)" // Constrained width on mobile
|
|
80
|
+
: isTablet
|
|
81
|
+
? "min(calc(100vw - 3rem), 370px)" // Slightly smaller on tablets
|
|
82
|
+
: widthValue; // Custom width on desktop
|
|
77
83
|
const initialHeight = shouldStartMinimized
|
|
78
84
|
? "52px"
|
|
79
|
-
:
|
|
80
|
-
? "
|
|
81
|
-
:
|
|
85
|
+
: isExtraSmall
|
|
86
|
+
? "100vh" // Full height on very small devices
|
|
87
|
+
: isMobile
|
|
88
|
+
? "min(100vh, 600px)" // Constrained height on mobile
|
|
89
|
+
: isTablet
|
|
90
|
+
? "min(calc(100vh - 3rem), 620px)" // Slightly smaller on tablets
|
|
91
|
+
: heightValue; // Custom height on desktop
|
|
82
92
|
const initialMinWidth = shouldStartMinimized && showTriggerText && hasTriggerText ? "auto" : "";
|
|
93
|
+
// Use CSS custom properties for dynamic styling
|
|
83
94
|
container.style.cssText = `
|
|
84
95
|
position: fixed;
|
|
85
96
|
pointer-events: none;
|
|
@@ -87,11 +98,12 @@ class BuniChatWidget {
|
|
|
87
98
|
width: ${initialWidth};
|
|
88
99
|
height: ${initialHeight};
|
|
89
100
|
${initialMinWidth ? `min-width: ${initialMinWidth};` : ""}
|
|
90
|
-
${isMobile ? "max-width:
|
|
91
|
-
transition:
|
|
92
|
-
${this.getPositionStyles(config.position || "bottom-right")}
|
|
101
|
+
${isMobile && !shouldStartMinimized ? "max-width: 100vw; max-height: 100vh;" : ""}
|
|
102
|
+
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease;
|
|
103
|
+
${this.getPositionStyles(config.position || "bottom-right", shouldStartMinimized)}
|
|
93
104
|
display: ${config.hideDefaultTrigger ? "none" : "block"};
|
|
94
105
|
overflow: ${shouldStartMinimized ? "hidden" : "visible"};
|
|
106
|
+
box-sizing: border-box;
|
|
95
107
|
`;
|
|
96
108
|
// Create iframe for secure embedding
|
|
97
109
|
const iframe = document.createElement("iframe");
|
|
@@ -180,19 +192,40 @@ class BuniChatWidget {
|
|
|
180
192
|
params.set("preChatFormFields", JSON.stringify(config.preChatFormFields));
|
|
181
193
|
}
|
|
182
194
|
iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;
|
|
183
|
-
//
|
|
195
|
+
// Responsive iframe styling with smooth transitions
|
|
184
196
|
iframe.style.position = "absolute";
|
|
185
197
|
iframe.style.top = "0";
|
|
186
198
|
iframe.style.left = "0";
|
|
187
199
|
iframe.style.border = "none";
|
|
188
200
|
iframe.style.width = "100%";
|
|
189
201
|
iframe.style.height = "100%";
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
202
|
+
iframe.style.boxSizing = "border-box";
|
|
203
|
+
// Adaptive border radius: circular for icon, rounded for button/expanded
|
|
204
|
+
// No radius on extra small full-screen mode
|
|
205
|
+
if (isExtraSmall && !shouldStartMinimized) {
|
|
206
|
+
iframe.style.borderRadius = "0"; // Full screen, no radius
|
|
207
|
+
}
|
|
208
|
+
else if (shouldStartMinimized && initialWidth === "52px") {
|
|
209
|
+
iframe.style.borderRadius = "50%"; // Circular for icon-only
|
|
210
|
+
}
|
|
211
|
+
else if (shouldStartMinimized) {
|
|
212
|
+
iframe.style.borderRadius = "26px"; // Pill shape for text button
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
iframe.style.borderRadius = isMobile ? "0" : "16px"; // Rounded on desktop, square on mobile
|
|
216
|
+
}
|
|
217
|
+
iframe.style.transition = "border-radius 0.3s ease, box-shadow 0.3s ease";
|
|
194
218
|
iframe.style.pointerEvents = "auto";
|
|
195
|
-
|
|
219
|
+
// Adaptive shadow: larger on desktop, minimal on mobile
|
|
220
|
+
if (shouldStartMinimized) {
|
|
221
|
+
iframe.style.boxShadow = "0 4px 16px rgba(0,0,0,0.15)";
|
|
222
|
+
}
|
|
223
|
+
else if (isMobile) {
|
|
224
|
+
iframe.style.boxShadow = isExtraSmall ? "none" : "0 2px 8px rgba(0,0,0,0.1)";
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
iframe.style.boxShadow = "0 8px 32px rgba(0,0,0,0.15)";
|
|
228
|
+
}
|
|
196
229
|
iframe.setAttribute("allow", "clipboard-write");
|
|
197
230
|
iframe.setAttribute("title", "BuniAI Chat Widget");
|
|
198
231
|
iframe.onload = () => {
|
|
@@ -209,10 +242,50 @@ class BuniChatWidget {
|
|
|
209
242
|
document.body.appendChild(container);
|
|
210
243
|
});
|
|
211
244
|
}
|
|
212
|
-
getPositionStyles(position) {
|
|
213
|
-
//
|
|
214
|
-
const
|
|
215
|
-
const
|
|
245
|
+
getPositionStyles(position, isMinimized = false) {
|
|
246
|
+
// Responsive positioning following mobile-first best practices
|
|
247
|
+
const viewportWidth = window.innerWidth;
|
|
248
|
+
const isExtraSmall = viewportWidth <= 375;
|
|
249
|
+
const isMobile = viewportWidth <= 768;
|
|
250
|
+
const isTablet = viewportWidth > 768 && viewportWidth <= 1024;
|
|
251
|
+
// For extra small devices (Galaxy S8+, iPhone SE, etc.), use minimal or no margins
|
|
252
|
+
// For mobile, use small margins for breathing room
|
|
253
|
+
// For tablet/desktop, use larger margins for floating appearance
|
|
254
|
+
let margin;
|
|
255
|
+
if (isMinimized) {
|
|
256
|
+
// Minimized button always needs some space from edges
|
|
257
|
+
margin = isMobile ? "12px" : "20px";
|
|
258
|
+
}
|
|
259
|
+
else if (isExtraSmall) {
|
|
260
|
+
// Full screen on extra small devices (no margins)
|
|
261
|
+
margin = "0";
|
|
262
|
+
}
|
|
263
|
+
else if (isMobile) {
|
|
264
|
+
// Small margins on mobile for breathing room
|
|
265
|
+
margin = "8px";
|
|
266
|
+
}
|
|
267
|
+
else if (isTablet) {
|
|
268
|
+
// Medium margins on tablets
|
|
269
|
+
margin = "16px";
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
// Larger margins on desktop for floating effect
|
|
273
|
+
margin = "24px";
|
|
274
|
+
}
|
|
275
|
+
// On extra small screens when not minimized, position at edges for full coverage
|
|
276
|
+
if (isExtraSmall && !isMinimized) {
|
|
277
|
+
switch (position) {
|
|
278
|
+
case "bottom-right":
|
|
279
|
+
case "bottom-left":
|
|
280
|
+
return `bottom: 0; left: 0; right: 0;`;
|
|
281
|
+
case "top-right":
|
|
282
|
+
case "top-left":
|
|
283
|
+
return `top: 0; left: 0; right: 0;`;
|
|
284
|
+
default:
|
|
285
|
+
return `bottom: 0; left: 0; right: 0;`;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Standard positioning for larger screens or minimized state
|
|
216
289
|
switch (position) {
|
|
217
290
|
case "bottom-right":
|
|
218
291
|
return `bottom: ${margin}; right: ${margin};`;
|
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// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private iframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.iframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Check if widget should start minimized\n const shouldStartMinimized = config.initialMinimized === true;\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Detect if we're on mobile\n const isMobile = window.innerWidth <= 768;\n\n // Calculate initial dimensions based on minimized state\n // On mobile, enforce responsive sizing; on desktop, respect custom dimensions\n const initialWidth = shouldStartMinimized\n ? showTriggerText && hasTriggerText\n ? \"auto\"\n : \"52px\"\n : isMobile\n ? \"min(calc(100vw - 2rem), 370px)\"\n : widthValue;\n const initialHeight = shouldStartMinimized\n ? \"52px\"\n : isMobile\n ? \"min(calc(100vh - 2rem), 580px)\"\n : heightValue;\n const initialMinWidth =\n shouldStartMinimized && showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${initialWidth};\n height: ${initialHeight};\n ${initialMinWidth ? `min-width: ${initialMinWidth};` : \"\"}\n ${isMobile ? \"max-width: 370px; max-height: 580px;\" : \"\"}\n transition: all 0.3s ease;\n ${this.getPositionStyles(config.position || \"bottom-right\")}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: ${shouldStartMinimized ? \"hidden\" : \"visible\"};\n `;\n\n // Create iframe for secure embedding\n const iframe = document.createElement(\"iframe\");\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\", // Enable postMessage communication\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add string parameters only if provided\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor) params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar) params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius) params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options - only pass if explicitly defined\n if (config.showBranding !== undefined) {\n params.set(\"showBranding\", String(config.showBranding));\n }\n if (config.autoOpen !== undefined) {\n params.set(\"autoOpen\", String(config.autoOpen));\n }\n if (config.minimized !== undefined) {\n params.set(\"minimized\", String(config.minimized));\n }\n if (config.initialMinimized !== undefined) {\n params.set(\"initialMinimized\", String(config.initialMinimized));\n }\n if (config.allowMinimize !== undefined) {\n params.set(\"allowMinimize\", String(config.allowMinimize));\n }\n if (config.showMinimize !== undefined) {\n params.set(\"showMinimize\", String(config.showMinimize));\n }\n if (config.allowClose !== undefined) {\n params.set(\"allowClose\", String(config.allowClose));\n }\n if (config.enableFileUpload !== undefined) {\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n }\n if (config.showTimestamps !== undefined) {\n params.set(\"showTimestamps\", String(config.showTimestamps));\n }\n if (config.showTriggerText !== undefined) {\n params.set(\"showTriggerText\", String(config.showTriggerText));\n }\n if (config.hideDefaultTrigger !== undefined) {\n params.set(\"hideDefaultTrigger\", String(config.hideDefaultTrigger));\n }\n if (config.enableMobile !== undefined) {\n params.set(\"enableMobile\", String(config.enableMobile));\n }\n\n // Pre-chat form and start button - only pass if explicitly defined\n if (config.showPreChatForm !== undefined) {\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n }\n if (config.showStartButton !== undefined) {\n params.set(\"showStartButton\", String(config.showStartButton));\n }\n if (config.startButtonText) {\n params.set(\"startButtonText\", config.startButtonText);\n }\n if (config.preChatFormFields) {\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n }\n\n iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Set styles individually - iframe fills container 100%\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n iframe.style.border = \"none\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n // Use circular border for icon-only minimized, rounded for text button or expanded\n iframe.style.borderRadius =\n shouldStartMinimized && initialWidth === \"52px\" ? \"50%\" : \"12px\";\n iframe.style.transition = \"all 0.3s ease\";\n iframe.style.pointerEvents = \"auto\";\n iframe.style.boxShadow = \"0 4px 12px rgba(0,0,0,0.15)\";\n\n iframe.setAttribute(\"allow\", \"clipboard-write\");\n iframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n iframe.onload = () => {\n this.widgetElement = container;\n this.iframe = iframe;\n this.state.isMinimized = shouldStartMinimized;\n this.setupPostMessageAPI(iframe);\n resolve();\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load BuniAI widget iframe\"));\n };\n\n container.appendChild(iframe);\n document.body.appendChild(container);\n });\n }\n\n private getPositionStyles(position: string): string {\n // Use smaller margins on mobile for better space utilization\n const isMobile = window.innerWidth <= 768;\n const margin = isMobile ? \"8px\" : \"20px\";\n \n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.state.isMinimized = true;\n if (this.widgetElement && data.dimensions) {\n // Resize container to trigger button size when minimized\n this.widgetElement.style.width = data.dimensions.width;\n this.widgetElement.style.height = data.dimensions.height;\n this.widgetElement.style.overflow = \"hidden\";\n if (data.dimensions.minWidth) {\n this.widgetElement.style.minWidth = data.dimensions.minWidth;\n }\n }\n if (this.iframe) {\n // Use circular border for icon-only, rounded for text button\n this.iframe.style.borderRadius =\n data.dimensions?.width === data.dimensions?.height\n ? \"50%\"\n : \"26px\";\n }\n this.emit(\"minimized\", data);\n break;\n\n case \"maximized\":\n this.state.isMinimized = false;\n if (this.widgetElement) {\n // Check if we're on mobile\n const isMobile = window.innerWidth <= 768;\n const config = this.options.config || {};\n\n if (isMobile) {\n // On mobile, enforce responsive sizing\n this.widgetElement.style.width = \"min(calc(100vw - 2rem), 370px)\";\n this.widgetElement.style.height =\n \"min(calc(100vh - 2rem), 680px)\";\n this.widgetElement.style.maxWidth = \"370px\";\n this.widgetElement.style.maxHeight = \"680px\";\n } else {\n // On desktop, respect custom dimensions\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n this.widgetElement.style.width = ensureUnits(\n config.width,\n \"350px\"\n );\n this.widgetElement.style.height = ensureUnits(\n config.height,\n \"650px\"\n );\n }\n this.widgetElement.style.overflow = \"visible\";\n }\n if (this.iframe) {\n this.iframe.style.borderRadius = \"12px\";\n }\n this.emit(\"maximized\", data);\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.widgetElement && this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.contentWindow?.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the iframe if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.style.display = \"block\";\n }\n this.postMessageToWidget(\"show\");\n this.state.isOpen = true;\n this.state.unreadCount = 0;\n this.emit(\"visibility_changed\", { visibility: \"visible\" });\n }\n\n hide(): void {\n this.postMessageToWidget(\"hide\");\n // If hideDefaultTrigger is enabled, completely hide the iframe\n if (\n this.options.config?.hideDefaultTrigger &&\n this.widgetElement instanceof HTMLIFrameElement\n ) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n this.state.isOpen ? this.hide() : this.show();\n }\n\n minimize(): void {\n this.postMessageToWidget(\"minimize\");\n this.state.isMinimized = true;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n maximize(): void {\n this.postMessageToWidget(\"maximize\");\n this.state.isMinimized = false;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/widget.ts","../src/index.ts"],"sourcesContent":["import {\n BuniChatAPI,\n BuniChatOptions,\n BuniChatState,\n CustomerData,\n SessionVariables,\n} from \"./types\";\n\n// Core widget loader class\nexport class BuniChatWidget implements BuniChatAPI {\n private options!: BuniChatOptions;\n private state: BuniChatState;\n private eventListeners: Map<string, Function[]>;\n private widgetElement: HTMLElement | null;\n private iframe: HTMLIFrameElement | null;\n private customerData: CustomerData | null;\n private sessionVariables: SessionVariables | null;\n\n constructor() {\n this.state = {\n isOpen: false,\n isLoaded: false,\n isMinimized: false,\n unreadCount: 0,\n };\n this.eventListeners = new Map();\n this.widgetElement = null;\n this.iframe = null;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n async initialize(options: BuniChatOptions): Promise<void> {\n this.options = options;\n\n try {\n await this.loadWidget();\n this.state.isLoaded = true;\n this.emit(\"ready\", { timestamp: Date.now() });\n\n if (options.onReady) {\n options.onReady({ timestamp: Date.now() });\n }\n } catch (error) {\n const errorObj =\n error instanceof Error ? error : new Error(String(error));\n this.emit(\"error\", { error: errorObj, context: \"initialization\" });\n\n if (options.onError) {\n options.onError(errorObj);\n }\n throw errorObj;\n }\n }\n\n private async loadWidget(): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if container already exists and remove it\n const existingContainer = document.getElementById(\n \"buni-chat-widget-container\"\n );\n if (existingContainer) {\n existingContainer.remove();\n }\n\n // Create container div for proper positioning\n const container = document.createElement(\"div\");\n container.id = \"buni-chat-widget-container\";\n const config = this.options.config || {};\n\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n\n const widthValue = ensureUnits(config.width, \"350px\");\n const heightValue = ensureUnits(config.height, \"650px\");\n\n // Check if widget should start minimized\n const shouldStartMinimized = config.initialMinimized === true;\n const showTriggerText = config.showTriggerText !== false;\n const hasTriggerText = !!config.triggerText;\n\n // Responsive breakpoints following mobile-first best practices\n const isMobile = window.innerWidth <= 768;\n const isExtraSmall = window.innerWidth <= 375;\n const isTablet = window.innerWidth > 768 && window.innerWidth <= 1024;\n\n // Calculate initial dimensions based on minimized state with responsive scaling\n // Mobile-first approach: Full viewport on mobile, constrained on desktop\n const initialWidth = shouldStartMinimized\n ? showTriggerText && hasTriggerText\n ? \"auto\"\n : \"52px\"\n : isExtraSmall\n ? \"100vw\" // Full width on very small devices\n : isMobile\n ? \"min(100vw, 370px)\" // Constrained width on mobile\n : isTablet\n ? \"min(calc(100vw - 3rem), 370px)\" // Slightly smaller on tablets\n : widthValue; // Custom width on desktop\n\n const initialHeight = shouldStartMinimized\n ? \"52px\"\n : isExtraSmall\n ? \"100vh\" // Full height on very small devices\n : isMobile\n ? \"min(100vh, 600px)\" // Constrained height on mobile\n : isTablet\n ? \"min(calc(100vh - 3rem), 620px)\" // Slightly smaller on tablets\n : heightValue; // Custom height on desktop\n\n const initialMinWidth =\n shouldStartMinimized && showTriggerText && hasTriggerText ? \"auto\" : \"\";\n\n // Use CSS custom properties for dynamic styling\n container.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 999999;\n width: ${initialWidth};\n height: ${initialHeight};\n ${initialMinWidth ? `min-width: ${initialMinWidth};` : \"\"}\n ${isMobile && !shouldStartMinimized ? \"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\", shouldStartMinimized)}\n display: ${config.hideDefaultTrigger ? \"none\" : \"block\"};\n overflow: ${shouldStartMinimized ? \"hidden\" : \"visible\"};\n box-sizing: border-box;\n `;\n\n // Create iframe for secure embedding\n const iframe = document.createElement(\"iframe\");\n\n // Build URL with configuration parameters\n const params = new URLSearchParams({\n token: this.options.token,\n embedded: \"true\", // Enable postMessage communication\n source: \"package\",\n framework: this.options.framework || \"vanilla\",\n });\n\n // Add string parameters only if provided\n if (config.theme) params.set(\"theme\", config.theme);\n if (config.primaryColor) params.set(\"primaryColor\", config.primaryColor);\n if (config.secondaryColor)\n params.set(\"secondaryColor\", config.secondaryColor);\n if (config.position) params.set(\"position\", config.position);\n if (widthValue && config.width !== undefined)\n params.set(\"width\", widthValue);\n if (heightValue && config.height !== undefined)\n params.set(\"height\", heightValue);\n if (config.customAvatar) params.set(\"customAvatar\", config.customAvatar);\n if (config.companyName) params.set(\"companyName\", config.companyName);\n if (config.welcomeMessage)\n params.set(\"welcomeMessage\", config.welcomeMessage);\n if (config.triggerText) params.set(\"triggerText\", config.triggerText);\n if (config.borderRadius) params.set(\"borderRadius\", config.borderRadius);\n if (config.avatarType) params.set(\"avatarType\", config.avatarType);\n if (config.avatarText) params.set(\"avatarText\", config.avatarText);\n\n // Boolean options - only pass if explicitly defined\n if (config.showBranding !== undefined) {\n params.set(\"showBranding\", String(config.showBranding));\n }\n if (config.autoOpen !== undefined) {\n params.set(\"autoOpen\", String(config.autoOpen));\n }\n if (config.minimized !== undefined) {\n params.set(\"minimized\", String(config.minimized));\n }\n if (config.initialMinimized !== undefined) {\n params.set(\"initialMinimized\", String(config.initialMinimized));\n }\n if (config.allowMinimize !== undefined) {\n params.set(\"allowMinimize\", String(config.allowMinimize));\n }\n if (config.showMinimize !== undefined) {\n params.set(\"showMinimize\", String(config.showMinimize));\n }\n if (config.allowClose !== undefined) {\n params.set(\"allowClose\", String(config.allowClose));\n }\n if (config.enableFileUpload !== undefined) {\n params.set(\"enableFileUpload\", String(config.enableFileUpload));\n }\n if (config.showTimestamps !== undefined) {\n params.set(\"showTimestamps\", String(config.showTimestamps));\n }\n if (config.showTriggerText !== undefined) {\n params.set(\"showTriggerText\", String(config.showTriggerText));\n }\n if (config.hideDefaultTrigger !== undefined) {\n params.set(\"hideDefaultTrigger\", String(config.hideDefaultTrigger));\n }\n if (config.enableMobile !== undefined) {\n params.set(\"enableMobile\", String(config.enableMobile));\n }\n\n // Pre-chat form and start button - only pass if explicitly defined\n if (config.showPreChatForm !== undefined) {\n params.set(\"showPreChatForm\", String(config.showPreChatForm));\n }\n if (config.showStartButton !== undefined) {\n params.set(\"showStartButton\", String(config.showStartButton));\n }\n if (config.startButtonText) {\n params.set(\"startButtonText\", config.startButtonText);\n }\n if (config.preChatFormFields) {\n params.set(\n \"preChatFormFields\",\n JSON.stringify(config.preChatFormFields)\n );\n }\n\n iframe.src = `${this.getBaseUrl()}/embed/chat?${params.toString()}`;\n\n // Responsive iframe styling with smooth transitions\n iframe.style.position = \"absolute\";\n iframe.style.top = \"0\";\n iframe.style.left = \"0\";\n iframe.style.border = \"none\";\n iframe.style.width = \"100%\";\n iframe.style.height = \"100%\";\n iframe.style.boxSizing = \"border-box\";\n \n // Adaptive border radius: circular for icon, rounded for button/expanded\n // No radius on extra small full-screen mode\n if (isExtraSmall && !shouldStartMinimized) {\n iframe.style.borderRadius = \"0\"; // Full screen, no radius\n } else if (shouldStartMinimized && initialWidth === \"52px\") {\n iframe.style.borderRadius = \"50%\"; // Circular for icon-only\n } else if (shouldStartMinimized) {\n iframe.style.borderRadius = \"26px\"; // Pill shape for text button\n } else {\n iframe.style.borderRadius = isMobile ? \"0\" : \"16px\"; // Rounded on desktop, square on mobile\n }\n \n iframe.style.transition = \"border-radius 0.3s ease, box-shadow 0.3s ease\";\n iframe.style.pointerEvents = \"auto\";\n \n // Adaptive shadow: larger on desktop, minimal on mobile\n if (shouldStartMinimized) {\n iframe.style.boxShadow = \"0 4px 16px rgba(0,0,0,0.15)\";\n } else if (isMobile) {\n iframe.style.boxShadow = isExtraSmall ? \"none\" : \"0 2px 8px rgba(0,0,0,0.1)\";\n } else {\n iframe.style.boxShadow = \"0 8px 32px rgba(0,0,0,0.15)\";\n }\n\n iframe.setAttribute(\"allow\", \"clipboard-write\");\n iframe.setAttribute(\"title\", \"BuniAI Chat Widget\");\n\n iframe.onload = () => {\n this.widgetElement = container;\n this.iframe = iframe;\n this.state.isMinimized = shouldStartMinimized;\n this.setupPostMessageAPI(iframe);\n resolve();\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load BuniAI widget iframe\"));\n };\n\n container.appendChild(iframe);\n document.body.appendChild(container);\n });\n }\n\n private getPositionStyles(position: string, isMinimized: boolean = false): 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 (isExtraSmall) {\n // Full screen on extra small devices (no margins)\n margin = \"0\";\n } else if (isMobile) {\n // Small margins on mobile for breathing room\n margin = \"8px\";\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 extra small screens when not minimized, position at edges for full coverage\n if (isExtraSmall && !isMinimized) {\n switch (position) {\n case \"bottom-right\":\n case \"bottom-left\":\n return `bottom: 0; left: 0; right: 0;`;\n case \"top-right\":\n case \"top-left\":\n return `top: 0; left: 0; right: 0;`;\n default:\n return `bottom: 0; left: 0; right: 0;`;\n }\n }\n \n // Standard positioning for larger screens or minimized state\n switch (position) {\n case \"bottom-right\":\n return `bottom: ${margin}; right: ${margin};`;\n case \"bottom-left\":\n return `bottom: ${margin}; left: ${margin};`;\n case \"top-right\":\n return `top: ${margin}; right: ${margin};`;\n case \"top-left\":\n return `top: ${margin}; left: ${margin};`;\n default:\n return `bottom: ${margin}; right: ${margin};`;\n }\n }\n\n private setupPostMessageAPI(iframe: HTMLIFrameElement): void {\n // Listen for messages from the iframe\n window.addEventListener(\"message\", (event) => {\n // Verify origin for security\n if (event.origin !== this.getBaseUrl()) {\n return;\n }\n\n const { type, data } = event.data;\n\n switch (type) {\n case \"ready\":\n this.state.isLoaded = true;\n this.emit(\"ready\", data);\n if (this.options.onReady) {\n this.options.onReady(data);\n }\n break;\n\n case \"visibility_changed\":\n this.state.isOpen = data.visibility === \"visible\";\n this.emit(\"visibility_changed\", data);\n if (this.options.onVisibilityChanged) {\n this.options.onVisibilityChanged(data);\n }\n break;\n\n case \"new_message\":\n if (data.isFromBot) {\n this.state.unreadCount++;\n }\n this.emit(\"new_message\", data);\n if (this.options.onNewMessage) {\n this.options.onNewMessage(data);\n }\n break;\n\n case \"minimized\":\n this.state.isMinimized = true;\n if (this.widgetElement && data.dimensions) {\n // Resize container to trigger button size when minimized\n this.widgetElement.style.width = data.dimensions.width;\n this.widgetElement.style.height = data.dimensions.height;\n this.widgetElement.style.overflow = \"hidden\";\n if (data.dimensions.minWidth) {\n this.widgetElement.style.minWidth = data.dimensions.minWidth;\n }\n }\n if (this.iframe) {\n // Use circular border for icon-only, rounded for text button\n this.iframe.style.borderRadius =\n data.dimensions?.width === data.dimensions?.height\n ? \"50%\"\n : \"26px\";\n }\n this.emit(\"minimized\", data);\n break;\n\n case \"maximized\":\n this.state.isMinimized = false;\n if (this.widgetElement) {\n // Check if we're on mobile\n const isMobile = window.innerWidth <= 768;\n const config = this.options.config || {};\n\n if (isMobile) {\n // On mobile, enforce responsive sizing\n this.widgetElement.style.width = \"min(calc(100vw - 2rem), 370px)\";\n this.widgetElement.style.height =\n \"min(calc(100vh - 2rem), 680px)\";\n this.widgetElement.style.maxWidth = \"370px\";\n this.widgetElement.style.maxHeight = \"680px\";\n } else {\n // On desktop, respect custom dimensions\n const ensureUnits = (\n value: string | number | undefined,\n defaultValue: string\n ): string => {\n if (!value) return defaultValue;\n const str = String(value);\n if (str.match(/^[\\d.]+\\s*(px|em|rem|%|vh|vw)$/)) return str;\n if (str.match(/^[\\d.]+$/)) return `${str}px`;\n return str;\n };\n this.widgetElement.style.width = ensureUnits(\n config.width,\n \"350px\"\n );\n this.widgetElement.style.height = ensureUnits(\n config.height,\n \"650px\"\n );\n }\n this.widgetElement.style.overflow = \"visible\";\n }\n if (this.iframe) {\n this.iframe.style.borderRadius = \"12px\";\n }\n this.emit(\"maximized\", data);\n break;\n\n case \"customer_data_updated\":\n this.customerData = data;\n this.emit(\"customer_data_updated\", data);\n break;\n\n case \"session_updated\":\n this.sessionVariables = data.variables;\n this.emit(\"session_updated\", data);\n break;\n\n case \"error\":\n this.emit(\"error\", data);\n if (this.options.onError) {\n this.options.onError(data.error);\n }\n break;\n }\n });\n }\n\n private postMessageToWidget(type: string, data?: any): void {\n if (this.widgetElement && this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.contentWindow?.postMessage(\n { type, data },\n this.getBaseUrl()\n );\n }\n }\n\n private getBaseUrl(): string {\n // Return the base URL for the BuniAI platform\n return (globalThis as any).BUNI_API_URL || window.location.origin;\n }\n\n destroy(): void {\n this.postMessageToWidget(\"destroy\");\n\n if (this.widgetElement) {\n this.widgetElement.remove();\n this.widgetElement = null;\n }\n\n this.eventListeners.clear();\n this.state.isLoaded = false;\n this.customerData = null;\n this.sessionVariables = null;\n }\n\n show(): void {\n // Show the iframe if it was hidden (hideDefaultTrigger mode)\n if (this.widgetElement instanceof HTMLIFrameElement) {\n this.widgetElement.style.display = \"block\";\n }\n this.postMessageToWidget(\"show\");\n this.state.isOpen = true;\n this.state.unreadCount = 0;\n this.emit(\"visibility_changed\", { visibility: \"visible\" });\n }\n\n hide(): void {\n this.postMessageToWidget(\"hide\");\n // If hideDefaultTrigger is enabled, completely hide the iframe\n if (\n this.options.config?.hideDefaultTrigger &&\n this.widgetElement instanceof HTMLIFrameElement\n ) {\n this.widgetElement.style.display = \"none\";\n }\n this.state.isOpen = false;\n this.emit(\"visibility_changed\", { visibility: \"hidden\" });\n }\n\n toggle(): void {\n this.state.isOpen ? this.hide() : this.show();\n }\n\n minimize(): void {\n this.postMessageToWidget(\"minimize\");\n this.state.isMinimized = true;\n this.emit(\"minimized\", { timestamp: Date.now() });\n }\n\n maximize(): void {\n this.postMessageToWidget(\"maximize\");\n this.state.isMinimized = false;\n this.emit(\"maximized\", { timestamp: Date.now() });\n }\n\n setCustomerData(data: CustomerData): void {\n this.customerData = { ...this.customerData, ...data };\n this.postMessageToWidget(\"setCustomerData\", this.customerData);\n this.emit(\"customer_data_updated\", { data: this.customerData });\n }\n\n getCustomerData(): CustomerData | null {\n return this.customerData ? { ...this.customerData } : null;\n }\n\n setSessionVariables(variables: SessionVariables): void {\n this.sessionVariables = { ...this.sessionVariables, ...variables };\n this.postMessageToWidget(\"setSessionVariables\", this.sessionVariables);\n this.emit(\"session_updated\", { variables: this.sessionVariables });\n }\n\n getSessionVariables(): SessionVariables | null {\n return this.sessionVariables ? { ...this.sessionVariables } : null;\n }\n\n sendMessage(message: string): void {\n this.postMessageToWidget(\"sendMessage\", { message });\n\n const messageData = {\n message,\n isFromBot: false,\n timestamp: Date.now(),\n messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n };\n\n this.emit(\"new_message\", messageData);\n }\n\n clearChat(): void {\n this.postMessageToWidget(\"clearChat\");\n this.state.unreadCount = 0;\n }\n\n on(event: string, callback: Function): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n off(event: string, callback?: Function): void {\n const listeners = this.eventListeners.get(event);\n if (!listeners) return;\n\n if (callback) {\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n } else {\n this.eventListeners.set(event, []);\n }\n }\n\n emit(event: string, data?: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => {\n try {\n callback(data);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n }\n\n getState(): BuniChatState {\n return { ...this.state };\n }\n\n isReady(): boolean {\n return this.state.isLoaded;\n }\n}\n\n// Utility function - named export\nexport function createBuniChatWidget(options: BuniChatOptions): BuniChatWidget {\n const widget = new BuniChatWidget();\n widget.initialize(options);\n return widget;\n}\n\n// Default export - the main widget class\nexport default BuniChatWidget;\n\n// Global type declaration for the widget API\ndeclare global {\n interface Window {\n BuniChat?: {\n configure: (config: any) => void;\n show: () => void;\n hide: () => void;\n minimize: () => void;\n maximize: () => void;\n destroy: () => void;\n setCustomerData: (data: CustomerData) => void;\n setSessionVariables: (variables: SessionVariables) => void;\n sendMessage: (message: string) => void;\n clearChat: () => void;\n on: (event: string, callback: Function) => void;\n off: (event: string, callback?: Function) => void;\n };\n }\n}\n","// Main exports for @buni.ai/chatbot-core\n\n// Export all types\nexport * from \"./types\";\n\n// Export everything from widget\nexport * from \"./widget\";\n\n// Make BuniChatWidget the default export as well\nimport { BuniChatWidget } from \"./widget\";\nexport default BuniChatWidget;\n"],"names":[],"mappings":"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"}
|