andy-widget-react 2.3.0 → 2.3.2
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/README.md +2 -2
- package/dist/index.cjs +52 -16
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +52 -16
- package/dist/index.esm.js.map +1 -0
- package/dist/types/hooks/useSupportChat.d.ts +1 -0
- package/package.json +2 -2
- package/src/AndyChat.tsx +6 -5
- package/src/SupportChat.tsx +7 -7
- package/src/hooks/useSupportChat.ts +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../core/src/design-tokens.js","../../core/src/config.js","../../core/src/stream-message.js","../../core/src/api.js","../../core/src/utils.js","../../core/src/styles-helper.js","../../core/src/ui-constants.js","../../core/src/mobile-detection.js","../../core/src/browser-handoff.js","../../core/src/requester-fetch.js","../../core/src/support-client.js","../../core/src/support-controller.js","../../core/src/support-styles.js","../src/hooks/useSupportChat.ts","../src/SupportChat.tsx","../src/AndyChat.tsx","../src/hooks/useAndyChat.ts","../src/components/ChatBubble.tsx","../src/components/MessageList.tsx","../src/components/MessageInput.tsx","../src/components/ChatWindow.tsx","../src/components/FAQ.tsx","../src/components/WelcomePopup.tsx","../src/components/UserInfoForm.tsx"],"sourcesContent":["/**\n * Design tokens for AndyChat\n * Centralized styling constants and design values\n */\n\n// Color tokens\nexport const colors = {\n\t// Primary brand colors\n\tprimary: '#3B82F6',\n\tprimaryHover: '#2563EB',\n\tprimaryLight: '#EBF4FF',\n\n\t// Basic colors\n\twhite: '#FFFFFF',\n\tblack: '#000000',\n\n\t// Neutral grays\n\tgray100: '#F7FAFC',\n\tgray200: '#EDF2F7',\n\tgray300: '#E2E8F0',\n\tgray400: '#CBD5E0',\n\tgray500: '#A0ADB8',\n\tgray600: '#718096',\n\tgray700: '#4A5568',\n\tgray800: '#2D3748',\n\tgray900: '#1A202C',\n\n\t// Semantic colors\n\tsuccess: '#48BB78',\n\twarning: '#ED8936',\n\terror: '#F56565',\n\tinfo: '#4299E1',\n\n\t// UI semantic colors (mapped to grays for consistency)\n\tbackground: '#F9FAFC',\n\ttext: '#2D3748',\n\ttextSecondary: '#4A5568',\n\ttextMuted: '#718096',\n\tborder: '#E2E8F0',\n\thover: '#F7FAFC',\n\n\t// Input specific colors\n\tinputBackground: '#F5F5F5',\n\tinputButton: '#F0F0F0',\n\tinputButtonHover: '#E0E0E0',\n\n\t// Chat specific colors\n\tuserMessage: '#3B82F6',\n\tbotMessage: '#FFFFFF',\n\tuserMessageText: '#FFFFFF',\n\tbotMessageText: '#2D3748',\n\n\t// Dark theme colors\n\tbackgroundDark: '#1A1A1A',\n\tbackgroundSecondaryDark: '#2C2C2C',\n\tbackgroundTertiaryDark: '#383838',\n\ttextDark: '#E0E0E0',\n\ttextMutedDark: '#A0A0A0',\n\tborderDark: '#444444',\n\thoverDark: '#4A4A4A'\n}\n\n// Typography tokens\nexport const typography = {\n\tfontFamily: {\n\t\tprimary: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\t\tmono: 'SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace'\n\t},\n\tfontSize: {\n\t\txs: '0.75rem', // 12px\n\t\tsm: '0.875rem', // 14px\n\t\tbase: '1rem', // 16px\n\t\tlg: '1.125rem', // 18px\n\t\txl: '1.25rem', // 20px\n\t\t'2xl': '1.5rem', // 24px\n\t\t'3xl': '1.875rem' // 30px\n\t},\n\tfontWeight: {\n\t\tnormal: '400',\n\t\tmedium: '500',\n\t\tsemibold: '600',\n\t\tbold: '700'\n\t},\n\tlineHeight: {\n\t\ttight: '1.25',\n\t\tnormal: '1.5',\n\t\trelaxed: '1.625'\n\t}\n}\n\n// Spacing tokens\nexport const spacing = {\n\t0: '0',\n\t1: '0.25rem', // 4px\n\t2: '0.5rem', // 8px\n\t3: '0.75rem', // 12px\n\t4: '1rem', // 16px\n\t5: '1.25rem', // 20px\n\t6: '1.5rem', // 24px\n\t8: '2rem', // 32px\n\t10: '2.5rem', // 40px\n\t12: '3rem', // 48px\n\t16: '4rem', // 64px\n\t20: '5rem', // 80px\n\t24: '6rem', // 96px\n\t32: '8rem' // 128px\n}\n\n// Border radius tokens\nexport const borderRadius = {\n\tnone: '0',\n\tsm: '0.125rem', // 2px\n\tbase: '0.25rem', // 4px\n\tmd: '0.375rem', // 6px\n\tlg: '0.5rem', // 8px\n\txl: '0.75rem', // 12px\n\t'2xl': '1rem', // 16px\n\tfull: '9999px'\n}\n\n// Shadow tokens\nexport const shadows = {\n\tsm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n\tbase: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n\tmd: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n\tlg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n\txl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n\tinner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)'\n}\n\n// Z-index tokens\nexport const zIndex = {\n\tdropdown: 1000,\n\tsticky: 1020,\n\tfixed: 1030,\n\tmodalBackdrop: 1040,\n\tmodal: 1050,\n\tpopover: 1060,\n\ttooltip: 1070,\n\ttoast: 1080\n}\n\n// Breakpoints for responsive design\nexport const breakpoints = {\n\tsm: '640px',\n\tmd: '768px',\n\tlg: '1024px',\n\txl: '1280px',\n\t'2xl': '1536px'\n}\n\n// Animation tokens\nexport const animation = {\n\tduration: {\n\t\tfast: '150ms',\n\t\tnormal: '300ms',\n\t\tslow: '500ms'\n\t},\n\teasing: {\n\t\tlinear: 'linear',\n\t\teaseIn: 'cubic-bezier(0.4, 0, 1, 1)',\n\t\teaseOut: 'cubic-bezier(0, 0, 0.2, 1)',\n\t\teaseInOut: 'cubic-bezier(0.4, 0, 0.2, 1)'\n\t}\n}\n\n// Chat specific design tokens\nexport const chat = {\n\t// Chat bubble dimensions\n\tbubbleSize: '60px',\n\n\t// Chat window dimensions\n\twindowWidth: '480px',\n\twindowHeight: '680px',\n\twindowMinWidth: '320px',\n\twindowMinHeight: '400px',\n\n\t// Message styling\n\tmessageMaxWidth: '80%',\n\tmessagePadding: spacing[3],\n\tmessageGap: spacing[2],\n\n\t// Avatar sizing\n\tavatarSize: '32px',\n\tavatarSizeSmall: '24px'\n}\n\n/**\n * Comprehensive theme object for React packages\n * Provides all design tokens in a structured format ideal for CSS-in-JS solutions\n */\nexport const theme = {\n\tcolors,\n\ttypography,\n\tspacing,\n\tborderRadius,\n\tshadows,\n\tzIndex,\n\tbreakpoints,\n\tanimation,\n\n\t// Convenience getters for common patterns\n\tget primaryColor() {\n\t\treturn this.colors.primary\n\t},\n\n\tget fontFamily() {\n\t\treturn this.typography.fontFamily.primary\n\t},\n\n\tget baseFontSize() {\n\t\treturn this.typography.fontSize.base\n\t},\n\n\tget borderRadiusBase() {\n\t\treturn this.borderRadius.base\n\t},\n\n\tget shadowBase() {\n\t\treturn this.shadows.base\n\t},\n\n\t// Helper methods for React styling\n\tspacingValue: value => spacing[value] || value,\n\tfontSize: size => typography.fontSize[size] || size,\n\tfontWeight: weight => typography.fontWeight[weight] || weight,\n\tcolor: colorName => colors[colorName] || colorName,\n\tshadow: shadowName => shadows[shadowName] || shadowName,\n\tradius: radiusName => borderRadius[radiusName] || radiusName,\n\n\t// Responsive breakpoint utilities for CSS-in-JS\n\tbreakpoint: {\n\t\tup: size => `@media (min-width: ${breakpoints[size]})`,\n\t\tdown: size => {\n\t\t\tconst breakpointValues = Object.values(breakpoints)\n\t\t\tconst breakpointKeys = Object.keys(breakpoints)\n\t\t\tconst index = breakpointKeys.indexOf(size)\n\t\t\tif (index > 0) {\n\t\t\t\tconst prevValue = parseInt(breakpointValues[index - 1]) - 1\n\t\t\t\treturn `@media (max-width: ${prevValue}px)`\n\t\t\t}\n\t\t\treturn '@media (max-width: 639px)'\n\t\t},\n\t\tonly: size => {\n\t\t\tconst breakpointValues = Object.values(breakpoints)\n\t\t\tconst breakpointKeys = Object.keys(breakpoints)\n\t\t\tconst index = breakpointKeys.indexOf(size)\n\t\t\tconst minWidth = breakpoints[size]\n\t\t\tif (index < breakpointKeys.length - 1) {\n\t\t\t\tconst maxValue = parseInt(breakpointValues[index + 1]) - 1\n\t\t\t\treturn `@media (min-width: ${minWidth}) and (max-width: ${maxValue}px)`\n\t\t\t}\n\t\t\treturn `@media (min-width: ${minWidth})`\n\t\t}\n\t}\n}\n","/**\n * AndyChat Configuration Management\n * Centralized configuration logic, validation, and embed ID detection\n */\n\n/**\n * Configuration constants and defaults\n */\nexport const CONFIG = {\n\t// Delay in milliseconds before showing the user info form\n\tFORM_DISPLAY_DELAY_MS: 1000,\n\n\t// Whether to persist session in localStorage\n\tPERSIST_SESSION: false,\n\n\t// Session storage key\n\tSESSION_STORAGE_KEY: 'andy-chat-session-id',\n\n\t// API configuration\n\tDEFAULT_API_BASE_URL: 'http://localhost:3000/api',\n\tPRODUCTION_API_BASE_URL: 'https://app.andypartner.com/api',\n\n\t// Embed ID detection methods (in order of priority)\n\tEMBED_ID_SOURCES: [\n\t\t'ANDY_CHATBOT_ID', // Global variable\n\t\t'data-andy-embed-id', // Script tag attribute\n\t\t'data-embed-id', // Alternative script tag attribute\n\t\t'andy-embed-id' // URL parameter or meta tag\n\t],\n\n\t// Default timeouts and limits\n\tAPI_TIMEOUT_MS: 10000,\n\tMAX_MESSAGE_LENGTH: 2000,\n\tMAX_RETRIES: 3,\n\tRETRY_DELAY_MS: 1000,\n\n\t// UI behavior defaults\n\tWELCOME_POPUP_DEFAULT_DELAY: 3000,\n\tTYPING_INDICATOR_DELAY: 500,\n\tMESSAGE_ANIMATION_DURATION: 300,\n\n\t// Environment detection\n\tENVIRONMENTS: {\n\t\tDEVELOPMENT: 'development',\n\t\tPRODUCTION: 'production'\n\t}\n}\n\nlet apiBaseUrlOverride = null\nlet warnedNonLocalHostUsingLocalApi = false\n\nconst isLocalhostLikeHostname = hostname => {\n\tif (!hostname) return false\n\treturn (\n\t\thostname === 'localhost' ||\n\t\thostname === '127.0.0.1' ||\n\t\thostname === '::1' ||\n\t\thostname === '0.0.0.0' ||\n\t\thostname.startsWith('192.168.')\n\t)\n}\n\nconst isLocalhostLikeUrl = url => {\n\tif (!url) return false\n\treturn /:\\/\\/(localhost|127\\.0\\.0\\.1|\\[::1\\]|0\\.0\\.0\\.0|192\\.168\\.)/i.test(url)\n}\n\nconst normalizeApiBaseUrlOrNull = url => {\n\tif (url == null) return null\n\tif (typeof url !== 'string') return null\n\tconst raw = url.trim()\n\tif (!raw) return null\n\n\t// Allow same-origin overrides like \"/api\".\n\tif (raw.startsWith('/')) return raw.replace(/\\/+$/, '')\n\n\tlet parsed\n\ttry {\n\t\tparsed = new URL(raw)\n\t} catch {\n\t\treturn null\n\t}\n\n\tif (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return null\n\n\t// Normalize trailing slash.\n\treturn raw.replace(/\\/+$/, '')\n}\n\nconst getApiUrlFromScriptTag = () => {\n\tif (typeof document === 'undefined') return null\n\n\tconst scripts = document.querySelectorAll('script')\n\tfor (const script of scripts) {\n\t\tconst src = script.src || ''\n\t\tif (!src.includes('andychat') && !src.includes('andy-chat') && !src.includes('bundle')) continue\n\n\t\tconst v = script.getAttribute('data-andy-api-url') || script.getAttribute('data-api-url')\n\t\tif (v && v.trim()) return v.trim()\n\t}\n\n\t// Fallback: check any script tag that has the attribute (covers renamed bundles).\n\tfor (const script of scripts) {\n\t\tconst v = script.getAttribute('data-andy-api-url') || script.getAttribute('data-api-url')\n\t\tif (v && v.trim()) return v.trim()\n\t}\n\n\treturn null\n}\n\nexport const setApiBaseUrl = url => {\n\tapiBaseUrlOverride = normalizeApiBaseUrlOrNull(url)\n}\n\n/**\n * Detects the current environment based on various indicators\n * @returns {string} The detected environment\n */\nexport const detectEnvironment = () => {\n\t// Explicit env wins. Only accept our known values.\n\tif (typeof window !== 'undefined' && window.ANDY_CHAT_ENV) {\n\t\tconst env = String(window.ANDY_CHAT_ENV).trim().toLowerCase()\n\t\tif (env === CONFIG.ENVIRONMENTS.DEVELOPMENT) return CONFIG.ENVIRONMENTS.DEVELOPMENT\n\t\tif (env === CONFIG.ENVIRONMENTS.PRODUCTION) return CONFIG.ENVIRONMENTS.PRODUCTION\n\t}\n\n\t// Hostname-based default.\n\tif (typeof window !== 'undefined' && window.location) {\n\t\tconst hostname = window.location.hostname || ''\n\t\tif (isLocalhostLikeHostname(hostname)) {\n\t\t\treturn CONFIG.ENVIRONMENTS.DEVELOPMENT\n\t\t}\n\t}\n\n\t// Default to production\n\treturn CONFIG.ENVIRONMENTS.PRODUCTION\n}\n\n/**\n * Gets the appropriate API base URL based on environment and configuration\n * @returns {string} The API base URL to use\n */\nexport const getApiBaseUrl = () => {\n\tif (apiBaseUrlOverride) return apiBaseUrlOverride\n\n\t// Check for explicit API URL override\n\tif (typeof window !== 'undefined' && window.ANDY_CHAT_API_URL) {\n\t\tconst normalized = normalizeApiBaseUrlOrNull(window.ANDY_CHAT_API_URL)\n\t\tif (normalized) return normalized\n\t}\n\n\t// Script tag override (for CDN embeds w/o global vars)\n\tconst scriptOverride = getApiUrlFromScriptTag()\n\tif (scriptOverride) {\n\t\tconst normalized = normalizeApiBaseUrlOrNull(scriptOverride)\n\t\tif (normalized) return normalized\n\t}\n\n\t// Use environment-specific defaults\n\tconst environment = detectEnvironment()\n\tconst baseUrl = environment === CONFIG.ENVIRONMENTS.DEVELOPMENT ? CONFIG.DEFAULT_API_BASE_URL : CONFIG.PRODUCTION_API_BASE_URL\n\n\t// Catch misconfig: non-local site trying to call local API.\n\tif (\n\t\t!warnedNonLocalHostUsingLocalApi &&\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.location &&\n\t\t!isLocalhostLikeHostname(window.location.hostname || '') &&\n\t\tisLocalhostLikeUrl(baseUrl)\n\t) {\n\t\twarnedNonLocalHostUsingLocalApi = true\n\t\tconsole.warn('AndyChat: resolved a localhost API URL on a non-local hostname. Set window.ANDY_CHAT_API_URL or data-andy-api-url to fix.')\n\t}\n\n\treturn baseUrl\n}\n\n/**\n * Extracts embed ID from script tag attributes\n * @param {HTMLScriptElement} scriptTag - The script tag to check\n * @returns {string|null} The embed ID if found\n */\nconst getEmbedIdFromScriptTag = scriptTag => {\n\tif (!scriptTag) return null\n\n\t// Check various attribute names\n\tconst attributes = ['data-andy-embed-id', 'data-embed-id', 'data-chatbot-id', 'andy-embed-id', 'embed-id']\n\n\tfor (const attr of attributes) {\n\t\tconst value = scriptTag.getAttribute(attr)\n\t\tif (value && value.trim()) {\n\t\t\treturn value.trim()\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Extracts embed ID from URL parameters\n * @returns {string|null} The embed ID if found in URL\n */\nconst getEmbedIdFromUrl = () => {\n\tif (typeof window === 'undefined' || !window.location) return null\n\n\tconst urlParams = new URLSearchParams(window.location.search)\n\tconst paramNames = ['andy-embed-id', 'embed-id', 'chatbot-id', 'andy_embed_id']\n\n\tfor (const param of paramNames) {\n\t\tconst value = urlParams.get(param)\n\t\tif (value && value.trim()) {\n\t\t\treturn value.trim()\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Extracts embed ID from meta tags\n * @returns {string|null} The embed ID if found in meta tags\n */\nconst getEmbedIdFromMetaTags = () => {\n\tif (typeof document === 'undefined') return null\n\n\tconst metaNames = ['andy:embed-id', 'andy-embed-id', 'chatbot-embed-id', 'andy:chatbot-id']\n\n\tfor (const name of metaNames) {\n\t\tconst meta = document.querySelector(`meta[name=\"${name}\"], meta[property=\"${name}\"]`)\n\t\tif (meta) {\n\t\t\tconst value = meta.getAttribute('content')\n\t\t\tif (value && value.trim()) {\n\t\t\t\treturn value.trim()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Comprehensive embed ID detection with multiple fallback methods\n * @returns {string|null} The detected embed ID or null if not found\n */\nexport const getEmbedId = () => {\n\t// Method 1: Check global variable (highest priority)\n\tif (typeof window !== 'undefined' && window.ANDY_CHATBOT_ID) {\n\t\tconst id = window.ANDY_CHATBOT_ID\n\t\tif (typeof id === 'string' && id.trim()) {\n\t\t\treturn id.trim()\n\t\t}\n\t}\n\n\t// Method 2: Check script tag attributes\n\tif (typeof document !== 'undefined') {\n\t\t// Find the AndyChat script tag\n\t\tconst scripts = document.querySelectorAll('script')\n\t\tfor (const script of scripts) {\n\t\t\t// Check if this is likely the AndyChat script\n\t\t\tconst src = script.src || ''\n\t\t\tif (src.includes('andychat') || src.includes('andy-chat')) {\n\t\t\t\tconst embedId = getEmbedIdFromScriptTag(script)\n\t\t\t\tif (embedId) return embedId\n\t\t\t}\n\t\t}\n\n\t\t// Check all script tags as fallback\n\t\tfor (const script of scripts) {\n\t\t\tconst embedId = getEmbedIdFromScriptTag(script)\n\t\t\tif (embedId) return embedId\n\t\t}\n\t}\n\n\t// Method 3: Check URL parameters\n\tconst urlEmbedId = getEmbedIdFromUrl()\n\tif (urlEmbedId) return urlEmbedId\n\n\t// Method 4: Check meta tags\n\tconst metaEmbedId = getEmbedIdFromMetaTags()\n\tif (metaEmbedId) return metaEmbedId\n\n\t// Method 5: Check for data attributes on body or html\n\tif (typeof document !== 'undefined') {\n\t\tconst body = document.body\n\t\tconst html = document.documentElement\n\n\t\tfor (const element of [body, html]) {\n\t\t\tif (element) {\n\t\t\t\tconst embedId = getEmbedIdFromScriptTag(element)\n\t\t\t\tif (embedId) return embedId\n\t\t\t}\n\t\t}\n\t}\n\n\tconsole.warn('AndyChat: No embed ID found. Please ensure ANDY_CHATBOT_ID is set or use data-andy-embed-id attribute.')\n\treturn null\n}\n\n/**\n * Validates an embed ID format\n * @param {string} embedId - The embed ID to validate\n * @returns {boolean} Whether the embed ID is valid\n */\nexport const isValidEmbedId = embedId => {\n\tif (!embedId || typeof embedId !== 'string') {\n\t\treturn false\n\t}\n\n\tconst trimmed = embedId.trim()\n\n\t// Check minimum length\n\tif (trimmed.length < 3) {\n\t\treturn false\n\t}\n\n\t// Check maximum length (reasonable limit)\n\tif (trimmed.length > 100) {\n\t\treturn false\n\t}\n\n\t// Check for valid characters (alphanumeric, hyphens, underscores)\n\tconst validPattern = /^[a-zA-Z0-9\\-_]+$/\n\tif (!validPattern.test(trimmed)) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n/**\n * Validates a chatbot configuration object\n * @param {Object} config - The configuration object to validate\n * @returns {Object} Validation result with isValid boolean and errors array\n */\nexport const validateChatbotConfig = config => {\n\tconst errors = []\n\n\tif (!config || typeof config !== 'object') {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\terrors: ['Configuration must be an object']\n\t\t}\n\t}\n\n\t// Validate required fields\n\tif (!config.name || typeof config.name !== 'string' || config.name.trim().length === 0) {\n\t\terrors.push('Configuration must have a valid name')\n\t}\n\n\t// Validate optional but important fields\n\tif (config.brandColor && typeof config.brandColor === 'string') {\n\t\tconst hexPattern = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/\n\t\tif (!hexPattern.test(config.brandColor)) {\n\t\t\terrors.push('Brand color must be a valid hex color (e.g., #3B82F6)')\n\t\t}\n\t}\n\n\tif (config.logoUrl && typeof config.logoUrl === 'string') {\n\t\ttry {\n\t\t\tnew URL(config.logoUrl)\n\t\t} catch {\n\t\t\terrors.push('Logo URL must be a valid URL')\n\t\t}\n\t}\n\n\tif (config.orientation && !['left', 'right'].includes(config.orientation)) {\n\t\terrors.push('Orientation must be either \"left\" or \"right\"')\n\t}\n\n\tif (config.faqs && !Array.isArray(config.faqs)) {\n\t\terrors.push('FAQs must be an array')\n\t} else if (config.faqs) {\n\t\tconfig.faqs.forEach((faq, index) => {\n\t\t\tif (!faq.question || !faq.answer) {\n\t\t\t\terrors.push(`FAQ item ${index + 1} must have both question and answer`)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Validate welcome popup configuration\n\tif (config.showWelcomePopup && typeof config.showWelcomePopup === 'object') {\n\t\tif (typeof config.showWelcomePopup.enabled !== 'boolean') {\n\t\t\terrors.push('Welcome popup \"enabled\" must be a boolean')\n\t\t}\n\t\tif (config.showWelcomePopup.seconds && typeof config.showWelcomePopup.seconds !== 'number') {\n\t\t\terrors.push('Welcome popup \"seconds\" must be a number')\n\t\t}\n\t}\n\n\t// Validate user info collection configuration\n\tif (config.collectUserInfo && typeof config.collectUserInfo === 'object') {\n\t\tif (typeof config.collectUserInfo.enabled !== 'boolean') {\n\t\t\terrors.push('User info collection \"enabled\" must be a boolean')\n\t\t}\n\t}\n\n\treturn {\n\t\tisValid: errors.length === 0,\n\t\terrors\n\t}\n}\n\n/**\n * Normalizes and sanitizes a chatbot configuration\n * @param {Object} config - The raw configuration object\n * @returns {Object} The normalized configuration\n */\nexport const normalizeConfig = config => {\n\tif (!config || typeof config !== 'object') {\n\t\treturn {}\n\t}\n\n\tconst normalized = { ...config }\n\n\t// Normalize strings\n\tif (normalized.name && typeof normalized.name === 'string') {\n\t\tnormalized.name = normalized.name.trim()\n\t}\n\n\tif (normalized.headline && typeof normalized.headline === 'string') {\n\t\tnormalized.headline = normalized.headline.trim()\n\t}\n\n\tif (normalized.description && typeof normalized.description === 'string') {\n\t\tnormalized.description = normalized.description.trim()\n\t}\n\n\tif (normalized.welcomeMessage && typeof normalized.welcomeMessage === 'string') {\n\t\tnormalized.welcomeMessage = normalized.welcomeMessage.trim()\n\t}\n\n\t// Normalize brand color\n\tif (normalized.brandColor && typeof normalized.brandColor === 'string') {\n\t\tnormalized.brandColor = normalized.brandColor.trim().toUpperCase()\n\t\t// Ensure it starts with #\n\t\tif (normalized.brandColor && !normalized.brandColor.startsWith('#')) {\n\t\t\tnormalized.brandColor = '#' + normalized.brandColor\n\t\t}\n\t}\n\n\t// Normalize orientation\n\tif (normalized.orientation && typeof normalized.orientation === 'string') {\n\t\tnormalized.orientation = normalized.orientation.toLowerCase()\n\t\tif (!['left', 'right'].includes(normalized.orientation)) {\n\t\t\tnormalized.orientation = 'right' // Default fallback\n\t\t}\n\t}\n\n\t// Normalize URLs\n\tif (normalized.logoUrl && typeof normalized.logoUrl === 'string') {\n\t\tnormalized.logoUrl = normalized.logoUrl.trim()\n\t}\n\n\treturn normalized\n}\n\n/**\n * Creates a configuration initialization function for packages\n * @param {string} packageName - Name of the package initializing\n * @returns {Object} Configuration initialization result\n */\nexport const initializeConfig = (packageName = 'unknown') => {\n\t// console.log(`AndyChat ${packageName}: Initializing configuration...`)\n\n\tconst embedId = getEmbedId()\n\n\tif (!embedId) {\n\t\tconsole.error(`AndyChat ${packageName}: No embed ID found`)\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: 'No embed ID found',\n\t\t\tembedId: null,\n\t\t\tenvironment: detectEnvironment(),\n\t\t\tapiBaseUrl: getApiBaseUrl()\n\t\t}\n\t}\n\n\tif (!isValidEmbedId(embedId)) {\n\t\tconsole.error(`AndyChat ${packageName}: Invalid embed ID format: ${embedId}`)\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: 'Invalid embed ID format',\n\t\t\tembedId,\n\t\t\tenvironment: detectEnvironment(),\n\t\t\tapiBaseUrl: getApiBaseUrl()\n\t\t}\n\t}\n\n\t// console.log(`AndyChat ${packageName}: Found valid embed ID: ${embedId}`)\n\n\treturn {\n\t\tsuccess: true,\n\t\tembedId,\n\t\tenvironment: detectEnvironment(),\n\t\tapiBaseUrl: getApiBaseUrl(),\n\t\tconfig: CONFIG\n\t}\n}\n","import { getApiBaseUrl } from './config.js'\n\n/** Stream a reply while the server restores this session's conversation history. */\nexport const sendMessageForWidget = async (embedId, sessionId, message, options = {}) => {\n\tconst response = await fetch(`${getApiBaseUrl()}/chat/stream`, {\n\t\tmethod: 'POST',\n\t\theaders: { 'Content-Type': 'application/json' },\n\t\tsignal: options.signal,\n\t\tbody: JSON.stringify({\n\t\t\tchatbotId: embedId,\n\t\t\tsessionId,\n\t\t\thistorySource: 'session',\n\t\t\tmessages: [{ role: 'user', parts: [{ type: 'text', text: message }] }]\n\t\t})\n\t})\n\treturn consumeWidgetReply(response, options)\n}\n\n/** Shared text-only UI stream decoder; no retry can occur after reading starts. */\nexport const consumeWidgetReply = async (response, options = {}) => {\n\tif (!response.ok || !response.headers.get('content-type')?.includes('text/event-stream')) {\n\t\tconst data = await response.json().catch(() => null)\n\t\tthrow new Error(data?.error || data?.message || 'Chat is temporarily unavailable.')\n\t}\n\tif (!response.body) throw new Error('Missing reply stream.')\n\n\tconst reader = response.body.getReader()\n\tconst decoder = new TextDecoder()\n\tlet buffer = ''\n\tlet eventData = []\n\tlet text = ''\n\tlet published = ''\n\tlet complete = false\n\tlet waiting = false\n\tconst event = () => {\n\t\tif (!eventData.length) return\n\t\tconst data = eventData.join('\\n')\n\t\teventData = []\n\t\tif (data === '[DONE]') { complete = true; return }\n\t\tconst part = JSON.parse(data)\n\t\tif (part.type === 'error' || part.type === 'abort') {\n\t\t\tthrow new Error(part.errorText || 'Reply interrupted.')\n\t\t}\n\t\tif (part.type === 'data-handoff' && part.data?.status === 'waiting') {\n\t\t\twaiting = true\n\t\t\treturn\n\t\t}\n\t\tif (part.type === 'text-start' && text && !text.endsWith('\\n')) text += '\\n'\n\t\tif (part.type === 'text-delta') {\n\t\t\tif (typeof part.delta !== 'string') throw new Error('Invalid reply text.')\n\t\t\ttext += part.delta\n\t\t}\n\t}\n\tconst line = value => {\n\t\tconst cleaned = value.endsWith('\\r') ? value.slice(0, -1) : value\n\t\tif (!cleaned) event()\n\t\telse if (cleaned.startsWith('data:')) eventData.push(cleaned.slice(5).replace(/^ /, ''))\n\t}\n\ttry {\n\t\twhile (!complete) {\n\t\t\toptions.signal?.throwIfAborted()\n\t\t\tconst { value, done } = await reader.read()\n\t\t\tbuffer += decoder.decode(value, { stream: !done })\n\t\t\tlet newline\n\t\t\twhile ((newline = buffer.indexOf('\\n')) !== -1) {\n\t\t\t\tline(buffer.slice(0, newline))\n\t\t\t\tbuffer = buffer.slice(newline + 1)\n\t\t\t\tif (complete) break\n\t\t\t}\n\t\t\t// Publish once per received chunk, including the first useful text.\n\t\t\tif (!waiting && text.trim() && text !== published) {\n\t\t\t\tpublished = text\n\t\t\t\toptions.onText?.(text)\n\t\t\t}\n\t\t\tif (done) break\n\t\t}\n\t\tif (!complete) throw new Error('Reply stream ended before completion.')\n\t\tif (waiting) return { status: 'waiting' }\n\t\tif (!text.trim()) throw new Error('The reply was empty.')\n\t\treturn { status: 'agent', text }\n\t} finally {\n\t\tawait reader.cancel().catch(() => {})\n\t\treader.releaseLock()\n\t}\n}\n","/**\n * AndyChat API client\n * Handles all communication with the AndyChat backend API\n */\n\nimport { getApiBaseUrl, isValidEmbedId } from './config.js'\nimport { sendMessageForWidget } from './stream-message.js'\nexport { sendMessageForWidget } from './stream-message.js'\n\n// Default configuration for the chatbot.\n// This serves as the base structure and default values.\nexport const DEFAULT_CHATBOT_CONFIG = {\n\tid: null,\n\tname: 'AndyChat',\n\ttheme: 'light',\n\tlogoUrl: '',\n\theadline: 'Chat with our AI',\n\tbrandColor: '#3B82F6',\n\tdescription: 'Ask any question and our AI will answer!',\n\torientation: 'right',\n\tbubbleStyle: 'icon', // 'icon' = circle only, 'pill' = with label\n\tbubbleLabel: null, // Custom label text (null = use default based on defaultLang)\n\tuseBrandColor: true, // Whether to apply brand color to bubble/messages (default: true)\n\tdefaultLang: 'en', // Default language for the chatbot\n\tshowBranding: true, // Whether to show \"Powered by Andy\" footer (default: true)\n\tshowWelcomePopup: {\n\t\tenabled: false,\n\t\tseconds: 3,\n\t\tmessage: 'Welcome! How can I help you today?' // Default welcome popup message\n\t},\n\tcollectUserInfo: {\n\t\tenabled: false,\n\t\tmessage: \"Let's get your name and email so we can follow up with you later.\"\n\t},\n\twelcomeMessage: 'Hi there! I am the AI Assistant. How can I help you today?',\n\tpredefinedQuestions: [],\n\tfaqs: []\n}\n\n/**\n * Get default bubble label based on language\n * @param {string} lang - Language code ('en' or 'es')\n * @returns {string} Default bubble label\n */\nexport const getDefaultBubbleLabel = lang => {\n\treturn lang === 'es' ? 'Pregunta IA' : 'Ask AI'\n}\n\n/**\n * @typedef {Object} FAQItem\n * @property {string} question - The FAQ question\n * @property {string} answer - The answer to the FAQ question\n */\n\n/**\n * @typedef {Object} ChatbotConfigWelcomePopup\n * @property {boolean} enabled - Whether the welcome popup is enabled.\n * @property {number} seconds - Delay in seconds before showing the popup.\n * @property {string} [message] - Custom message for the welcome popup.\n */\n\n/**\n * @typedef {Object} ChatbotConfigCollectUserInfo\n * @property {boolean} enabled - Whether user info collection is enabled.\n * @property {string} [message] - Custom message for the user info collection prompt.\n */\n\n/**\n * @typedef {Object} ChatbotConfig\n * @property {string | null} id - The chatbot ID from the server.\n * @property {string} name - The name of the chatbot or organization.\n * @property {string} theme - UI theme (e.g., 'light', 'dark').\n * @property {string} logoUrl - URL for the chatbot logo.\n * @property {string} headline - Headline text for the chatbot.\n * @property {string} brandColor - Theme color in hex format.\n * @property {string} description - Description or subtitle for the chatbot.\n * @property {string} orientation - Chat widget orientation (e.g., 'right', 'left').\n * @property {boolean} showBranding - Whether to show \"Powered by Andy\" footer.\n * @property {ChatbotConfigWelcomePopup} showWelcomePopup - Settings for the welcome popup.\n * @property {ChatbotConfigCollectUserInfo} collectUserInfo - Settings for user info collection.\n * @property {string} welcomeMessage - The main welcome message text for the chat window.\n * @property {Array<{order: number, question: string}>} predefinedQuestions - Array of predefined questions.\n * @property {FAQItem[]} faqs - Array of mapped FAQ items.\n */\n\n/**\n * @typedef {Object} MessageResponse\n * @property {string} id - Unique message ID\n * @property {string} text - The bot's response text\n * @property {string} type - Message type (usually \"text\")\n * @property {string} createdAt - Timestamp of when the message was created\n */\n\n/**\n * Maps raw API data to the internal ChatbotConfig structure.\n * This function centralizes the logic for interpreting API responses and applying defaults.\n * @param {object} apiData - The raw data object from the API response.\n * @param {ChatbotConfig} defaultConfig - The default configuration object.\n * @returns {ChatbotConfig} The fully processed chatbot configuration.\n * @private\n */\nconst _mapApiDataToChatbotConfig = (apiData, defaultConfig) => {\n\tif (\n\t\t!apiData ||\n\t\ttypeof apiData !== 'object' ||\n\t\tArray.isArray(apiData) ||\n\t\t!apiData.chatbot ||\n\t\ttypeof apiData.chatbot !== 'object' ||\n\t\tArray.isArray(apiData.chatbot) ||\n\t\t!isValidEmbedId(apiData.chatbot.id)\n\t) {\n\t\tthrow new Error('Invalid chatbot configuration response.')\n\t}\n\n\tconst { chatbot, faqs: rawFaqs, bootstrap } = apiData\n\tconst appearance = chatbot.appearance || {}\n\tconst behavior = chatbot.behavior || {}\n\n\t// Start with a clone of the default config\n\tconst config = { ...defaultConfig }\n\n\t// Override with server values, using nullish coalescing for safety\n\tconfig.id = chatbot.id ?? defaultConfig.id\n\tconfig.name = chatbot.name ?? defaultConfig.name\n\tconfig.defaultLang = chatbot.defaultLang ?? defaultConfig.defaultLang\n\tconfig.theme = appearance.theme ?? defaultConfig.theme\n\tconfig.logoUrl = appearance.logoUrl ?? defaultConfig.logoUrl\n\tconfig.headline = appearance.headline ?? defaultConfig.headline\n\tconfig.brandColor = appearance.brandColor ?? defaultConfig.brandColor\n\tconfig.description = appearance.description ?? defaultConfig.description\n\tconfig.orientation = appearance.orientation ?? defaultConfig.orientation\n\tconfig.welcomeMessage = appearance.welcomeMessage ?? defaultConfig.welcomeMessage\n\tconfig.bubbleStyle = appearance.bubbleStyle ?? defaultConfig.bubbleStyle\n\tconfig.bubbleLabel = appearance.bubbleLabel ?? defaultConfig.bubbleLabel\n\tconfig.useBrandColor = appearance.useBrandColor ?? defaultConfig.useBrandColor\n\tconfig.showBranding = chatbot.showBranding ?? defaultConfig.showBranding\n\n\t// Handle showWelcomePopup (expected to be an object from API)\n\tif (typeof behavior.showWelcomePopup === 'object' && behavior.showWelcomePopup !== null) {\n\t\tconfig.showWelcomePopup = {\n\t\t\t...defaultConfig.showWelcomePopup, // Start with defaults\n\t\t\t...behavior.showWelcomePopup // Spread API object, overriding defaults\n\t\t}\n\t} else {\n\t\t// If not a valid object, use the default object entirely\n\t\tconfig.showWelcomePopup = { ...defaultConfig.showWelcomePopup }\n\t}\n\t// Ensure 'message' field for popup has a default if not provided by API and popup is enabled\n\tif (config.showWelcomePopup.enabled && typeof config.showWelcomePopup.message === 'undefined') {\n\t\tconfig.showWelcomePopup.message = defaultConfig.showWelcomePopup.message\n\t}\n\n\t// The public Widget has no durable visitor-information submission contract yet.\n\t// Keep collection disabled instead of presenting a form whose data cannot be persisted.\n\tconfig.collectUserInfo = {\n\t\tenabled: false,\n\t\tmessage: behavior.collectUserInfo?.message ?? defaultConfig.collectUserInfo.message\n\t}\n\n\t// Process predefinedQuestions\n\tconfig.predefinedQuestions = [] // Initialize/reset array\n\tif (behavior.predefinedQuestions && Array.isArray(behavior.predefinedQuestions)) {\n\t\tconfig.predefinedQuestions = behavior.predefinedQuestions\n\t\t\t.filter(q => q && typeof q.question === 'string') // Ensure valid questions\n\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0)) // Sort by order\n\t}\n\n\t// Process and map FAQs\n\tconfig.faqs = [] // Initialize/reset faqs array from default\n\tif (rawFaqs && Array.isArray(rawFaqs)) {\n\t\tconfig.faqs = rawFaqs\n\t\t\t.map(faq => ({\n\t\t\t\tquestion: faq.question ?? faq.title,\n\t\t\t\tanswer: faq.answer ?? faq.content\n\t\t\t}))\n\t\t\t.filter(\n\t\t\t\tfaq =>\n\t\t\t\t\ttypeof faq.question === 'string' &&\n\t\t\t\t\tfaq.question.trim().length > 0 &&\n\t\t\t\t\ttypeof faq.answer === 'string' &&\n\t\t\t\t\tfaq.answer.trim().length > 0\n\t\t\t)\n\t\t\t.map(faq => ({ question: faq.question.trim(), answer: faq.answer.trim() }))\n\t}\n\tconfig.bootstrap = bootstrap\n\n\treturn config\n}\n\n/**\n * Fetches chatbot configuration from the API\n * @param {string} embedId - The chatbot embed ID\n * @returns {Promise<ChatbotConfig>} The chatbot configuration\n */\nexport const fetchChatbotConfig = async embedId => {\n\ttry {\n\t\tconst apiBaseUrl = getApiBaseUrl()\n\t\tconst response = await fetch(`${apiBaseUrl}/chatbot/${embedId}`)\n\t\tif (!response.ok) {\n\t\t\t// If response is not OK, but we get JSON, try to parse it for an error message\n\t\t\tlet apiErrorMsg = `Failed to load chatbot config: ${response.status}`\n\t\t\ttry {\n\t\t\t\tconst errorData = await response.json()\n\t\t\t\tif (errorData && errorData.error) {\n\t\t\t\t\tapiErrorMsg = errorData.error\n\t\t\t\t} else if (errorData && errorData.message) {\n\t\t\t\t\tapiErrorMsg = errorData.message\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore if parsing errorData fails, use original status-based message\n\t\t\t}\n\t\t\tthrow new Error(apiErrorMsg)\n\t\t}\n\t\tconst apiData = await response.json()\n\t\t// console.log('API data22:', apiData)\n\n\t\t// Use the mapper to process the API data and apply defaults\n\t\tconst config = _mapApiDataToChatbotConfig(apiData, DEFAULT_CHATBOT_CONFIG)\n\n\t\t// console.log('Chatbot config:', config)\n\t\treturn config\n\t} catch (error) {\n\t\tconsole.error('AndyChat: Failed to load configuration.')\n\t\tthrow error\n\t}\n}\n\n// Both public clients share the streamed response contract.\nexport const sendMessage = async (embedId, sessionId, message) => {\n\tconst result = await sendMessageForWidget(embedId, sessionId, message)\n\treturn result.status === 'agent' ? result.text : ''\n}\n\n/**\n * Visitor information collection is disabled until Andy exposes a durable public submission\n * contract. This explicit failure prevents a Widget from reporting a mocked success.\n * @param {string} embedId - The chatbot embed ID.\n * @param {string} sessionId - The current session ID.\n * @param {object} userInfo - User information.\n * @param {string} userInfo.name - User's name.\n * @param {string} userInfo.email - User's email.\n * @returns {Promise<never>}\n */\nexport const submitUserInfo = async (embedId, sessionId, userInfo) => {\n\tvoid embedId\n\tvoid sessionId\n\tvoid userInfo\n\tthrow new Error('Visitor information collection is not supported by this Widget release.')\n}\n","/**\n * AndyChat utility functions\n * Common utility functions used across the AndyChat system\n */\n\n/**\n * Generate a unique session ID\n * @returns {string} A unique session ID\n */\nexport const generateSessionId = () => {\n\tif (crypto && crypto.randomUUID) {\n\t\treturn crypto.randomUUID()\n\t} else {\n\t\t// Fallback for environments without crypto.randomUUID\n\t\treturn `andy-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`\n\t}\n}\n\nconst HTML_ESCAPES = { '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' }\n\n/**\n * Escape a value for HTML element content and quoted attribute values.\n * Use it on every value interpolated into an `innerHTML` template; it\n * stringifies exactly as `${value}` would.\n * @param {unknown} value - The value to escape\n * @returns {string} The escaped text\n */\nexport const escapeHtml = value => String(value).replace(/[&<>\"']/g, character => HTML_ESCAPES[character])\n\n/**\n * Sanitize URL to prevent XSS attacks\n * @param {string} url - The URL to sanitize\n * @returns {string} The sanitized URL\n */\nexport const sanitizeUrl = url => {\n\tif (!url) return '#'\n\n\t// Remove any potential javascript: or data: schemes\n\tconst trimmedUrl = url.trim()\n\tconst lowerUrl = trimmedUrl.toLowerCase()\n\n\t// Allow http, https, mailto, and tel protocols\n\tif (\n\t\tlowerUrl.startsWith('http://') ||\n\t\tlowerUrl.startsWith('https://') ||\n\t\tlowerUrl.startsWith('mailto:') ||\n\t\tlowerUrl.startsWith('tel:')\n\t) {\n\t\treturn trimmedUrl\n\t}\n\n\t// Root-relative paths stay on the host site. `//`, `/\\` and the tabs or\n\t// newlines browsers strip from URLs could turn one into another host.\n\tif (/^\\/(?![/\\\\])[^\\t\\n\\r]*$/.test(trimmedUrl)) {\n\t\treturn trimmedUrl\n\t}\n\n\t// If no protocol specified, assume https for regular URLs\n\tif (!lowerUrl.includes(':') && !lowerUrl.startsWith('//')) {\n\t\treturn 'https://' + trimmedUrl\n\t}\n\n\t// For any other protocol, return a safe fallback\n\treturn '#'\n}\n\n/**\n * Parse markdown text to HTML. The text is escaped first, so any HTML in it\n * renders as text and the result is safe for `innerHTML`.\n * @param {string} text - The markdown text to parse\n * @returns {string} The parsed HTML\n */\nexport const parseMarkdown = text => {\n\tif (!text) return ''\n\n\tlet html = escapeHtml(text)\n\n\t// Handle links first (before bold/italic to avoid conflicts)\n\t// Match [text](url) format. Both parts are already escaped, so a quote\n\t// cannot leave the href attribute.\n\thtml = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, linkText, url) => {\n\t\tconst sanitizedUrl = sanitizeUrl(url)\n\t\tconst isExternal = sanitizedUrl.startsWith('http://') || sanitizedUrl.startsWith('https://')\n\t\tconst targetAttr = isExternal ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : ''\n\t\treturn `<a href=\"${sanitizedUrl}\" class=\"andy-message-link\"${targetAttr}>${linkText}</a>`\n\t})\n\n\t// Handle bold text (**text** or __text__)\n\thtml = html.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>')\n\thtml = html.replace(/__(.*?)__/g, '<strong>$1</strong>')\n\n\t// Handle italic text (*text* or _text_) - be careful not to match list asterisks\n\thtml = html.replace(/\\*([^*\\n]+)\\*/g, '<em>$1</em>')\n\thtml = html.replace(/_([^_\\n]+)_/g, '<em>$1</em>')\n\n\t// Split into sections by double newlines for paragraphs\n\tconst sections = html.split('\\n\\n')\n\tconst processedSections = []\n\n\tfor (let section of sections) {\n\t\tsection = section.trim()\n\t\tif (!section) continue\n\n\t\tconst lines = section.split('\\n')\n\t\tlet inList = false\n\t\tlet listType = null\n\t\tlet listItems = []\n\t\tlet paragraphLines = []\n\n\t\tfor (let line of lines) {\n\t\t\tline = line.trim()\n\n\t\t\t// Check if it's a heading (# ## ### #### ##### ######)\n\t\t\tif (/^#{1,6}\\s+/.test(line)) {\n\t\t\t\t// If we were in a list or paragraph, close it\n\t\t\t\tif (paragraphLines.length > 0) {\n\t\t\t\t\tprocessedSections.push('<p>' + paragraphLines.join('<br>') + '</p>')\n\t\t\t\t\tparagraphLines = []\n\t\t\t\t}\n\t\t\t\tif (inList) {\n\t\t\t\t\tif (listType === 'ol') {\n\t\t\t\t\t\tprocessedSections.push(`<ol>${listItems.join('')}</ol>`)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprocessedSections.push(`<ul>${listItems.join('')}</ul>`)\n\t\t\t\t\t}\n\t\t\t\t\tinList = false\n\t\t\t\t\tlistType = null\n\t\t\t\t\tlistItems = []\n\t\t\t\t}\n\n\t\t\t\t// Determine heading level and extract content\n\t\t\t\tconst match = line.match(/^(#{1,6})\\s+(.+)$/)\n\t\t\t\tif (match) {\n\t\t\t\t\tconst level = match[1].length // Number of # characters\n\t\t\t\t\tconst content = match[2].trim()\n\t\t\t\t\tprocessedSections.push(`<h${level}>${content}</h${level}>`)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check if it's a numbered list item\n\t\t\telse if (/^\\d+\\.\\s+/.test(line)) {\n\t\t\t\t// If we were in a different list type or paragraph, close it\n\t\t\t\tif (paragraphLines.length > 0) {\n\t\t\t\t\tprocessedSections.push('<p>' + paragraphLines.join('<br>') + '</p>')\n\t\t\t\t\tparagraphLines = []\n\t\t\t\t}\n\t\t\t\tif (inList && listType !== 'ol') {\n\t\t\t\t\tprocessedSections.push(`<ul>${listItems.join('')}</ul>`)\n\t\t\t\t\tlistItems = []\n\t\t\t\t}\n\n\t\t\t\tinList = true\n\t\t\t\tlistType = 'ol'\n\t\t\t\tconst content = line.replace(/^\\d+\\.\\s+/, '')\n\t\t\t\tlistItems.push(`<li>${content}</li>`)\n\t\t\t}\n\t\t\t// Check if it's a bullet point\n\t\t\telse if (/^\\*\\s+/.test(line)) {\n\t\t\t\t// If we were in a different list type or paragraph, close it\n\t\t\t\tif (paragraphLines.length > 0) {\n\t\t\t\t\tprocessedSections.push('<p>' + paragraphLines.join('<br>') + '</p>')\n\t\t\t\t\tparagraphLines = []\n\t\t\t\t}\n\t\t\t\tif (inList && listType !== 'ul') {\n\t\t\t\t\tprocessedSections.push(`<ol>${listItems.join('')}</ol>`)\n\t\t\t\t\tlistItems = []\n\t\t\t\t}\n\n\t\t\t\tinList = true\n\t\t\t\tlistType = 'ul'\n\t\t\t\tconst content = line.replace(/^\\*\\s+/, '')\n\t\t\t\tlistItems.push(`<li>${content}</li>`)\n\t\t\t}\n\t\t\t// Regular paragraph line\n\t\t\telse {\n\t\t\t\t// If we were in a list, close it\n\t\t\t\tif (inList) {\n\t\t\t\t\tif (listType === 'ol') {\n\t\t\t\t\t\tprocessedSections.push(`<ol>${listItems.join('')}</ol>`)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprocessedSections.push(`<ul>${listItems.join('')}</ul>`)\n\t\t\t\t\t}\n\t\t\t\t\tinList = false\n\t\t\t\t\tlistType = null\n\t\t\t\t\tlistItems = []\n\t\t\t\t}\n\n\t\t\t\tif (line) {\n\t\t\t\t\tparagraphLines.push(line)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Close any remaining open elements\n\t\tif (inList) {\n\t\t\tif (listType === 'ol') {\n\t\t\t\tprocessedSections.push(`<ol>${listItems.join('')}</ol>`)\n\t\t\t} else {\n\t\t\t\tprocessedSections.push(`<ul>${listItems.join('')}</ul>`)\n\t\t\t}\n\t\t} else if (paragraphLines.length > 0) {\n\t\t\tprocessedSections.push('<p>' + paragraphLines.join('<br>') + '</p>')\n\t\t}\n\t}\n\n\treturn processedSections.join('')\n}\n\n/**\n * Create greeting message from config\n * @param {Object} config - The chatbot configuration\n * @returns {string|null} The greeting message or null if no config\n */\nexport const createGreetingMessage = config => {\n\tif (!config) return null\n\n\t// Prioritize using config.welcomeMessage if it is a non-empty string\n\tif (typeof config.welcomeMessage === 'string' && config.welcomeMessage.trim() !== '') {\n\t\treturn config.welcomeMessage\n\t}\n\n\t// Fallback to name-based message if config.name exists and welcomeMessage wasn't a usable string\n\t// This also covers the case where config.welcomeMessage might be boolean `true`\n\t// and we want to show a default greeting based on name.\n\tif (config.name) {\n\t\treturn `Hi there 👋\\nI'm the AI Assistant created by ${config.name}!\\n\\nIs there anything I can help you with?`\n\t}\n\n\treturn null // Return null if no suitable message can be generated\n}\n","/**\n * AndyChat styles helper functions\n * Utilities for generating complete stylesheets from the new CSS architecture\n * Implements the new CSS file structure from packages/core/src/styles/\n */\n\n/**\n * Calculates the relative luminance of a hex color\n * @param {string} hexColor - Hex color string (e.g., '#FFFFFF' or '#FFF')\n * @returns {number} Relative luminance value between 0 and 1\n */\nconst getLuminance = (hexColor) => {\n\t// Remove # if present\n\tconst hex = hexColor.replace('#', '')\n\n\t// Handle both 3-digit and 6-digit hex\n\tconst fullHex = hex.length === 3\n\t\t? hex.split('').map(c => c + c).join('')\n\t\t: hex\n\n\tconst r = parseInt(fullHex.slice(0, 2), 16) / 255\n\tconst g = parseInt(fullHex.slice(2, 4), 16) / 255\n\tconst b = parseInt(fullHex.slice(4, 6), 16) / 255\n\n\t// Apply gamma correction\n\tconst [rLin, gLin, bLin] = [r, g, b].map(c =>\n\t\tc <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)\n\t)\n\n\t// Calculate luminance using WCAG formula\n\treturn 0.2126 * rLin + 0.7152 * gLin + 0.0722 * bLin\n}\n\n/**\n * Determines if a color is light (needs dark text) or dark (needs light text)\n * @param {string} hexColor - Hex color string\n * @returns {boolean} True if the color is light\n */\nexport const isLightColor = (hexColor) => {\n\treturn getLuminance(hexColor) > 0.5\n}\n\n/**\n * Gets the appropriate contrast text color for a given background\n * @param {string} bgColor - Background hex color\n * @returns {string} Either '#000000' for light backgrounds or '#FFFFFF' for dark backgrounds\n */\nexport const getContrastTextColor = (bgColor) => {\n\treturn isLightColor(bgColor) ? '#000000' : '#FFFFFF'\n}\n\n/**\n * Generates CSS variables string from _variables.css\n * @returns {string} CSS variables content\n */\nexport const generateDesignTokenVariablesString = () => {\n\t// For now, using the content we created in _variables.css\n\t// In a production build process, this would read the file directly\n\treturn `\n/* AndyChat Design Tokens as CSS Custom Properties */\n:host {\n\t/* === COLOR TOKENS === */\n\n\t/* Primary brand colors */\n\t--andy-color-primary: #3b82f6;\n\t--andy-color-primary-hover: #2563eb;\n\t--andy-color-primary-light: #ebf4ff;\n\n\t/* Basic colors */\n\t--andy-color-white: #ffffff;\n\t--andy-color-black: #000000;\n\n\t/* Neutral grays */\n\t--andy-color-gray-100: #f7fafc;\n\t--andy-color-gray-200: #edf2f7;\n\t--andy-color-gray-300: #e2e8f0;\n\t--andy-color-gray-400: #cbd5e0;\n\t--andy-color-gray-500: #a0adb8;\n\t--andy-color-gray-600: #718096;\n\t--andy-color-gray-700: #4a5568;\n\t--andy-color-gray-800: #2d3748;\n\t--andy-color-gray-900: #1a202c;\n\n\t/* Semantic colors */\n\t--andy-color-success: #48bb78;\n\t--andy-color-warning: #ed8936;\n\t--andy-color-error: #f56565;\n\t--andy-color-error-light: #fed7d7;\n\t--andy-color-info: #4299e1;\n\n\t/* UI semantic colors */\n\t--andy-color-background: #f9fafc;\n\t--andy-color-text: #2d3748;\n\t--andy-color-text-secondary: #4a5568;\n\t--andy-color-text-muted: #718096;\n\t--andy-color-border: #e2e8f0;\n\t--andy-color-hover: #f7fafc;\n\n\t/* Input specific colors */\n\t--andy-color-input-background: #f5f5f5;\n\t--andy-color-input-button: #f0f0f0;\n\t--andy-color-input-button-hover: #e0e0e0;\n\n\t/* Chat specific colors */\n\t--andy-color-user-message: #3b82f6;\n\t--andy-color-bot-message: #f5f5f5;\n\t--andy-color-user-message-text: #ffffff;\n\t--andy-color-bot-message-text: #2d3748;\n\n\t/* Dark theme colors */\n\t--andy-color-background-dark: #1a1a1a;\n\t--andy-color-background-secondary-dark: #2c2c2c;\n\t--andy-color-background-tertiary-dark: #383838;\n\t--andy-color-text-dark: #e0e0e0;\n\t--andy-color-text-muted-dark: #a0a0a0;\n\t--andy-color-border-dark: #444444;\n\t--andy-color-hover-dark: #4a4a4a;\n\n\t/* === TYPOGRAPHY TOKENS === */\n\t--andy-font-family-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n\t--andy-font-family-mono: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n\t--andy-font-size-xs: 0.75rem;\n\t--andy-font-size-sm: 0.875rem;\n\t--andy-font-size-base: 1rem;\n\t--andy-font-size-lg: 1.125rem;\n\t--andy-font-size-xl: 1.25rem;\n\t--andy-font-size-2xl: 1.5rem;\n\t--andy-font-size-3xl: 1.875rem;\n\t--andy-font-weight-normal: 400;\n\t--andy-font-weight-medium: 500;\n\t--andy-font-weight-semibold: 600;\n\t--andy-font-weight-bold: 700;\n\t--andy-line-height-tight: 1.25;\n\t--andy-line-height-normal: 1.4;\n\t--andy-line-height-relaxed: 1.625;\n\n\t/* === SPACING TOKENS === */\n\t--andy-spacing-0: 0;\n\t--andy-spacing-1: 0.25rem;\n\t--andy-spacing-2: 0.5rem;\n\t--andy-spacing-3: 0.75rem;\n\t--andy-spacing-4: 1rem;\n\t--andy-spacing-5: 1.25rem;\n\t--andy-spacing-6: 1.5rem;\n\t--andy-spacing-8: 2rem;\n\t--andy-spacing-10: 2.5rem;\n\t--andy-spacing-12: 3rem;\n\t--andy-spacing-16: 4rem;\n\t--andy-spacing-20: 5rem;\n\t--andy-spacing-24: 6rem;\n\t--andy-spacing-32: 8rem;\n\n\t/* === BORDER RADIUS TOKENS === */\n\t--andy-radius-none: 0;\n\t--andy-radius-sm: 0.125rem;\n\t--andy-radius-base: 0.25rem;\n\t--andy-radius-md: 0.375rem;\n\t--andy-radius-lg: 0.5rem;\n\t--andy-radius-xl: 1rem;\n\t--andy-radius-2xl: 1rem;\n\t--andy-radius-full: 9999px;\n\n\t/* === SHADOW TOKENS === */\n\t--andy-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n\t--andy-shadow-base: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n\t--andy-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n\t--andy-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n\t--andy-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n\t--andy-shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);\n\n\t/* === Z-INDEX TOKENS === */\n\t--andy-z-dropdown: 1000;\n\t--andy-z-sticky: 1020;\n\t--andy-z-fixed: 1030;\n\t--andy-z-modal-backdrop: 1040;\n\t--andy-z-modal: 1050;\n\t--andy-z-popover: 1060;\n\t--andy-z-tooltip: 1070;\n\t--andy-z-toast: 1080;\n\n\t/* === BREAKPOINT TOKENS === */\n\t--andy-breakpoint-sm: 640px;\n\t--andy-breakpoint-md: 768px;\n\t--andy-breakpoint-lg: 1024px;\n\t--andy-breakpoint-xl: 1280px;\n\t--andy-breakpoint-2xl: 1536px;\n\n\t/* === ANIMATION TOKENS === */\n\t--andy-duration-fast: 150ms;\n\t--andy-duration-normal: 300ms;\n\t--andy-duration-slow: 500ms;\n\t--andy-easing-linear: linear;\n\t--andy-easing-ease-in: cubic-bezier(0.4, 0, 1, 1);\n\t--andy-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);\n\t--andy-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n\t/* === CHAT SPECIFIC TOKENS === */\n\t--andy-chat-bubble-size: 50px;\n\t--andy-chat-window-width: 400px;\n\t--andy-chat-window-height: min(664px, 100% - 104px);\n\t--andy-chat-window-min-width: 320px;\n\t--andy-chat-window-min-height: 400px;\n\t--andy-chat-message-max-width: 80%;\n\t--andy-chat-message-padding: var(--andy-spacing-2);\n\t--andy-chat-message-gap: var(--andy-spacing-3);\n\t--andy-chat-avatar-size: 32px;\n\t--andy-chat-avatar-size-small: 24px;\n\n\t/* === THEMABLE VARIABLES (Default Light Theme) === */\n\t--andy-themable-background: var(--andy-color-background);\n\t--andy-themable-background-secondary: var(--andy-color-white);\n\t--andy-themable-background-tertiary: var(--andy-color-gray-100);\n\t--andy-themable-text: var(--andy-color-text);\n\t--andy-themable-text-secondary: var(--andy-color-text-secondary);\n\t--andy-themable-text-muted: var(--andy-color-text-muted);\n\t--andy-themable-border: var(--andy-color-border);\n\t--andy-themable-hover: var(--andy-color-hover);\n\t--andy-themable-shadow: rgba(0, 0, 0, 0.1);\n\t--andy-themable-shadow-light: rgba(0, 0, 0, 0.08);\n\t--andy-themable-button-primary-bg: var(--andy-color-primary);\n\t--andy-themable-button-primary-text: var(--andy-color-white);\n\t--andy-themable-button-primary-hover: var(--andy-color-primary-hover);\n\t--andy-themable-button-secondary-bg: var(--andy-color-gray-200);\n\t--andy-themable-button-secondary-text: var(--andy-color-text);\n\t--andy-themable-button-secondary-hover: var(--andy-color-gray-300);\n\t--andy-themable-input-bg: var(--andy-color-input-background);\n\t--andy-themable-input-border: var(--andy-color-border);\n\t--andy-themable-input-text: var(--andy-color-text);\n\t--andy-themable-input-placeholder: var(--andy-color-text-muted);\n\t--andy-themable-message-user-bg: var(--andy-color-user-message);\n\t--andy-themable-message-user-text: var(--andy-color-user-message-text);\n\t--andy-themable-message-bot-bg: var(--andy-color-bot-message);\n\t--andy-themable-message-bot-text: var(--andy-color-bot-message-text);\n\t--andy-themable-message-bot-border: transparent;\n\t--andy-themable-avatar-bg: var(--andy-color-primary);\n\t--andy-themable-avatar-text: var(--andy-color-white);\n\t--andy-themable-tooltip-bg: var(--andy-color-gray-800);\n\t--andy-themable-tooltip-text: var(--andy-color-white);\n}\n`\n}\n\n/**\n * Gets the core structural CSS from base, layout, animations, and component files\n * TODO: In production, this should read from actual CSS files\n * @returns {string} Combined structural CSS\n */\nexport const getCoreStructuralCssString = () => {\n\t// For now, returning a condensed version of the key styles\n\t// In production, this would read and concatenate all CSS files\n\treturn `\n/* Base Styles */\n*,\n*::before,\n*::after {\n\tbox-sizing: border-box;\n}\n\n:host {\n\tfont-family: var(--andy-font-family-primary);\n\tfont-size: var(--andy-font-size-base);\n\tline-height: var(--andy-line-height-normal);\n\tcolor: var(--andy-themable-text);\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n/* Keyframes */\n@keyframes andy-loader {\n\t0% { transform: rotate(0deg); }\n\t100% { transform: rotate(360deg); }\n}\n\n@keyframes andy-dot-pulse {\n\t0%, 100% { transform: scale(1); opacity: 0.7; }\n\t50% { transform: scale(1.1); opacity: 1; }\n}\n\n@keyframes andy-fade-in-slide-up {\n\tfrom { opacity: 0; transform: translateY(20px); }\n\tto { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes andy-message-slide-in {\n\tfrom { opacity: 0; transform: translateY(10px); }\n\tto { opacity: 1; transform: translateY(0); }\n}\n\n/* Chat Bubble */\n.andy-chat-bubble {\n\tposition: fixed;\n\tbottom: 30px;\n\tright: 30px;\n\twidth: var(--andy-chat-bubble-size);\n\theight: var(--andy-chat-bubble-size);\n\tz-index: var(--andy-z-fixed);\n\tbackground: var(--andy-themable-button-primary-bg);\n\tborder: none;\n\tborder-radius: var(--andy-radius-full);\n\tbox-shadow: var(--andy-shadow-lg);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\tcolor: var(--andy-themable-button-primary-text);\n\toutline: none;\n\ttransition: all var(--andy-duration-normal) var(--andy-easing-ease-out);\n\t/* Hidden until config loads */\n\topacity: 0;\n\tpointer-events: none;\n}\n\n/* Show bubble once config is loaded */\n.andy-chat-bubble--loaded {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n.andy-chat-bubble:hover {\n\tbackground: var(--andy-themable-button-primary-hover);\n\ttransform: scale(1.05);\n}\n\n.andy-chat-bubble__icon {\n\twidth: 28px;\n\theight: 28px;\n\tflex-shrink: 0;\n\tcolor: currentColor;\n\tfill: currentColor;\n\t/* Filter to convert black image to white */\n\tfilter: brightness(0) invert(1);\n}\n\n.andy-chat-bubble__logo {\n\twidth: 50px;\n\theight: 50px;\n\tborder-radius: var(--andy-radius-full);\n\tobject-fit: cover;\n\tflex-shrink: 0;\n}\n\n/* === PILL STYLE VARIANT === */\n\n/* Pill-shaped bubble with label */\n.andy-chat-bubble--pill {\n\twidth: auto;\n\theight: auto;\n\tpadding: 12px 16px 12px 20px;\n\tborder-radius: 9999px;\n\tgap: 8px;\n\tbackground: var(--andy-themable-button-primary-bg);\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\ttransition: all 0.2s ease;\n}\n\n.andy-chat-bubble--pill:hover {\n\tbackground: var(--andy-themable-button-primary-hover);\n\ttransform: scale(1.05);\n}\n\n.andy-chat-bubble--pill:active {\n\ttransform: translateY(0) scale(0.98);\n}\n\n/* Label text styling */\n.andy-chat-bubble__label {\n\tcolor: var(--andy-themable-button-primary-text);\n\tfont-size: 14px;\n\tfont-weight: 500;\n\twhite-space: nowrap;\n\tline-height: 1;\n}\n\n/* Icon styling for pill variant */\n.andy-chat-bubble__icon--pill {\n\twidth: 26px !important;\n\theight: 26px !important;\n\tflex-shrink: 0;\n\tborder-radius: 50%;\n\tobject-fit: cover;\n}\n\n/* Ensure pill icon sizing is enforced */\n.andy-chat-bubble--pill .andy-chat-bubble__icon--pill {\n\twidth: 26px !important;\n\theight: 26px !important;\n\tmax-width: 26px;\n\tmax-height: 26px;\n\tfilter: none;\n}\n\n/* When open, pill collapses to icon only */\n.andy-chat-bubble--pill.andy-chat-bubble--open {\n\twidth: var(--andy-chat-bubble-size);\n\theight: var(--andy-chat-bubble-size);\n\tpadding: 0;\n\tjustify-content: center;\n}\n\n.andy-chat-bubble--pill.andy-chat-bubble--open .andy-chat-bubble__label {\n\tdisplay: none;\n}\n\n/* Chat Bubble Tooltip */\n.andy-chat-bubble__tooltip {\n\tposition: absolute;\n\tbottom: calc(100% + 10px);\n\tright: 50%;\n\ttransform: translateX(50%);\n\tbackground: var(--andy-themable-tooltip-bg);\n\tcolor: var(--andy-themable-tooltip-text);\n\tpadding: var(--andy-spacing-2) var(--andy-spacing-3);\n\tborder-radius: var(--andy-radius-md);\n\tfont-size: var(--andy-font-size-sm);\n\twhite-space: nowrap;\n\tpointer-events: none;\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: opacity var(--andy-duration-fast) var(--andy-easing-ease-out),\n\t\tvisibility var(--andy-duration-fast) var(--andy-easing-ease-out);\n\tbox-shadow: var(--andy-shadow-md);\n\tz-index: calc(var(--andy-z-fixed) + 10);\n}\n\n/* Tooltip arrow */\n.andy-chat-bubble__tooltip::after {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 100%;\n\tright: 50%;\n\ttransform: translateX(50%);\n\tborder: 6px solid transparent;\n\tborder-top-color: var(--andy-themable-tooltip-bg);\n}\n\n/* Show tooltip on hover */\n.andy-chat-bubble:hover .andy-chat-bubble__tooltip {\n\topacity: 1;\n\tvisibility: visible;\n}\n\n/* Adjust tooltip position for left orientation */\n:host(.andy-orientation-left) .andy-chat-bubble__tooltip {\n\tright: auto;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n}\n\n:host(.andy-orientation-left) .andy-chat-bubble__tooltip::after {\n\tright: auto;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n}\n\n/* Chat Window */\n.andy-chat-window {\n\tposition: fixed;\n\tbottom: calc(var(--andy-chat-bubble-size) + 40px + var(--andy-spacing-2));\n\tright: 25px;\n\twidth: var(--andy-chat-window-width);\n\tmin-width: var(--andy-chat-window-min-width);\n\theight: var(--andy-chat-window-height);\n\tmin-height: var(--andy-chat-window-min-height);\n\tbackground: var(--andy-themable-background-secondary);\n\tborder-radius: var(--andy-radius-xl);\n\tbox-shadow: var(--andy-shadow-xl);\n\tz-index: 9999;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\topacity: 0;\n\ttransform: translateY(20px);\n\tpointer-events: none;\n\ttransition: all var(--andy-duration-normal) var(--andy-easing-ease-out);\n}\n\n.andy-chat-window--open {\n\topacity: 1;\n\ttransform: translateY(0);\n\tpointer-events: all;\n}\n\n/* Header */\n.andy-header {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 16px 20px;\n\tbackground: var(--andy-themable-background-secondary);\n\tcolor: var(--andy-themable-text);\n\tborder-bottom: 1px solid var(--andy-themable-border);\n\theight: 60px;\n\tposition: relative;\n\tbox-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.04);\n}\n\n.andy-header__back {\n\tdisplay: none; /* Hide back arrow as requested */\n}\n\n.andy-header__back:hover {\n\tbackground: var(--andy-themable-hover);\n}\n\n.andy-header__bot-info {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--andy-spacing-3);\n\tflex: 1;\n\tmin-width: 0; /* Allow it to shrink */\n\tmargin-right: var(--andy-spacing-2); /* Add some space before close button */\n}\n\n.andy-header__avatar {\n\twidth: 36px;\n\theight: 36px;\n\tborder-radius: 10px;\n\tbackground: var(--andy-themable-button-primary-bg);\n\tcolor: var(--andy-themable-button-primary-text);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.andy-header__avatar-icon {\n\twidth: 20px;\n\theight: 20px;\n\tdisplay: block;\n\tobject-fit: contain;\n}\n\n.andy-header__avatar-icon--default {\n\tfilter: brightness(0) invert(1);\n}\n\n.andy-header__avatar-image {\n\twidth: 36px;\n\theight: 36px;\n\tobject-fit: cover;\n\tborder-radius: 10px;\n}\n\n/* Remove background when custom logo is used in header */\n.andy-header__avatar:has(.andy-header__avatar-image) {\n\tbackground: transparent;\n\tbox-shadow: none;\n}\n\n.andy-header__text {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px;\n\tflex: 1;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-align: left;\n\talign-items: flex-start;\n}\n\n.andy-header__name {\n\tfont-size: 16px;\n\tfont-weight: 600;\n\tcolor: var(--andy-themable-text);\n\tmargin: 0;\n\tline-height: 1.2;\n\tletter-spacing: -0.01em;\n\ttext-align: left;\n}\n\n.andy-header__subtitle {\n\tdisplay: block;\n\tfont-size: 13px;\n\tcolor: var(--andy-themable-text-muted);\n\tfont-weight: 400;\n\tmargin: 0;\n\tmargin-top: 2px;\n\tline-height: 1.2;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmax-width: 280px; /* Increased from 200px to allow more text */\n\ttext-align: left;\n}\n\n.andy-header__faq {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tbackground: transparent;\n\tborder: none;\n\tborder-radius: var(--andy-radius-full);\n\tcolor: var(--andy-themable-text-muted);\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n\tposition: relative;\n}\n\n.andy-header__faq:hover {\n\tbackground: rgba(0, 0, 0, 0.04);\n\tcolor: var(--andy-themable-button-primary-bg);\n}\n\n.andy-header__faq-icon {\n\twidth: 20px;\n\theight: 20px;\n\tcolor: currentColor;\n}\n\n.andy-header__close {\n\tdisplay: flex; /* Always visible now that FAQ is disabled */\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tbackground: transparent;\n\tborder: none;\n\tborder-radius: var(--andy-radius-full);\n\tcolor: var(--andy-themable-text-muted);\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n\tposition: relative;\n\tz-index: 1000; /* Ensure it's on top */\n\tflex-shrink: 0; /* Prevent it from shrinking */\n}\n\n.andy-header__close:hover {\n\tbackground: rgba(0, 0, 0, 0.04);\n\tcolor: var(--andy-themable-text);\n}\n\n.andy-header__close-icon {\n\twidth: 20px;\n\theight: 20px;\n\tcolor: currentColor;\n}\n\n.andy-header__dropdown {\n\tposition: absolute;\n\ttop: 100%;\n\tright: 0;\n\tmargin-top: var(--andy-spacing-2);\n\tbackground: var(--andy-themable-background-secondary);\n\tborder: 1px solid var(--andy-themable-border);\n\tborder-radius: var(--andy-radius-base);\n\tbox-shadow: var(--andy-shadow-lg);\n\tmin-width: 160px;\n\tpadding: var(--andy-spacing-2);\n\tz-index: 10;\n\tdisplay: none;\n}\n\n.andy-header__dropdown--open {\n\tdisplay: block;\n}\n\n.andy-dropdown__item {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--andy-spacing-2);\n\twidth: 100%;\n\tpadding: var(--andy-spacing-2) var(--andy-spacing-3);\n\tbackground: transparent;\n\tborder: none;\n\tborder-radius: var(--andy-radius-sm);\n\tcolor: var(--andy-themable-text);\n\tfont-size: var(--andy-font-size-sm);\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n\ttext-align: left;\n}\n\n.andy-dropdown__item:hover {\n\tbackground: var(--andy-themable-hover);\n}\n\n/* Base Button Styles */\n.andy-button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--andy-spacing-2);\n\tpadding: var(--andy-spacing-2) var(--andy-spacing-4);\n\tborder: none;\n\tborder-radius: var(--andy-radius-base);\n\tfont-family: var(--andy-font-family-primary);\n\tfont-size: var(--andy-font-size-sm);\n\tfont-weight: var(--andy-font-weight-medium);\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n\ttext-decoration: none;\n\toutline: none;\n}\n\n.andy-button:focus-visible {\n\toutline: 2px solid var(--andy-themable-button-primary-bg);\n\toutline-offset: 2px;\n}\n\n.andy-button--primary {\n\tbackground: var(--andy-themable-button-primary-bg);\n\tcolor: var(--andy-themable-button-primary-text);\n}\n\n.andy-button--primary:hover {\n\tbackground: var(--andy-themable-button-primary-hover);\n}\n\n.andy-button--secondary {\n\tbackground: var(--andy-themable-button-secondary-bg);\n\tcolor: var(--andy-themable-button-secondary-text);\n}\n\n.andy-button--secondary:hover {\n\tbackground: var(--andy-themable-button-secondary-hover);\n}\n\n/* Messages */\n.andy-chat-window__messages {\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0;\n\tpadding: var(--andy-spacing-5) var(--andy-spacing-6);\n\toverflow-y: auto;\n\tbackground: var(--andy-themable-background-secondary);\n\tmin-height: 0;\n\tpadding: 24px 20px 0px;\n}\n\n/* Subtitle section at top of messages */\n.andy-chat-subtitle {\n\tfont-size: 14px;\n\tcolor: var(--andy-themable-text-secondary);\n\ttext-align: center;\n\tline-height: 21px;\n\tmargin-bottom: var(--andy-spacing-5);\n}\n\n.andy-chat-subtitle__text {\n\tpadding: 0;\n\tmargin: 0;\n\ttext-wrap: balance;\n}\n\n\n\n.andy-message-container {\n\tdisplay: flex;\n\tmargin-bottom: 8px;\n\tmax-width: 75%;\n\talign-items: flex-start;\n\tgap: var(--andy-spacing-3);\n\tanimation: andy-message-slide-in var(--andy-duration-normal) var(--andy-easing-ease-out);\n}\n\n.andy-message-container--user {\n\tmargin-left: auto;\n\tflex-direction: row-reverse;\n}\n\n.andy-message-container--bot {\n\tmargin-right: auto;\n\tflex-direction: row;\n\talign-items: flex-start;\n}\n\n/* Bot message header with icon + name */\n.andy-bot-header {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tmargin-bottom: 8px;\n}\n\n.andy-bot-header__icon {\n\twidth: 24px;\n\theight: 24px;\n\tbackground: var(--andy-themable-button-primary-bg);\n\tcolor: var(--andy-themable-button-primary-text);\n\tborder-radius: 6px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.andy-bot-header__icon svg {\n\twidth: 14px;\n\theight: 14px;\n\tdisplay: block;\n}\n\n.andy-bot-header__icon-image {\n\twidth: 24px;\n\theight: 24px;\n\tobject-fit: cover;\n\tborder-radius: 6px;\n\tdisplay: block;\n}\n\n.andy-bot-header__icon-image--default {\n\twidth: 14px;\n\theight: 14px;\n\tobject-fit: contain;\n\tfilter: brightness(0) invert(1);\n}\n\n/* Remove background when custom logo is used (not default icon) */\n.andy-bot-header__icon:has(.andy-bot-header__icon-image:not(.andy-bot-header__icon-image--default)) {\n\tbackground: transparent;\n\tbox-shadow: none;\n}\n\n.andy-bot-header__name {\n\tfont-size: 14px;\n\tfont-weight: 600;\n\tcolor: var(--andy-themable-text);\n\tline-height: 1.2;\n\tletter-spacing: -0.01em;\n}\n\n.andy-avatar {\n\tdisplay: none; /* Hide regular avatar, using new bot header */\n}\n\n.andy-message {\n\tborder-radius: var(--andy-radius-lg);\n\tfont-size: var(--andy-font-size-sm);\n\tline-height: var(--andy-line-height-normal);\n\tword-wrap: break-word;\n\tposition: relative;\n}\n\n.andy-message--user {\n\tbackground: var(--andy-themable-button-primary-bg);\n\tcolor: var(--andy-themable-message-user-text);\n\tborder-radius: 20px;\n\tpadding: 8px 12px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-align: center;\n\tmin-height: 36px;\n\tfont-weight: 500;\n\tbox-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n\tline-height: 1.4;\n}\n\n.andy-message--bot {\n\tbackground: var(--andy-themable-message-bot-bg);\n\tcolor: var(--andy-themable-message-bot-text);\n\tborder-radius: 20px;\n\tborder: 1px solid var(--andy-themable-message-bot-border);\n\tpadding: 12px 16px;\n\tbox-shadow: none;\n\tline-height: 1.5;\n\ttext-align: left;\n}\n\n/* Message Sub-Components */\n.andy-message__stream {\n white-space: pre-wrap;\n}\n\n.andy-message__content {\n\tline-height: 1.4;\n\tmargin: 0;\n\toverflow-wrap: break-word;\n\tword-break: break-word;\n\ttext-align: left;\n}\n\n/* User message content centering */\n.andy-message--user .andy-message__content {\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.andy-message--user .andy-message__content p {\n\tmargin: 0;\n}\n\n/* Bot message content left alignment */\n.andy-message--bot .andy-message__content {\n\ttext-align: left;\n}\n\n.andy-message__content p {\n\tmargin: 0;\n\tmargin-bottom: var(--andy-spacing-1);\n}\n\n.andy-message__content p:last-child {\n\tmargin-bottom: 0;\n}\n\n.andy-message__content h1,\n.andy-message__content h2,\n.andy-message__content h3,\n.andy-message__content h4,\n.andy-message__content h5,\n.andy-message__content h6 {\n\tmargin: 0 0 var(--andy-spacing-1) 0;\n\tfont-weight: var(--andy-font-weight-bold);\n}\n\n.andy-message__content ul,\n.andy-message__content ol {\n\tmargin: var(--andy-spacing-2) 0;\n\tpadding-left: var(--andy-spacing-4);\n}\n\n.andy-message__content li {\n\tmargin-bottom: var(--andy-spacing-1);\n}\n\n.andy-message__content code {\n\tbackground: rgba(0, 0, 0, 0.1);\n\tpadding: var(--andy-spacing-1) var(--andy-spacing-2);\n\tborder-radius: var(--andy-radius-sm);\n\tfont-family: monospace;\n\tfont-size: 0.875em;\n}\n\n.andy-message__content strong {\n\tfont-weight: var(--andy-font-weight-bold);\n}\n\n.andy-message__content em {\n\tfont-style: italic;\n}\n\n.andy-message__link {\n\tcolor: var(--andy-themable-button-primary-bg);\n\ttext-decoration: none;\n}\n\n.andy-message__link:hover {\n\ttext-decoration: underline;\n}\n\n/* Avatar Sub-Components */\n.andy-avatar__icon {\n\twidth: 18px;\n\theight: 18px;\n\tflex-shrink: 0;\n\tdisplay: block;\n\tobject-fit: contain;\n}\n\n.andy-avatar__icon--default {\n\tfilter: brightness(0) invert(1);\n}\n\n.andy-avatar__image {\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: var(--andy-radius-full);\n\tobject-fit: cover;\n}\n\n/* Typing Indicator Component */\n.andy-typing-indicator {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--andy-spacing-2) var(--andy-spacing-3);\n\tmin-height: 32px;\n}\n\n.andy-typing-indicator__dot {\n\twidth: 6px;\n\theight: 6px;\n\tborder-radius: var(--andy-radius-full);\n\tbackground-color: var(--andy-themable-text-secondary);\n\tmargin: 0 2px;\n\topacity: 0.7;\n\tanimation: andy-dot-pulse var(--andy-duration-slow) infinite var(--andy-easing-ease-in-out);\n}\n\n.andy-typing-indicator__dot:nth-child(1) {\n\tanimation-delay: 0s;\n}\n\n.andy-typing-indicator__dot:nth-child(2) {\n\tanimation-delay: 0.2s;\n}\n\n.andy-typing-indicator__dot:nth-child(3) {\n\tanimation-delay: 0.4s;\n}\n\n\n.andy-message__greeting-title {\n\tfont-size: var(--andy-font-size-lg);\n\tfont-weight: var(--andy-font-weight-bold);\n\tmargin-bottom: var(--andy-spacing-1);\n}\n\n.andy-message__greeting-content {\n\tfont-size: var(--andy-font-size-sm);\n\topacity: 0.9;\n}\n\n.andy-message--loading .andy-message__content {\n\tpadding: var(--andy-spacing-2) 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.andy-message--error {\n\tborder-color: var(--andy-color-error);\n\tbackground: var(--andy-color-error-light);\n}\n\n/* Input */\n.andy-input-container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: var(--andy-spacing-5) var(--andy-spacing-6);\n\tborder-top: 1px solid var(--andy-themable-border);\n\tbackground: var(--andy-themable-background-secondary);\n\tborder-radius: 0 0 var(--andy-radius-xl) var(--andy-radius-xl);\n}\n\n.andy-input {\n\tdisplay: flex;\n\tposition: relative;\n\twidth: 100%;\n\talign-items: center;\n\tgap: var(--andy-spacing-2);\n}\n\n.andy-input__field {\n\tflex: 1;\n\tpadding: 12px var(--andy-spacing-4);\n\tpadding-left: var(--andy-spacing-4);\n\tpadding-right: 50px;\n\tborder: 1px solid var(--andy-themable-border);\n\tborder-radius: 24px;\n\tfont-family: var(--andy-font-family-primary);\n\tfont-size: var(--andy-font-size-sm);\n\tline-height: var(--andy-line-height-normal);\n\tbackground: var(--andy-themable-input-bg);\n\tcolor: var(--andy-themable-input-text);\n\tmin-height: 48px;\n\toutline: none;\n\tresize: none;\n\ttransition: all var(--andy-duration-normal) var(--andy-easing-ease-out);\n\tbox-shadow: none;\n}\n\n.andy-input__field:focus {\n\tborder-color: var(--andy-themable-text-muted);\n\tbackground: var(--andy-themable-background-secondary);\n\tbox-shadow: none;\n}\n\n.andy-input__button {\n\tposition: absolute;\n\tright: 5px;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\twidth: 30px;\n\theight: 30px;\n\tborder: none;\n\tborder-radius: var(--andy-radius-full);\n\tbackground: var(--andy-themable-button-primary-bg);\n\tcolor: var(--andy-themable-button-primary-text);\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttransition: all var(--andy-duration-normal) var(--andy-easing-ease-out);\n\toutline: none;\n\tz-index: 1;\n\tbox-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n}\n\n.andy-input__button:hover {\n\tbackground: var(--andy-themable-button-primary-hover);\n\ttransform: translateY(-50%) scale(1.05);\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);\n}\n\n.andy-input__button:disabled {\n\tbackground: #cccccc;\n\tcursor: not-allowed;\n\topacity: 0.6;\n}\n\n.andy-input__button svg,\n.andy-input__button-icon {\n\tpointer-events: none;\n}\n\n.andy-input__button:disabled:hover {\n\tbackground: #cccccc;\n\ttransform: translateY(-50%);\n}\n\n/* Bottom Section */\n.andy-chat-window__bottom {\n\tdisplay: flex;\n\tflex-direction: column;\n\tbackground: var(--andy-themable-background-secondary);\n\tborder-top: none;\n\tborder-radius: 0 0 var(--andy-radius-xl) var(--andy-radius-xl);\n\toverflow: visible;\n}\n\n/* Predefined Questions */\n.andy-predefined-questions {\n\tpadding: 20px 24px 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n\toverflow: visible;\n}\n\n.andy-predefined-questions__header {\n\tdisplay: none; /* Hide header as requested */\n}\n\n.andy-predefined-questions__title {\n\tdisplay: none; /* Hide title as requested */\n}\n\n.andy-predefined-questions__list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\toverflow: visible;\n\tscrollbar-width: none;\n\t-ms-overflow-style: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.andy-predefined-questions__list::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n.andy-predefined-question {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--andy-spacing-1);\n\tpadding: 8px 16px;\n\tbackground: var(--andy-themable-background-secondary);\n\tborder: 1px solid var(--andy-themable-border);\n\tborder-radius: var(--andy-radius-full);\n\tcolor: var(--andy-themable-text);\n\tfont-size: 13px;\n\tfont-weight: 500;\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-normal) var(--andy-easing-ease-out);\n\twhite-space: normal;\n\ttext-align: left;\n\tflex-shrink: 1;\n\twidth: 100%;\n\tmax-width: 100%;\n\tbox-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n\tmin-height: 36px;\n\tposition: relative;\n\toverflow: visible;\n}\n\n.andy-predefined-question:hover {\n\tbackground: var(--andy-themable-hover);\n\tborder-color: var(--andy-themable-text-muted);\n\tbox-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n\ttransform: translateY(-1px);\n\tz-index: 10;\n}\n\n.andy-predefined-question:active {\n\ttransform: translateY(0);\n\tbox-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n}\n\n.andy-predefined-question:disabled {\n\topacity: 0.6;\n\tcursor: not-allowed;\n\ttransform: none;\n\tbox-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.04);\n}\n\n.andy-predefined-question__icon {\n\tfont-size: 12px;\n}\n\n.andy-predefined-question__text {\n\tflex: 1 1 auto;\n\tline-height: 1.4;\n\toverflow-wrap: anywhere;\n}\n\n/* Updated Input Container */\n.andy-chat-window__input {\n\tpadding: var(--andy-spacing-3) var(--andy-spacing-5);\n}\n\n.andy-input-container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 0;\n\tborder-top: none;\n\tbackground: transparent;\n\tborder-radius: 0;\n}\n\n/* Footer */\n.andy-chat-window__footer {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: var(--andy-spacing-1) var(--andy-spacing-3);\n\tbackground: transparent;\n\tborder-radius: 0 0 var(--andy-radius-xl) var(--andy-radius-xl);\n}\n\n.andy-chat-window__footer-link {\n\ttext-decoration: none;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 3px;\n\tpadding: 4px 10px;\n\tbackground: var(--andy-themable-hover);\n\tborder-radius: 10px;\n\ttransition: all 0.2s ease;\n\tfont-size: 10px;\n\topacity: 0.8;\n\tposition: relative;\n\t/* Ensure reasonable touch target size for mobile */\n\tmin-height: 28px;\n}\n\n.andy-chat-window__footer-link:hover {\n\topacity: 1;\n\ttransform: translateY(-1px) scale(1.02);\n\tbox-shadow: 0 2px 8px var(--andy-themable-shadow);\n\tbackground: var(--andy-themable-hover);\n}\n\n.andy-chat-window__footer-link:active {\n\ttransform: translateY(0) scale(1);\n\tbox-shadow: 0 1px 4px var(--andy-themable-shadow-light);\n}\n\n.andy-chat-window__footer-link:focus-visible {\n\toutline: 2px solid var(--andy-themable-button-primary-bg);\n\toutline-offset: 2px;\n\topacity: 1;\n}\n\n/* External link icon - using ::after instead of ::before */\n.andy-chat-window__footer-link::after {\n\tcontent: '↗';\n\tfont-size: 9px;\n\tmargin-left: 1px;\n\ttransition: transform 0.2s ease;\n\tdisplay: inline-block;\n\tcolor: var(--andy-themable-text-secondary);\n\topacity: 0.8;\n}\n\n.andy-chat-window__footer-link:hover::after {\n\ttransform: translate(1px, -1px);\n\topacity: 1;\n}\n\n.andy-chat-window__footer-text {\n\tcolor: var(--andy-themable-text-secondary);\n\tfont-size: 10px;\n\tfont-weight: var(--andy-font-weight-medium);\n\tletter-spacing: 0.01em;\n\tline-height: 1.4;\n}\n\n/* FAQ */\n.andy-chat-window__faq {\n\tdisplay: none;\n\tflex: 1;\n\tflex-direction: column;\n\tbackground: var(--andy-themable-background);\n\toverflow-y: auto;\n}\n\n.andy-faq {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n\n.andy-faq__header {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: var(--andy-spacing-5) var(--andy-spacing-6) var(--andy-spacing-4);\n\tborder-bottom: 1px solid var(--andy-themable-border);\n\tbackground: var(--andy-themable-background-secondary);\n}\n\n.andy-faq__back-button {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--andy-spacing-2);\n\tmargin-bottom: var(--andy-spacing-4);\n\tpadding: var(--andy-spacing-2) 0;\n\tbackground: none;\n\tborder: none;\n\tcolor: var(--andy-themable-button-primary-bg);\n\tfont-size: var(--andy-font-size-sm);\n\tcursor: pointer;\n\ttransition: color var(--andy-duration-fast) var(--andy-easing-ease-out);\n\toutline: none;\n}\n\n.andy-faq__back-button:hover {\n\tcolor: var(--andy-themable-button-primary-hover);\n}\n\n.andy-faq__back-icon {\n\twidth: 20px;\n\theight: 20px;\n\tflex-shrink: 0;\n}\n\n.andy-faq__title {\n\tfont-size: var(--andy-font-size-xl);\n\tfont-weight: var(--andy-font-weight-bold);\n\tcolor: var(--andy-themable-text);\n\tmargin: 0;\n\ttext-align: center;\n}\n\n.andy-faq__list {\n\tflex: 1;\n\tpadding: var(--andy-spacing-4) var(--andy-spacing-6);\n\toverflow-y: auto;\n}\n\n.andy-faq-item {\n\tmargin-bottom: var(--andy-spacing-4);\n\tborder: 1px solid var(--andy-themable-border);\n\tborder-radius: var(--andy-radius-lg);\n\tbackground: var(--andy-themable-background-secondary);\n\toverflow: hidden;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n}\n\n.andy-faq-item:hover {\n\tborder-color: var(--andy-themable-button-primary-bg);\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.andy-faq-item__question {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\twidth: 100%;\n\tpadding: var(--andy-spacing-4) var(--andy-spacing-5);\n\tbackground: none;\n\tborder: none;\n\ttext-align: left;\n\tfont-size: var(--andy-font-size-base);\n\tfont-weight: var(--andy-font-weight-medium);\n\tcolor: var(--andy-themable-text);\n\tcursor: pointer;\n\ttransition: all var(--andy-duration-fast) var(--andy-easing-ease-out);\n\toutline: none;\n}\n\n.andy-faq-item__question:hover {\n\tbackground: var(--andy-themable-hover);\n}\n\n.andy-faq-item__chevron {\n\twidth: 16px;\n\theight: 16px;\n\tflex-shrink: 0;\n\ttransition: transform var(--andy-duration-fast) var(--andy-easing-ease-out);\n\tcolor: var(--andy-themable-text-secondary);\n}\n\n.andy-faq-item--open .andy-faq-item__chevron {\n\ttransform: rotate(180deg);\n}\n\n.andy-faq-item__answer {\n\tdisplay: grid;\n\tgrid-template-rows: 0fr;\n\toverflow: hidden;\n\ttransition: grid-template-rows var(--andy-duration-normal) var(--andy-easing-ease-out);\n\tbackground: var(--andy-themable-background);\n}\n\n.andy-faq-item--open .andy-faq-item__answer {\n\tgrid-template-rows: 1fr;\n}\n\n.andy-faq-item__answer-content {\n\tmin-height: 0;\n\tpadding: 0 var(--andy-spacing-5);\n}\n\n.andy-faq-item--open .andy-faq-item__answer-content {\n\tpadding: 0 var(--andy-spacing-5) var(--andy-spacing-4);\n}\n\n.andy-faq-item__answer p {\n\tmargin: 0 0 var(--andy-spacing-2) 0;\n\tcolor: var(--andy-themable-text-secondary);\n\tline-height: var(--andy-line-height-normal);\n}\n\n.andy-faq-item__answer p:last-child {\n\tmargin-bottom: 0;\n}\n\n.andy-faq-item__answer ul,\n.andy-faq-item__answer ol {\n\tmargin: var(--andy-spacing-2) 0;\n\tpadding-left: var(--andy-spacing-4);\n\tcolor: var(--andy-themable-text-secondary);\n}\n\n.andy-faq-item__answer li {\n\tmargin-bottom: var(--andy-spacing-1);\n}\n\n/* Welcome Popup */\n.andy-welcome-popup {\n\tposition: fixed;\n\tbottom: 100px;\n\tright: 20px;\n\tz-index: 9998;\n\tdisplay: none;\n\tmax-width: 280px;\n\tanimation: andy-fade-in-slide-up 0.3s ease-out;\n}\n\n/* Left orientation */\n.andy-welcome-popup.andychat-popup-left,\n:host(.andy-orientation-left) .andy-welcome-popup {\n\tright: auto;\n\tleft: 20px;\n}\n\n.andy-welcome-popup__content {\n\tbackground: var(--andy-themable-background-secondary);\n\tborder-radius: var(--andy-radius-lg);\n\tpadding: 16px;\n\tbox-shadow: var(--andy-shadow-lg);\n\tposition: relative;\n\tborder: 1px solid var(--andy-themable-border);\n}\n\n.andy-welcome-popup__message {\n\tfont-size: 14px;\n\tline-height: 1.5;\n\tcolor: var(--andy-themable-text);\n\tpadding-right: 24px;\n}\n\n.andy-welcome-popup__close {\n\tposition: absolute;\n\ttop: 8px;\n\tright: 8px;\n\twidth: 24px;\n\theight: 24px;\n\tborder: none;\n\tbackground: transparent;\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 4px;\n\tcolor: var(--andy-themable-text-muted);\n\ttransition: all 0.15s ease;\n}\n\n.andy-welcome-popup__close:hover {\n\tbackground: var(--andy-themable-hover);\n\tcolor: var(--andy-themable-text);\n}\n\n.andy-welcome-popup__close-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n.andy-welcome-popup__arrow {\n\tposition: absolute;\n\tbottom: -8px;\n\tright: 30px;\n\twidth: 16px;\n\theight: 16px;\n\tbackground: var(--andy-themable-background-secondary);\n\tborder-right: 1px solid var(--andy-themable-border);\n\tborder-bottom: 1px solid var(--andy-themable-border);\n\ttransform: rotate(45deg);\n}\n\n/* Left orientation arrow */\n.andy-welcome-popup.andychat-popup-left .andy-welcome-popup__arrow,\n:host(.andy-orientation-left) .andy-welcome-popup .andy-welcome-popup__arrow {\n\tright: auto;\n\tleft: 30px;\n}\n\n/* Loading States */\n.andy-loading__dots {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: var(--andy-spacing-2);\n\tpadding: var(--andy-spacing-4);\n\tmin-height: 60px;\n}\n\n.andy-loading__dot {\n\twidth: 12px;\n\theight: 12px;\n\tborder-radius: var(--andy-radius-full);\n\tbackground-color: var(--andy-themable-text-muted);\n\topacity: 0.6;\n}\n\n.andy-loading__dot:nth-child(1) {\n\tanimation: andy-dot-pulse var(--andy-duration-slow) infinite var(--andy-easing-ease-in-out) 0s;\n}\n\n.andy-loading__dot:nth-child(2) {\n\tanimation: andy-dot-pulse var(--andy-duration-slow) infinite var(--andy-easing-ease-in-out) 0.2s;\n}\n\n.andy-loading__dot:nth-child(3) {\n\tanimation: andy-dot-pulse var(--andy-duration-slow) infinite var(--andy-easing-ease-in-out) 0.4s;\n}\n\n/* Responsive */\n@media (max-width: 520px) {\n\t.andy-chat-window {\n\t\tposition: fixed !important;\n\t\tbottom: 1rem !important;\n\t\tleft: 1rem !important;\n\t\tright: 1rem !important;\n\t\ttop: 1rem !important;\n\t\twidth: calc(100% - 2rem) !important;\n\t\theight: calc(100% - 2rem) !important;\n\t\tmax-width: 500px !important;\n\t\tmax-height: calc(100vh - 2rem) !important;\n\t\tmax-height: calc(100dvh - 2rem) !important;\n\t\tmargin: 0 auto !important;\n\t\tborder-radius: var(--andy-radius-xl) !important;\n\t\tbox-shadow: 0 0 40px rgba(0, 0, 0, 0.2) !important;\n\t\toverflow: hidden;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tbackground: var(--andy-themable-background-secondary) !important;\n\t\t/* Card-like floating design */\n\t\t/* Add smooth scale animation on mobile */\n\t\ttransform: scale(0.95);\n\t\topacity: 0;\n\t}\n\n\t.andy-chat-window--open {\n\t\ttransform: scale(1);\n\t\topacity: 1;\n\t}\n\n\t/* Adjust for very small screens */\n\t@media (max-height: 600px) {\n\t\t.andy-chat-window {\n\t\t\tbottom: 0.5rem !important;\n\t\t\ttop: 0.5rem !important;\n\t\t\tleft: 0.5rem !important;\n\t\t\tright: 0.5rem !important;\n\t\t\twidth: calc(100% - 1rem) !important;\n\t\t\theight: calc(100% - 1rem) !important;\n\t\t}\n\t}\n\n\t/* Ensure the window content is properly laid out */\n\t.andy-chat-window__messages {\n\t\tflex: 1 1 auto;\n\t\tmin-height: 0;\n\t\toverflow-y: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t}\n\n\t.andy-chat-window__bottom {\n\t\tflex: 0 0 auto;\n\t\tposition: relative;\n\t\tz-index: 10;\n\t}\n\n\t/* Fix input font size to prevent iOS zoom */\n\t.andy-input__field {\n\t\tfont-size: 16px !important; /* Prevents iOS zoom on focus */\n\t\tline-height: 1.5 !important;\n\t\tpadding-right: 60px !important; /* More space for larger button */\n\t}\n\n\t/* Larger send button on mobile for better touch targets */\n\t.andy-input__button {\n\t\twidth: 40px !important;\n\t\theight: 40px !important;\n\t\tright: 8px !important;\n\t}\n\n\t/* Add expanded touch target for submit button on mobile only */\n\t.andy-input__button::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: -15px;\n\t\tright: -15px;\n\t\tbottom: -15px;\n\t\tleft: -15px;\n\t\tborder-radius: var(--andy-radius-full);\n\t\t/* Invisible expanded touch target */\n\t}\n\n\t/* Ensure proper header spacing on mobile */\n\t.andy-header {\n\t\tmin-height: 60px;\n\t\tflex-shrink: 0;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 100;\n\t\tbackground: var(--andy-themable-background-secondary);\n\t}\n\n\t/* Ensure messages don't go under header */\n\t.andy-chat-window__messages {\n\t\tpadding-top: var(--andy-spacing-3);\n\t}\n\n\t.andy-chat-bubble {\n\t\twidth: 56px;\n\t\theight: 56px;\n\t\tbottom: 30px;\n\t\t/* Ensure bubble is tappable on mobile */\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);\n\t\ttouch-action: manipulation;\n\t}\n\n\t.andy-chat-bubble__icon {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n\n\t/* Pill style on mobile - override fixed dimensions */\n\t.andy-chat-bubble--pill {\n\t\twidth: auto !important;\n\t\theight: auto !important;\n\t\tpadding: 10px 16px 10px 12px;\n\t\tgap: 6px;\n\t}\n\n\t.andy-chat-bubble--pill .andy-chat-bubble__label {\n\t\tfont-size: 13px;\n\t}\n\n\t.andy-chat-bubble--pill .andy-chat-bubble__icon--pill {\n\t\twidth: 22px !important;\n\t\theight: 22px !important;\n\t}\n\n\t/* When open on mobile, pill collapses to icon only */\n\t.andy-chat-bubble--pill.andy-chat-bubble--open {\n\t\twidth: 56px !important;\n\t\theight: 56px !important;\n\t\tpadding: 0;\n\t}\n\n\t/* Show close button on mobile */\n\t.andy-header__close {\n\t\tdisplay: flex;\n\t}\n\n\t/* Add expanded touch target for close button on mobile only */\n\t.andy-header__close::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: -12px;\n\t\tright: -12px;\n\t\tbottom: -12px;\n\t\tleft: -12px;\n\t\tborder-radius: var(--andy-radius-full);\n\t\t/* Invisible expanded touch target */\n\t}\n\n\t/* Hide FAQ button on mobile to make room for close button */\n\t.andy-header__faq {\n\t\tdisplay: none;\n\t}\n}\n\n/* Desktop */\n@media (min-width: 521px) {\n\t/* Desktop retains original positioning behavior */\n\t.andy-chat-window {\n\t\ttransition: transform 0.3s ease-out;\n\t}\n}\n\n/* Orientation */\n:host(.andy-orientation-right) .andy-chat-bubble {\n\tright: 30px;\n\tleft: auto;\n}\n\n:host(.andy-orientation-left) .andy-chat-bubble {\n\tleft: 30px;\n\tright: auto;\n}\n\n:host(.andy-orientation-right) .andy-chat-window {\n\tright: 30px;\n\tleft: auto;\n}\n\n:host(.andy-orientation-left) .andy-chat-window {\n\tleft: 30px;\n\tright: auto;\n}\n`\n}\n\n/**\n * Gets theme definitions CSS string\n * @returns {string} Theme CSS content\n */\nexport const getThemeDefinitionsCssString = () => {\n\treturn `\n/* Light Theme (Default) */\n:host(.andy-theme-light) {\n\t--andy-themable-background: var(--andy-color-background);\n\t--andy-themable-background-secondary: var(--andy-color-white);\n\t--andy-themable-background-tertiary: var(--andy-color-gray-100);\n\t--andy-themable-text: var(--andy-color-text);\n\t--andy-themable-text-secondary: var(--andy-color-text-secondary);\n\t--andy-themable-text-muted: var(--andy-color-text-muted);\n\t--andy-themable-border: var(--andy-color-border);\n\t--andy-themable-hover: var(--andy-color-hover);\n\t--andy-themable-button-primary-bg: var(--andy-color-primary);\n\t--andy-themable-button-primary-text: var(--andy-color-white);\n\t--andy-themable-button-primary-hover: var(--andy-color-primary-hover);\n\t--andy-themable-button-secondary-bg: var(--andy-color-gray-200);\n\t--andy-themable-button-secondary-text: var(--andy-color-text);\n\t--andy-themable-button-secondary-hover: var(--andy-color-gray-300);\n\t--andy-themable-input-bg: var(--andy-color-input-background);\n\t--andy-themable-input-border: var(--andy-color-border);\n\t--andy-themable-input-text: var(--andy-color-text);\n\t--andy-themable-input-placeholder: var(--andy-color-text-muted);\n\t--andy-themable-message-user-bg: var(--andy-color-user-message);\n\t--andy-themable-message-user-text: var(--andy-color-user-message-text);\n\t--andy-themable-message-bot-bg: var(--andy-color-bot-message);\n\t--andy-themable-message-bot-text: var(--andy-color-bot-message-text);\n\t--andy-themable-avatar-bg: var(--andy-color-primary);\n\t--andy-themable-avatar-text: var(--andy-color-white);\n\t--andy-themable-tooltip-bg: var(--andy-color-gray-800);\n\t--andy-themable-tooltip-text: var(--andy-color-white);\n}\n\n/* Dark Theme */\n:host(.andy-theme-dark) {\n\t--andy-themable-background: var(--andy-color-background-dark);\n\t--andy-themable-background-secondary: var(--andy-color-background-secondary-dark);\n\t--andy-themable-background-tertiary: var(--andy-color-background-tertiary-dark);\n\t--andy-themable-text: var(--andy-color-text-dark);\n\t--andy-themable-text-secondary: var(--andy-color-text-dark);\n\t--andy-themable-text-muted: var(--andy-color-text-muted-dark);\n\t--andy-themable-border: var(--andy-color-border-dark);\n\t--andy-themable-hover: var(--andy-color-hover-dark);\n\t--andy-themable-shadow: rgba(0, 0, 0, 0.3);\n\t--andy-themable-shadow-light: rgba(0, 0, 0, 0.2);\n\t--andy-themable-button-primary-bg: var(--andy-color-primary);\n\t--andy-themable-button-primary-text: var(--andy-color-white);\n\t--andy-themable-button-primary-hover: var(--andy-color-primary-hover);\n\t--andy-themable-button-secondary-bg: var(--andy-color-background-tertiary-dark);\n\t--andy-themable-button-secondary-text: var(--andy-color-text-dark);\n\t--andy-themable-button-secondary-hover: var(--andy-color-hover-dark);\n\t--andy-themable-input-bg: var(--andy-color-background-tertiary-dark);\n\t--andy-themable-input-border: var(--andy-color-border-dark);\n\t--andy-themable-input-text: var(--andy-color-text-dark);\n\t--andy-themable-input-placeholder: var(--andy-color-text-muted-dark);\n\t--andy-themable-message-user-bg: var(--andy-color-user-message);\n\t--andy-themable-message-user-text: var(--andy-color-user-message-text);\n\t--andy-themable-message-bot-bg: #353535;\n\t--andy-themable-message-bot-text: var(--andy-color-text-dark);\n\t--andy-themable-message-bot-border: rgba(255, 255, 255, 0.08);\n\t--andy-themable-avatar-bg: var(--andy-color-primary);\n\t--andy-themable-avatar-text: var(--andy-color-white);\n\t--andy-themable-tooltip-bg: var(--andy-color-background-secondary-dark);\n\t--andy-themable-tooltip-text: var(--andy-color-text-dark);\n}\n\n/* Auto Theme */\n:host(.andy-theme-auto) {\n\t--andy-themable-background: var(--andy-color-background);\n\t--andy-themable-background-secondary: var(--andy-color-white);\n\t--andy-themable-background-tertiary: var(--andy-color-gray-100);\n\t--andy-themable-text: var(--andy-color-text);\n\t--andy-themable-text-secondary: var(--andy-color-text-secondary);\n\t--andy-themable-text-muted: var(--andy-color-text-muted);\n\t--andy-themable-border: var(--andy-color-border);\n\t--andy-themable-hover: var(--andy-color-hover);\n\t--andy-themable-button-primary-bg: var(--andy-color-primary);\n\t--andy-themable-button-primary-text: var(--andy-color-white);\n\t--andy-themable-button-primary-hover: var(--andy-color-primary-hover);\n\t--andy-themable-button-secondary-bg: var(--andy-color-gray-200);\n\t--andy-themable-button-secondary-text: var(--andy-color-text);\n\t--andy-themable-button-secondary-hover: var(--andy-color-gray-300);\n\t--andy-themable-input-bg: var(--andy-color-input-background);\n\t--andy-themable-input-border: var(--andy-color-border);\n\t--andy-themable-input-text: var(--andy-color-text);\n\t--andy-themable-input-placeholder: var(--andy-color-text-muted);\n\t--andy-themable-message-user-bg: var(--andy-color-user-message);\n\t--andy-themable-message-user-text: var(--andy-color-user-message-text);\n\t--andy-themable-message-bot-bg: var(--andy-color-bot-message);\n\t--andy-themable-message-bot-text: var(--andy-color-bot-message-text);\n\t--andy-themable-avatar-bg: var(--andy-color-primary);\n\t--andy-themable-avatar-text: var(--andy-color-white);\n\t--andy-themable-tooltip-bg: var(--andy-color-gray-800);\n\t--andy-themable-tooltip-text: var(--andy-color-white);\n}\n\n@media (prefers-color-scheme: dark) {\n\t:host(.andy-theme-auto) {\n\t\t--andy-themable-background: var(--andy-color-background-dark);\n\t\t--andy-themable-background-secondary: var(--andy-color-background-secondary-dark);\n\t\t--andy-themable-background-tertiary: var(--andy-color-background-tertiary-dark);\n\t\t--andy-themable-text: var(--andy-color-text-dark);\n\t\t--andy-themable-text-secondary: var(--andy-color-text-dark);\n\t\t--andy-themable-text-muted: var(--andy-color-text-muted-dark);\n\t\t--andy-themable-border: var(--andy-color-border-dark);\n\t\t--andy-themable-hover: var(--andy-color-hover-dark);\n\t\t--andy-themable-shadow: rgba(0, 0, 0, 0.3);\n\t\t--andy-themable-shadow-light: rgba(0, 0, 0, 0.2);\n\t\t--andy-themable-button-secondary-bg: var(--andy-color-background-tertiary-dark);\n\t\t--andy-themable-button-secondary-text: var(--andy-color-text-dark);\n\t\t--andy-themable-button-secondary-hover: var(--andy-color-hover-dark);\n\t\t--andy-themable-input-bg: var(--andy-color-background-tertiary-dark);\n\t\t--andy-themable-input-border: var(--andy-color-border-dark);\n\t\t--andy-themable-input-text: var(--andy-color-text-dark);\n\t\t--andy-themable-input-placeholder: var(--andy-color-text-muted-dark);\n\t\t--andy-themable-message-bot-bg: #353535;\n\t\t--andy-themable-message-bot-text: var(--andy-color-text-dark);\n\t\t--andy-themable-message-bot-border: rgba(255, 255, 255, 0.08);\n\t\t--andy-themable-tooltip-bg: var(--andy-color-background-secondary-dark);\n\t\t--andy-themable-tooltip-text: var(--andy-color-text-dark);\n\t}\n}\n`\n}\n\n/**\n * Generates brand color override CSS\n * @param {string} brandColor - The brand color to apply\n * @param {boolean} useBrandColor - Whether to apply brand color (default: true)\n * @returns {string} CSS with brand color overrides\n */\nexport const getBrandColorOverrideCssString = (brandColor, useBrandColor = true) => {\n\tif (!useBrandColor) {\n\t\t// Brand color disabled - use theme-aware neutral colors\n\t\treturn `\n/* Bubble: neutral background based on theme */\n.andy-chat-bubble,\n.andy-chat-bubble--pill {\n\tbackground: var(--andy-themable-background-tertiary) !important;\n\tcolor: var(--andy-themable-text) !important;\n}\n.andy-chat-bubble:hover,\n.andy-chat-bubble--pill:hover {\n\tbackground: var(--andy-themable-hover) !important;\n}\n\n/* Bubble icon: use theme text color for contrast */\n.andy-chat-bubble__icon {\n\tcolor: var(--andy-themable-text) !important;\n\tstroke: var(--andy-themable-text) !important;\n\tfill: var(--andy-themable-text) !important;\n\tfilter: none !important; /* Reset the brightness filter */\n}\n.andy-chat-bubble__icon path {\n\tstroke: inherit !important;\n\tfill: inherit !important;\n}\n\n/* Dark mode: use filter to make icon white */\n.andy-chat-bubble--theme-dark .andy-chat-bubble__icon {\n\tfilter: brightness(0) invert(1) !important;\n}\n.andy-chat-bubble--theme-dark .andy-chat-bubble__icon path {\n\tfill: currentColor !important;\n}\n.andy-chat-bubble__label {\n\tcolor: var(--andy-themable-text) !important;\n}\n\n/* User messages: subtle neutral background */\n.andy-message--user {\n\tbackground: var(--andy-themable-background-tertiary) !important;\n\tcolor: var(--andy-themable-text) !important;\n}\n\n/* Send button: neutral with proper icon contrast */\n.andy-input__button {\n\tbackground: var(--andy-themable-background-tertiary) !important;\n\tcolor: var(--andy-themable-text) !important;\n}\n.andy-input__button:hover {\n\tbackground: var(--andy-themable-hover) !important;\n}\n.andy-input__button-icon {\n\tcolor: var(--andy-themable-text) !important;\n\tfill: var(--andy-themable-text) !important;\n}\n\n/* Avatar: neutral */\n.andy-bot-header__icon {\n\tbackground: var(--andy-themable-background-tertiary) !important;\n\tcolor: var(--andy-themable-text) !important;\n}\n\n/* Header avatar: neutral */\n.andy-header__avatar {\n\tbackground: var(--andy-themable-background-tertiary) !important;\n\tcolor: var(--andy-themable-text) !important;\n}\n.andy-header__avatar-icon--default {\n\tfilter: none !important;\n}\n/* Dark mode: make header avatar icon white */\n:host(.andy-theme-dark) .andy-header__avatar-icon--default {\n\tfilter: brightness(0) invert(1) !important;\n}\n\n/* Remove welcome popup accent border */\n.andy-welcome-popup__content {\n\tborder-left: none !important;\n}\n\n/* Predefined questions and links: neutral text color */\n.andy-predefined-question,\n.andy-message__link,\n.andy-chat-faq__back {\n\tcolor: var(--andy-themable-text-secondary) !important;\n}\n.andy-predefined-question:hover,\n.andy-message__link:hover,\n.andy-chat-faq__back:hover {\n\tcolor: var(--andy-themable-text) !important;\n}\n`\n\t}\n\n\t// Use default blue if no brand color provided\n\tconst effectiveBrandColor = brandColor || '#3B82F6'\n\n\t// Calculate a hover variant (darker by default)\n\tconst hoverColor = effectiveBrandColor // For now, using same color. Could implement color manipulation\n\n\t// Calculate contrast text color for accessibility\n\tconst textColor = getContrastTextColor(effectiveBrandColor)\n\n\treturn `\n:host {\n\t--andy-color-primary: ${effectiveBrandColor};\n\t--andy-color-primary-hover: ${hoverColor};\n\t--andy-themable-button-primary-bg: ${effectiveBrandColor};\n\t--andy-themable-button-primary-hover: ${hoverColor};\n\t--andy-themable-button-primary-text: ${textColor};\n\t--andy-themable-message-user-bg: ${effectiveBrandColor};\n\t--andy-themable-message-user-text: ${textColor};\n\t--andy-themable-avatar-bg: ${effectiveBrandColor};\n}\n\n/* Override theme-specific button text with contrast color */\n:host(.andy-theme-light),\n:host(.andy-theme-dark),\n:host(.andy-theme-auto) {\n\t--andy-themable-button-primary-text: ${textColor};\n\t--andy-themable-message-user-text: ${textColor};\n}\n\n/* Chat bubble icon contrast color - use !important to override theme defaults */\n.andy-chat-bubble {\n\tcolor: ${textColor} !important;\n}\n.andy-chat-bubble__icon {\n\tcolor: ${textColor} !important;\n\tstroke: ${textColor} !important;\n\tfill: ${textColor} !important;\n}\n.andy-chat-bubble__icon path {\n\tstroke: inherit !important;\n\tfill: inherit !important;\n}\n.andy-chat-bubble__label {\n\tcolor: ${textColor} !important;\n}\n\n/* Send button contrast color */\n.andy-input__button {\n\tcolor: ${textColor} !important;\n}\n.andy-input__button-icon {\n\tcolor: ${textColor} !important;\n\tfill: ${textColor} !important;\n}\n\n/* User message text contrast */\n.andy-message--user {\n\tcolor: ${textColor} !important;\n}\n\n/* Welcome popup accent border when brand color is enabled */\n.andy-welcome-popup__content {\n\tborder-left: 3px solid ${effectiveBrandColor};\n}\n`\n}\n\n/**\n * Master function: Gets complete stylesheet for the chatbot\n * @param {Object} customizationProps - Customization options\n * @param {string} [customizationProps.color] - Brand color\n * @param {boolean} [customizationProps.useBrandColor] - Whether to apply brand color (default: true)\n * @param {string} [customizationProps.theme] - Theme (light, dark, auto)\n * @param {string} [customizationProps.orientation] - Orientation (left, right)\n * @param {string} [customizationProps.fontFamily] - Custom font family\n * @param {string} [customizationProps.borderRadius] - Custom border radius\n * @returns {string} Complete CSS stylesheet\n */\nexport const getFullStylesheet = (customizationProps = {}) => {\n\tlet finalCss = ''\n\n\t// Add design token variables\n\tfinalCss += generateDesignTokenVariablesString()\n\n\t// Add core structural CSS\n\tfinalCss += getCoreStructuralCssString()\n\n\t// Add theme definitions\n\tfinalCss += getThemeDefinitionsCssString()\n\n\t// Apply brand color overrides (or neutral colors if useBrandColor is false)\n\t// Always call this function - it handles defaults internally\n\tfinalCss += getBrandColorOverrideCssString(\n\t\tcustomizationProps.color,\n\t\tcustomizationProps.useBrandColor ?? true\n\t)\n\n\t// Apply font family overrides\n\tif (customizationProps.fontFamily) {\n\t\tfinalCss += `\n:host {\n\t--andy-font-family-primary: \"${customizationProps.fontFamily.replace(/\"/g, '\\\\\"')}\";\n}\n`\n\t}\n\n\t// Apply border radius overrides\n\tif (customizationProps.borderRadius) {\n\t\tfinalCss += `\n:host {\n\t--andy-radius-base: ${customizationProps.borderRadius};\n\t--andy-radius-lg: ${customizationProps.borderRadius};\n}\n`\n\t}\n\n\treturn finalCss\n}\n\n/**\n * Gets host element classes for theme and orientation\n * @param {Object} props - Customization properties\n * @param {string} [props.theme='light'] - Theme (light, dark, auto)\n * @param {string} [props.orientation='right'] - Orientation (left, right)\n * @returns {string} Space-separated class names\n */\nexport const getHostClasses = (props = {}) => {\n\tconst theme = props.theme || 'light'\n\tconst orientation = props.orientation || 'right'\n\treturn `andy-theme-${theme} andy-orientation-${orientation}`\n}\n\n// Legacy exports for backward compatibility (deprecated)\nexport const generateCssVariables = generateDesignTokenVariablesString\nexport const getBaseCss = getCoreStructuralCssString\nexport const getDarkThemeCss = getThemeDefinitionsCssString\nexport const applyThemeColor = getBrandColorOverrideCssString\nexport const applyOrientation = (orientation = 'right') => {\n\treturn getHostClasses({ orientation })\n}\n","/**\n * AndyChat UI Constants\n * Single source of truth for all UI elements (SVGs, images, etc.)\n * Both vanilla and React implementations MUST use these constants\n */\n\n// Chat Bubble Icons and Images\n// Embed the bot icon as a data URI so every bundler (React & vanilla) renders the same SVG.\nconst chatBubbleIconUrl =\n\t'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWJvdC1pY29uIGx1Y2lkZS1ib3QiPjxwYXRoIGQ9Ik0xMiA4VjRIOCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgeD0iNCIgeT0iOCIgcng9IjIiLz48cGF0aCBkPSJNMiAxNGgyIi8+PHBhdGggZD0iTTIwIDE0aDIiLz48cGF0aCBkPSJNMTUgMTN2MiIvPjxwYXRoIGQ9Ik05IDEzdjIiLz48L3N2Zz4K'\n\nexport const CHAT_BUBBLE_DEFAULT_ICON_URL = chatBubbleIconUrl\nexport const CHAT_BUBBLE_DEFAULT_ICON = `<img src=\"${CHAT_BUBBLE_DEFAULT_ICON_URL}\" alt=\"Chat\" class=\"andy-chat-bubble__icon\" />`\nconst CHAT_WINDOW_DEFAULT_HEADER_ICON = `<img src=\"${CHAT_BUBBLE_DEFAULT_ICON_URL}\" alt=\"Bot Avatar\" class=\"andy-header__avatar-icon andy-header__avatar-icon--default\" />`\nconst CHAT_WINDOW_DEFAULT_MESSAGE_ICON = `<img src=\"${CHAT_BUBBLE_DEFAULT_ICON_URL}\" alt=\"Bot Avatar\" class=\"andy-bot-header__icon-image andy-bot-header__icon-image--default\" />`\nconst CHAT_WINDOW_DEFAULT_AVATAR_ICON = `<img src=\"${CHAT_BUBBLE_DEFAULT_ICON_URL}\" alt=\"Bot Avatar\" class=\"andy-avatar__icon andy-avatar__icon--default\" />`\n\n// Footer Constants\nexport const FOOTER_TEXT = 'Powered by Andy'\nexport const FOOTER_URL = 'https://andypartner.com/'\n\n/**\n * Get footer URL with tracking parameter based on current hostname\n * @returns {string} Footer URL with ref parameter\n */\nexport const getFooterUrl = () => {\n\ttry {\n\t\t// Check if we're in a browser environment\n\t\tif (typeof window === 'undefined' || !window.location) {\n\t\t\treturn FOOTER_URL\n\t\t}\n\n\t\t// Get hostname, handling various edge cases\n\t\tlet hostname = window.location.hostname || 'direct'\n\n\t\t// Handle localhost and IP addresses\n\t\tif (\n\t\t\thostname === 'localhost' ||\n\t\t\thostname === '127.0.0.1' ||\n\t\t\thostname.match(/^\\d+\\.\\d+\\.\\d+\\.\\d+$/)\n\t\t) {\n\t\t\thostname = 'localhost'\n\t\t} else {\n\t\t\t// Clean the hostname - remove www prefix\n\t\t\thostname = hostname.replace(/^www\\./, '').toLowerCase()\n\t\t}\n\n\t\t// URL encode the hostname to handle international domains\n\t\tconst encodedHost = encodeURIComponent(hostname)\n\n\t\t// Build the URL with ref parameter\n\t\treturn `${FOOTER_URL}?ref=${encodedHost}`\n\t} catch (error) {\n\t\t// Fallback for any errors (SSR, restricted environments, etc.)\n\t\t// Silently fall back to base URL without tracking\n\t\treturn FOOTER_URL\n\t}\n}\n\n// SVG Icons - extracted from vanilla implementation\nexport const SVG_ICONS = {\n\t// Bot avatar icon (used in headers and messages)\n\tbotAvatar: CHAT_WINDOW_DEFAULT_AVATAR_ICON,\n\n\t// Header avatar icon (20x20)\n\theaderAvatar: CHAT_WINDOW_DEFAULT_HEADER_ICON,\n\n\t// Bot header icon for messages (16x16)\n\tbotHeaderIcon: CHAT_WINDOW_DEFAULT_MESSAGE_ICON,\n\n\t// Back arrow icon\n\tbackArrow: `<svg class=\"andy-header__back-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`,\n\n\t// FAQ/Help icon\n\tfaqIcon: `<svg class=\"andy-header__faq-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z\" fill=\"currentColor\"/>\n </svg>`,\n\n\t// Send button icon\n\tsendIcon: `<svg class=\"andy-input__button-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\n </svg>`,\n\n\t// Chevron down (for close state) - same filled icon as Vanilla for parity\n\tchevronDown: `<svg class=\"andy-chat-bubble__icon\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>`,\n\n\t// FAQ back button\n\tfaqBackIcon: `<svg class=\"andy-faq__back-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\" fill=\"currentColor\"/>\n </svg>`,\n\n\t// FAQ chevron\n\tfaqChevron: `<svg class=\"andy-faq-item__chevron\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 9l6 6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>`\n}\n\n// HTML Structure Constants\nexport const HTML_STRUCTURES = {\n\t// Typing indicator - ONLY dots, no bot header\n\ttypingIndicator: `<div class=\"andy-typing-indicator\">\n <div class=\"andy-typing-indicator__dot\"></div>\n <div class=\"andy-typing-indicator__dot\"></div>\n <div class=\"andy-typing-indicator__dot\"></div>\n </div>`,\n\n\t// Chat bubble with default robot icon\n\tchatBubbleDefault: CHAT_BUBBLE_DEFAULT_ICON,\n\n\t// Predefined question emoji\n\tpredefinedQuestionEmoji: '💬'\n}\n\n// Export individual components for easier importing\nexport { CHAT_BUBBLE_DEFAULT_ICON as BUBBLE_ICON }\nexport { CHAT_BUBBLE_DEFAULT_ICON_URL as BUBBLE_ICON_URL }\nexport { HTML_STRUCTURES as HTML }\nexport { SVG_ICONS as ICONS }\n\n// Localized UI Strings\n// Chrome the widget renders itself, as opposed to copy the Agent supplies.\n// Keyed by language so React and Vanilla render identical text for a visitor.\nconst UI_STRINGS = {\n\ten: {\n\t\topenChat: 'Open chat',\n\t\tcloseChat: 'Close chat',\n\t\tgoBack: 'Go back',\n\t\tmessageInput: 'Message input',\n\t\tsendMessage: 'Send message',\n\t\twelcomeMessage: 'Welcome message',\n\t\tcloseWelcomeMessage: 'Close welcome message',\n\t\tinputPlaceholder: 'Type your message...',\n\t\tpredefinedQuestionsTitle: 'What would you like to know?',\n\t\tsendFailure: 'Sorry, I could not answer. Please try again.',\n\t\thandoffWaiting: 'A team member will reply soon.',\n\t\tteamName: 'Team'\n\t},\n\tes: {\n\t\topenChat: 'Abrir chat',\n\t\tcloseChat: 'Cerrar chat',\n\t\tgoBack: 'Volver',\n\t\tmessageInput: 'Entrada de mensaje',\n\t\tsendMessage: 'Enviar mensaje',\n\t\twelcomeMessage: 'Mensaje de bienvenida',\n\t\tcloseWelcomeMessage: 'Cerrar mensaje de bienvenida',\n\t\tinputPlaceholder: 'Escribe tu mensaje...',\n\t\tpredefinedQuestionsTitle: '¿Qué te gustaría saber?',\n\t\tsendFailure: 'Lo siento, no pude responder. Inténtalo de nuevo.',\n\t\thandoffWaiting: 'Un miembro del equipo te responderá pronto.',\n\t\tteamName: 'Equipo'\n\t}\n}\n\n/**\n * Get the widget's own UI strings for a language.\n * Unknown languages fall back to English rather than rendering blanks.\n * @param {string} [lang] - Language code ('en' or 'es')\n * @returns {typeof UI_STRINGS.en} The localized string set\n */\nexport const getUiStrings = lang => UI_STRINGS[lang] || UI_STRINGS.en\n\nexport { UI_STRINGS }\n","/**\n * Mobile detection utility for AndyChat\n * Provides reliable mobile device detection with multiple methods\n */\n\n/**\n * Check if the current device is mobile\n * Uses multiple detection methods for reliability\n * @returns {boolean} True if device is mobile, false otherwise\n */\nexport const isMobileDevice = () => {\n\t// Method 1: Check for touch capability and screen size\n\tconst hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0\n\tconst isSmallScreen = window.innerWidth <= 768\n\t\n\t// Method 2: Check user agent for mobile patterns\n\tconst mobileRegex = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i\n\tconst isMobileUserAgent = mobileRegex.test(navigator.userAgent)\n\t\n\t// Method 3: Check for mobile-specific features\n\tconst hasMobileFeatures = \n\t\t'orientation' in window && \n\t\t'ondeviceorientation' in window\n\t\n\t// Method 4: Check CSS media query\n\tconst isMobileMediaQuery = window.matchMedia('(max-width: 768px) and (hover: none)').matches\n\t\n\t// Return true if any strong mobile indicators are present\n\t// Prioritize touch + small screen or explicit mobile user agent\n\treturn (hasTouch && isSmallScreen) || isMobileUserAgent || isMobileMediaQuery\n}\n\n/**\n * Check if the device has touch capability\n * @returns {boolean} True if device supports touch\n */\nexport const hasTouchCapability = () => {\n\treturn 'ontouchstart' in window || navigator.maxTouchPoints > 0\n}\n\n/**\n * Get the current device type\n * @returns {'mobile' | 'tablet' | 'desktop'} Device type\n */\nexport const getDeviceType = () => {\n\tconst width = window.innerWidth\n\t\n\tif (isMobileDevice() && width <= 768) {\n\t\treturn 'mobile'\n\t} else if (hasTouchCapability() && width > 768 && width <= 1024) {\n\t\treturn 'tablet'\n\t} else {\n\t\treturn 'desktop'\n\t}\n}\n\n/**\n * Add event listener that works for both touch and mouse events\n * @param {HTMLElement} element - Element to attach listener to\n * @param {string} eventType - Event type ('click', 'mousedown', etc.)\n * @param {Function} handler - Event handler function\n * @param {Object} options - Event listener options\n */\nexport const addPointerEventListener = (element, eventType, handler, options = {}) => {\n\tif (!element) return\n\t\n\t// For click events on mobile, also listen to touchend to ensure reliability\n\tif (eventType === 'click' && hasTouchCapability()) {\n\t\tlet touchStarted = false\n\t\t\n\t\telement.addEventListener('touchstart', () => {\n\t\t\ttouchStarted = true\n\t\t}, { passive: true })\n\t\t\n\t\telement.addEventListener('touchend', (e) => {\n\t\t\tif (touchStarted) {\n\t\t\t\te.preventDefault() // Prevent ghost click\n\t\t\t\thandler(e)\n\t\t\t\ttouchStarted = false\n\t\t\t}\n\t\t}, options)\n\t\t\n\t\t// Still add click for non-touch interactions\n\t\telement.addEventListener('click', handler, options)\n\t} else {\n\t\telement.addEventListener(eventType, handler, options)\n\t}\n}","const identityKey = chatbotId => `andy-browser:${chatbotId}`\n\nconst randomIdentity = () => ({\n\tsessionId: window.crypto.randomUUID(),\n\tcapability: btoa(String.fromCharCode(...(() => {\n\t\tconst bytes = new Uint8Array(32)\n\t\twindow.crypto.getRandomValues(bytes)\n\t\treturn bytes\n\t})()))\n})\n\nconst callConvex = async (convexUrl, kind, path, wireArgs, keepalive = false) => {\n\tconst response = await fetch(`${convexUrl}/api/${kind}`, {\n\t\tmethod: 'POST',\n\t\theaders: { 'Content-Type': 'application/json' },\n\t\tbody: JSON.stringify({ path, format: 'convex_encoded_json', args: [wireArgs] }),\n\t\tkeepalive\n\t})\n\tif (!response.ok) throw new Error(`Browser handoff ${kind} failed: ${response.status}`)\n\tconst data = await response.json()\n\tif (data.status !== 'success') throw new Error(data.errorMessage || `Browser handoff ${path} failed`)\n\treturn data.value\n}\n\nconst sortMessages = messages => [...messages].sort((left, right) =>\n\tleft.createdAt - right.createdAt || String(left.id).localeCompare(String(right.id)))\n\nexport const createBrowserHandoff = (chatbotId, bootstrap, onProjection, fresh = false) => {\n\tif (!bootstrap?.convexUrl || !bootstrap.surfaceKey || !bootstrap.surfaceProof) return null\n\tconst storageKey = identityKey(chatbotId)\n\tlet identity\n\ttry {\n\t\tconst stored = fresh ? null : JSON.parse(window.sessionStorage.getItem(storageKey) || 'null')\n\t\tidentity = stored?.sessionId && stored?.capability && stored.surfaceKey === bootstrap.surfaceKey\n\t\t\t? { sessionId: stored.sessionId, capability: stored.capability }\n\t\t\t: randomIdentity()\n\t\twindow.sessionStorage.setItem(storageKey, JSON.stringify({ ...identity, surfaceKey: bootstrap.surfaceKey }))\n\t} catch {\n\t\tidentity = randomIdentity()\n\t}\n\tconst wireArgs = () => ({ chatbotId, sessionId: identity.sessionId, capability: identity.capability, surfaceProof: bootstrap.surfaceProof })\n\tlet active = true\n\tlet visible = document.visibilityState === 'visible'\n\tlet cursor\n\tlet timer\n\tconst pending = new Set()\n\tconst acknowledged = new Set()\n\tconst acknowledging = new Set()\n\tconst localMessages = new Map()\n\tconst emit = projection => {\n\t\tif (!active) return\n\t\tif (projection?.ok === false && projection.code === 'browser_presence_unavailable') {\n\t\t\tonProjection({ offline: true, refreshBootstrap: Date.now() >= bootstrap.surfaceProofExpiresAt, identity, messages: [] })\n\t\t\treturn\n\t\t}\n\t\tif (!projection?.ok) return\n\t\tcursor = projection.cursor || cursor\n\t\tconst transcript = projection.transcript || []\n\t\tconst projected = (projection.messages || []).map(message => ({ ...message, role: 'bot', sentByHuman: true }))\n\t\tconst byId = new Map(transcript.map(message => [String(message.id), message]))\n\t\tfor (const message of localMessages.values()) {\n\t\t\tconst persisted = transcript.some(candidate => candidate.role === 'user' && candidate.content === message.content && Math.abs(candidate.createdAt - message.createdAt) < 30000)\n\t\t\tif (persisted) localMessages.delete(message.id)\n\t\t\telse byId.set(message.id, message)\n\t\t}\n\t\tprojected.forEach(message => byId.set(String(message.id), message))\n\t\tconst messages = sortMessages([...byId.values()])\n\t\tconst pendingIds = projected.map(message => String(message.id)).filter(id => !acknowledged.has(id))\n\t\tpendingIds.forEach(id => pending.add(id))\n\t\tonProjection({ identity, control: projection.control, messages, pendingProjectionIds: pendingIds })\n\t}\n\tconst project = async () => {\n\t\tif (!active || !visible) return\n\t\tif (Date.now() >= bootstrap.surfaceProofExpiresAt) {\n\t\t\temit({ ok: false, code: 'browser_presence_unavailable' })\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tconst result = await callConvex(bootstrap.convexUrl, 'query', 'browserHandoff:project', { ...wireArgs(), ...(cursor ? { cursor } : {}) })\n\t\t\temit(result)\n\t\t} catch {\n\t\t\tif (active) onProjection({ offline: true, identity, messages: [] })\n\t\t}\n\t}\n\tconst connect = async () => {\n\t\tif (!active || Date.now() >= bootstrap.surfaceProofExpiresAt) {\n\t\t\temit({ ok: false, code: 'browser_presence_unavailable' })\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tconst result = await callConvex(bootstrap.convexUrl, 'mutation', 'browserHandoff:connect', wireArgs())\n\t\t\tif (result?.ok === false) return emit(result)\n\t\t\tawait project()\n\t\t} catch {\n\t\t\tif (active) onProjection({ offline: true, identity, messages: [] })\n\t\t}\n\t}\n\tconst release = () => callConvex(bootstrap.convexUrl, 'mutation', 'browserHandoff:release', wireArgs(), true).catch(() => undefined)\n\tconst onVisibility = () => {\n\t\tvisible = document.visibilityState === 'visible'\n\t\tif (visible) void connect()\n\t\telse void release()\n\t}\n\tdocument.addEventListener('visibilitychange', onVisibility)\n\twindow.addEventListener('pagehide', release)\n\tvoid connect()\n\ttimer = window.setInterval(async () => {\n\t\tif (!active || !visible) return\n\t\tif (Date.now() >= bootstrap.surfaceProofExpiresAt) {\n\t\t\twindow.clearInterval(timer)\n\t\t\temit({ ok: false, code: 'browser_presence_unavailable' })\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tconst result = await callConvex(bootstrap.convexUrl, 'mutation', 'browserHandoff:heartbeat', wireArgs())\n\t\t\tif (result?.ok === false) emit(result)\n\t\t\telse await project()\n\t\t} catch {\n\t\t\tif (active) onProjection({ offline: true, identity, messages: [] })\n\t\t}\n\t}, 15000)\n\tconst stop = () => {\n\t\tif (!active) return\n\t\tactive = false\n\t\twindow.clearInterval(timer)\n\t\tdocument.removeEventListener('visibilitychange', onVisibility)\n\t\twindow.removeEventListener('pagehide', release)\n\t\tvoid release()\n\t}\n\treturn {\n\t\tidentity: { sessionId: identity.sessionId },\n\t\trecordVisitorMessage: content => {\n\t\t\tconst id = `local-${window.crypto.randomUUID()}`\n\t\t\tlocalMessages.set(id, { id, role: 'user', content, createdAt: Date.now(), sentByHuman: false })\n\t\t},\n\t\tmarkRendered: async messageId => {\n\t\t\tif (!active || !pending.has(messageId) || acknowledged.has(messageId) || acknowledging.has(messageId)) return\n\t\t\tacknowledging.add(messageId)\n\t\t\ttry {\n\t\t\t\tconst result = await callConvex(bootstrap.convexUrl, 'mutation', 'browserHandoff:acknowledge', { ...wireArgs(), messageId })\n\t\t\t\tif (result?.ok) {\n\t\t\t\t\tacknowledged.add(messageId)\n\t\t\t\t\tpending.delete(messageId)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (active) onProjection({ offline: true, identity, messages: [] })\n\t\t\t} finally {\n\t\t\t\tacknowledging.delete(messageId)\n\t\t\t}\n\t\t},\n\t\trestart: () => {\n\t\t\tstop()\n\t\t\treturn createBrowserHandoff(chatbotId, bootstrap, onProjection, true)\n\t\t},\n\t\tstop\n\t}\n}\n","/** In-page Requester credentials. A failed response is renewed once, before its body is consumed. */\nexport const createRequesterFetch = getRequesterPass => {\n\tlet pass = null\n\tlet loading = null\n\tlet revision = 0\n\tconst obtain = async () => {\n\t\tconst current = revision\n\t\tif (!loading) {\n\t\t\tconst pending = Promise.resolve().then(getRequesterPass).then(value => {\n\t\t\tif (current !== revision || typeof value !== 'string' || !value.trim()) throw new Error('Requester authentication is unavailable.')\n\t\t\tpass = value\n\t\t\treturn value\n\t\t\t}).catch(() => { throw new Error('Requester authentication is unavailable.') }).finally(() => { if (loading === pending) loading = null })\n\t\t\tloading = pending\n\t\t}\n\t\treturn loading\n\t}\n\tconst requesterFetch = async (url, options = {}) => {\n\t\tconst current = revision\n\t\tconst headers = new Headers(options.headers)\n\t\tif (headers.has('authorization')) throw new Error('Requester requests cannot use operator authorization.')\n\t\tconst attempt = async credential => {\n\t\t\toptions.signal?.throwIfAborted()\n\t\t\tif (current !== revision) throw new DOMException('Requester context changed.', 'AbortError')\n\t\t\tconst selected = new Headers(headers)\n\t\t\tselected.set('X-Andy-Requester', credential)\n\t\t\tconst response = await fetch(url, { ...options, headers: selected, credentials: 'omit', cache: 'no-store' })\n\t\t\tif (current !== revision) throw new DOMException('Requester context changed.', 'AbortError')\n\t\t\treturn response\n\t\t}\n\t\tlet response = await attempt(pass || await obtain())\n\t\tif (!response.ok) {\n\t\t\tconst problem = await response.clone().json().catch(() => null)\n\t\t\t// Private help and canonical Ticket HTTP use their existing problem envelopes.\n\t\t\tif (['expired', 'unknown_key'].includes(problem?.problem?.code ?? problem?.code)) {\n\t\t\t\tpass = null\n\t\t\t\tresponse = await attempt(await obtain())\n\t\t\t}\n\t\t}\n\t\treturn response\n\t}\n\trequesterFetch.clear = () => { revision++; pass = null; loading = null }\n\treturn requesterFetch\n}\n","import { getApiBaseUrl } from './config.js'\nimport { createRequesterFetch } from './requester-fetch.js'\nimport { consumeWidgetReply } from './stream-message.js'\n\nexport const createSupportClient = ({ installationId, getRequesterPass, apiBaseUrl }) => {\n\tif (!/^[a-zA-Z0-9_-]{3,100}$/.test(installationId)) throw new Error('A Support installation is required.')\n\tconst base = (apiBaseUrl || getApiBaseUrl()).replace(/\\/+$/, '')\n\tconst requesterFetch = createRequesterFetch(getRequesterPass)\n\tconst widgetUrl = `${base}/support/widget/${encodeURIComponent(installationId)}`\n\tconst json = async response => {\n\t\tconst result = await response.json().catch(() => null)\n\t\tif (!response.ok || result?.ok === false) {\n\t\t\tconst error = new Error('Support is temporarily unavailable. Please retry.')\n\t\t\terror.code = result?.problem?.code || result?.code || 'unavailable'\n\t\t\tthrow error\n\t\t}\n\t\treturn result\n\t}\n\treturn {\n\t\tbootstrap: signal => requesterFetch(widgetUrl, { signal }).then(json),\n\t\tanswer: async (messages, options = {}) => {\n\t\t\tconst response = await requesterFetch(widgetUrl, {\n\t\t\t\tmethod: 'POST', headers: { 'Content-Type': 'application/json' }, signal: options.signal,\n\t\t\t\tbody: JSON.stringify({ messages })\n\t\t\t})\n\t\t\tif (!response.ok) await json(response)\n\t\t\treturn consumeWidgetReply(response, options)\n\t\t},\n\t\toperation: async (action, input, signal) => json(await requesterFetch(`${base}/public/operations/support/request/${action}`, {\n\t\t\tmethod: 'POST', headers: { 'Content-Type': 'application/json' }, signal, body: JSON.stringify(input)\n\t\t})),\n\t\tdispose: () => requesterFetch.clear()\n\t}\n}\n","import { createSupportClient } from './support-client.js'\n\n/** One in-memory conversation/form receipt lifecycle shared by React renderers and hooks. */\nexport const createSupportController = options => {\n\tconst client = createSupportClient(options)\n\tconst listeners = new Set()\n\tlet state = { config: null, view: 'conversation', messages: [], transcript: [], tickets: [], ticket: null, entries: [], loading: true, busy: false, error: null, submission: null, followup: null, unreadCount: 0 }\n\tlet active = null\n\tlet generation = 0\n\tlet disposed = false\n\tlet submitting = null\n\tlet following = null\n\tlet visible = true\n\tlet timer = null\n\tlet lang = options.lang\n\tlet bootstrapConfig = null\n\tconst localizedConfig = () => lang && bootstrapConfig.defaultLang && lang !== bootstrapConfig.defaultLang\n\t\t? { ...bootstrapConfig, greeting: lang === 'en' ? 'How can we help?' : '¿Cómo podemos ayudarte?', questions: [] }\n\t\t: bootstrapConfig\n\tconst schedule = () => {\n\t\tclearTimeout(timer)\n\t\tif (!disposed && state.config && listeners.size) {\n\t\t\ttimer = setTimeout(() => void refresh(), 3000)\n\t\t\ttimer.unref?.()\n\t\t}\n\t}\n\tconst publish = changes => {\n\t\tif (disposed) return\n\t\tstate = { ...state, ...changes }\n\t\tlisteners.forEach(listener => listener())\n\t}\n\tconst abort = () => { generation++; active?.abort(); active = null; clearTimeout(timer) }\n\tconst fail = error => {\n\t\tif (error?.code === 'resource_not_found' && state.view === 'request') publish({ ticket: null, entries: [], followup: null })\n\t\tif (error?.code === 'ticket_resolved' && state.ticket) {\n\t\t\tupdateTicket({ ...state.ticket, status: 'resolved' })\n\t\t\tpublish({ followup: null })\n\t\t}\n\t\tpublish({ error: error?.code || 'unavailable', busy: false, loading: false })\n\t}\n\tconst request = async (work, background = false) => {\n\t\tabort()\n\t\tconst epoch = generation\n\t\tconst controller = new AbortController()\n\t\tactive = controller\n\t\tif (!background) publish({ busy: true, error: null })\n\t\ttry {\n\t\t\tconst result = await work(controller.signal, epoch)\n\t\t\tif (disposed || generation !== epoch || controller.signal.aborted) return\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (!controller.signal.aborted && generation === epoch) fail(error)\n\t\t} finally {\n\t\t\tif (active === controller) { active = null; if (!background) publish({ busy: false }); schedule() }\n\t\t}\n\t}\n\tconst current = (signal, epoch) => !disposed && generation === epoch && !signal.aborted\n\tconst page = async (action, input, signal, field) => {\n\t\tlet result, cursor\n\t\tconst values = []\n\t\tdo {\n\t\t\tresult = await client.operation(action, { ...input, pageSize: 100, ...(cursor ? { cursor } : {}) }, signal)\n\t\t\tvalues.push(...result.data[field])\n\t\t\tcursor = result.meta?.nextCursor\n\t\t} while (cursor && !signal.aborted)\n\t\treturn { ...result.data, [field]: values }\n\t}\n\tconst updateTicket = ticket => {\n\t\tconst tickets = state.tickets.map(previous => previous.id === ticket.id ? ticket : previous)\n\t\tpublish({ ticket, tickets, unreadCount: tickets.filter(ticket => ticket.unread).length })\n\t}\n\tconst readTicket = async (ticketId, signal, epoch) => {\n\t\tconst result = await page('inspect', { ticketId }, signal, 'entries')\n\t\tif (!current(signal, epoch)) return\n\t\t// Only entries returned for this reader can advance the server's seen mark.\n\t\tconst entries = result.entries.sort((a, b) => a.sequence - b.sequence)\n\t\tupdateTicket(result.ticket)\n\t\tpublish({ entries })\n\t\tconst throughSequence = Math.max(0, ...entries.map(entry => entry.sequence || 0))\n\t\tif (visible && globalThis.document?.visibilityState !== 'hidden' && throughSequence > result.ticket.requesterLastSeenSequence) {\n\t\t\tconst seen = await client.operation('mark_seen', { ticketId, throughSequence }, signal)\n\t\t\tif (current(signal, epoch)) updateTicket(seen.data.ticket)\n\t\t}\n\t}\n\tconst readRequests = async (signal, epoch) => {\n\t\tconst result = await page('list', {}, signal, 'tickets')\n\t\tif (current(signal, epoch)) publish({ tickets: result.tickets, unreadCount: result.tickets.filter(ticket => ticket.unread).length })\n\t}\n\tconst refresh = () => {\n\t\tif (disposed || !state.config) return Promise.resolve()\n\t\tif (state.busy || globalThis.document?.visibilityState === 'hidden') { schedule(); return Promise.resolve() }\n\t\treturn request(async (signal, epoch) => {\n\t\t\tawait readRequests(signal, epoch)\n\t\t\tif (current(signal, epoch) && visible && state.view === 'request' && state.ticket) await readTicket(state.ticket.id, signal, epoch)\n\t\t}, true)\n\t}\n\tconst transcript = () => state.messages.map(({ role, content }) => ({ role, content }))\n\tconst bootstrap = () => request(async (signal, epoch) => {\n\t\tconst bootstrap = await client.bootstrap(signal)\n\t\tif (generation !== epoch || signal.aborted) return\n\t\tbootstrapConfig = bootstrap\n\t\tconst config = localizedConfig()\n\t\tpublish({ config, loading: false, messages: [{ role: 'assistant', content: config.greeting }] })\n\t})\n\tconst send = async content => {\n\t\tif (state.busy || state.loading || state.view !== 'conversation' || !content.trim() || content.length > 10_000 || state.messages.length >= 39) return\n\t\tpublish({ messages: [...transcript(), { role: 'user', content: content.trim() }] })\n\t\tconst history = transcript()\n\t\treturn request(async (signal, epoch) => {\n\t\t\tconst show = text => {\n\t\t\t\tif (generation === epoch && !signal.aborted && state.view === 'conversation')\n\t\t\t\t\tpublish({ messages: [...history, { role: 'assistant', content: text }] })\n\t\t\t}\n\t\t\tconst result = await client.answer(history, { signal, onText: show })\n\t\t\tif (generation === epoch && !signal.aborted && result.status === 'agent') show(result.text)\n\t\t})\n\t}\n\tconst escalate = () => {\n\t\tif (!state.config) return\n\t\tabort()\n\t\tpublish({ view: 'form', transcript: transcript(), busy: false, error: null, submission: null, ticket: null })\n\t\tschedule()\n\t}\n\tconst submit = (subject, body, replyLanguage = 'es') => {\n\t\tif (submitting) return submitting\n\t\tif (state.view !== 'form' || !subject.trim() || !body.trim()) return Promise.resolve()\n\t\t// A retry uses the captured consent/input, even if the caller passes different arguments.\n\t\tconst submission = state.submission || { subject: subject.trim(), body: body.trim(), replyLanguage, transcript: state.transcript, idempotencyKey: crypto.randomUUID() }\n\t\tpublish({ submission })\n\t\tsubmitting = request(async (signal, epoch) => {\n\t\t\tconst result = await client.operation('open', submission, signal)\n\t\t\tif (generation === epoch && !signal.aborted) publish({ view: 'receipt', ticket: result.data.ticket, error: null })\n\t\t\treturn result\n\t\t}).finally(() => { submitting = null })\n\t\treturn submitting\n\t}\n\tconst showRequests = () => {\n\t\tabort()\n\t\tpublish({ view: 'requests', busy: false, error: null })\n\t\treturn request(readRequests)\n\t}\n\tconst inspect = ticketId => {\n\t\tabort()\n\t\tpublish({ view: 'request', ticket: null, entries: [], followup: null, busy: false, error: null })\n\t\treturn request((signal, epoch) => readTicket(ticketId, signal, epoch))\n\t}\n\tconst reply = (body, reopen = false) => {\n\t\tif (following) return following\n\t\tif (state.view !== 'request' || !state.ticket || !body.trim() || body.length > 20_000) return Promise.resolve()\n\t\tif (state.ticket.status === 'resolved' && !reopen) { publish({ error: 'ticket_resolved' }); return Promise.resolve() }\n\t\tconst action = reopen ? 'reopen' : 'reply'\n\t\tconst followup = state.followup?.action === action ? state.followup : { action, ticketId: state.ticket.id, body: body.trim(), idempotencyKey: crypto.randomUUID() }\n\t\tpublish({ followup })\n\t\tfollowing = request(async (signal, epoch) => {\n\t\t\tconst result = await client.operation(followup.action, { ticketId: followup.ticketId, body: followup.body, idempotencyKey: followup.idempotencyKey }, signal)\n\t\t\tif (!current(signal, epoch)) return\n\t\t\tawait readTicket(followup.ticketId, signal, epoch)\n\t\t\tif (current(signal, epoch)) publish({ followup: null })\n\t\t\treturn result\n\t\t}).finally(() => { following = null })\n\t\treturn following\n\t}\n\tconst newProblem = () => {\n\t\tabort()\n\t\tpublish({ view: 'form', transcript: [], submission: null, followup: null, ticket: null, entries: [], busy: false, error: null })\n\t\tschedule()\n\t}\n\tconst newConversation = () => {\n\t\tabort()\n\t\tpublish({ view: 'conversation', messages: state.config ? [{ role: 'assistant', content: state.config.greeting }] : [], transcript: [], ticket: null, entries: [], error: null, busy: false, submission: null, followup: null })\n\t\tschedule()\n\t}\n\treturn {\n\t\tgetSnapshot: () => state,\n\t\tsubscribe: listener => { listeners.add(listener); schedule(); return () => { listeners.delete(listener); if (!listeners.size) clearTimeout(timer) } },\n\t\tbootstrap, send, escalate, submit, showRequests, inspect, newConversation, refresh, reply, newProblem,\n\t\tsetLanguage: value => {\n\t\t\tlang = value\n\t\t\tif (!state.config) return\n\t\t\tconst config = localizedConfig()\n\t\t\t// A started conversation and consented transcript keep their original text.\n\t\t\tpublish({ config, ...(state.view === 'conversation' && state.messages.length === 1 ? { messages: [{ role: 'assistant', content: config.greeting }] } : {}) })\n\t\t},\n\t\tsetVisible: value => { visible = value; if (value) void refresh() },\n\t\tback: () => { abort(); publish({ view: 'conversation', busy: false, error: null, followup: null }); schedule() },\n\t\tdispose: () => { abort(); publish({ config: null, view: 'conversation', messages: [], transcript: [], ticket: null, entries: [], tickets: [], submission: null, followup: null, unreadCount: 0, busy: false, loading: true, error: null }); disposed = true; client.dispose(); listeners.clear() }\n\t}\n}\n","/** React Support panel uses the shared design tokens and its own BEM namespace. */\nexport const getSupportStylesheet = () => `\n:host { font-family: var(--andy-font-family-primary); color: #171717; line-height: 1.5; --andy-support-color: #171717; --andy-support-contrast: #fff; }\n*, *::before, *::after { box-sizing: border-box; }\n.andy-support button, .andy-support input, .andy-support textarea { font: inherit; }\n.andy-support button { cursor: pointer; }\n.andy-support button:disabled { cursor: default; opacity: .45; }\n.andy-support button:focus-visible, .andy-support a:focus-visible, .andy-support input:focus-visible, .andy-support textarea:focus-visible, .andy-support summary:focus-visible { outline: 2px solid var(--andy-support-color); outline-offset: 3px; }\n.andy-support__launcher { position: fixed; bottom: 24px; right: 24px; z-index: var(--andy-z-fixed); border: 0; border-radius: var(--andy-radius-full); padding: 14px 20px; background: var(--andy-support-color); color: var(--andy-support-contrast); box-shadow: var(--andy-shadow-lg); display: flex; gap: 24px; align-items: center; font-size: 14px; }\n.andy-support__panel { position: fixed; right: 24px; bottom: 24px; z-index: var(--andy-z-fixed); width: 400px; max-width: calc(100vw - 48px); height: min(680px, calc(100dvh - 48px)); background: #fff; border: 1px solid #e5e7eb; border-radius: 20px; box-shadow: var(--andy-shadow-xl); display: flex; flex-direction: column; overflow: hidden; font-size: 14px; }\n:host(.andy-support-host--left) .andy-support__launcher, :host(.andy-support-host--left) .andy-support__panel { left: 24px; right: auto; }\n.andy-support__header { flex-shrink: 0; position: relative; display: flex; align-items: center; gap: 10px; padding: 18px; border-bottom: 1px solid #f0f0f0; }\n.andy-support__header > button { border: 0; background: transparent; color: #737373; padding: 5px; font-size: 22px; line-height: 1; min-width: 28px; }\n.andy-support__mark { width: 34px; height: 34px; border-radius: 10px; background: var(--andy-support-color); color: var(--andy-support-contrast); display: grid; place-items: center; font-weight: 600; }\n.andy-support__identity { flex: 1; min-width: 0; display: flex; flex-direction: column; }\n.andy-support__identity strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; }\n.andy-support__identity small { color: #737373; font-size: 12px; }\n.andy-support__menu { position: absolute; top: 65px; right: 16px; background: #fff; box-shadow: var(--andy-shadow-lg); border: 1px solid #e5e7eb; border-radius: 12px; padding: 6px; z-index: 1; min-width: 210px; }\n.andy-support__menu button { display: block; border: 0; border-radius: 6px; background: none; padding: 10px; text-align: left; width: 100%; }\n.andy-support__menu button:hover { background: #f5f5f5; }\n.andy-support__content { flex: 1; min-height: 0; overflow-y: auto; padding: 24px 20px; overscroll-behavior: contain; }\n.andy-support h2 { font-size: 17px; font-weight: 600; margin: 0 0 20px; }\n.andy-support__message { white-space: pre-wrap; overflow-wrap: anywhere; margin-bottom: 16px; line-height: 1.65; }\n.andy-support__message--user { margin-left: auto; width: fit-content; max-width: 90%; padding: 10px 14px; border-radius: 16px 16px 4px 16px; background: #f5f5f5; }\n.andy-support__questions { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; margin-top: 22px; }\n.andy-support__questions button, .andy-support__secondary { border: 1px solid #e5e7eb; border-radius: 18px; background: #fff; padding: 10px 14px; text-align: left; color: #525252; }\n.andy-support__questions button:hover, .andy-support__secondary:hover { background: #fafafa; }\n.andy-support__secondary { margin-top: 8px; }\n.andy-support__composer { flex-shrink: 0; display: flex; gap: 8px; margin: 0 18px 12px; padding: 8px; border: 1px solid #e5e7eb; border-radius: var(--andy-radius-full); background: #fafafa; }\n.andy-support__composer input { flex: 1; min-width: 0; border: 0; background: none; padding: 4px 8px; outline-offset: 0; color: inherit; }\n.andy-support__composer button { border: 0; width: 32px; height: 32px; border-radius: 50%; background: var(--andy-support-color); color: var(--andy-support-contrast); font-size: 20px; }\n.andy-support__footer { flex-shrink: 0; display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; padding: 0 12px 14px; font-size: 10px; color: #a3a3a3; }\n.andy-support__footer a { color: #737373; text-decoration: none; }\n.andy-support__form { display: flex; flex-direction: column; gap: 16px; }\n.andy-support__form h2 { margin-bottom: 0; }\n.andy-support__form label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; font-weight: 500; }\n.andy-support__form input, .andy-support__form textarea { width: 100%; border: 1px solid #d4d4d4; border-radius: 10px; background: #fff; padding: 10px 12px; font-size: 14px; font-weight: 400; color: inherit; }\n.andy-support__form textarea { resize: vertical; }\n.andy-support__transcript { border: 1px solid #e5e7eb; border-radius: 10px; padding: 12px; font-size: 12px; }\n.andy-support__transcript summary { cursor: pointer; }\n.andy-support__transcript p, .andy-support__entry p { white-space: pre-wrap; overflow-wrap: anywhere; }\n.andy-support__muted { color: #737373; font-size: 12px; }\n.andy-support__primary { border: 0; border-radius: 10px; background: var(--andy-support-color); color: var(--andy-support-contrast); padding: 12px 18px; }\n.andy-support__receipt { text-align: center; padding: 30px 8px; }\n.andy-support__check { display: inline-grid; place-items: center; width: 48px; height: 48px; border-radius: 50%; background: #f5f5f5; font-size: 24px; margin-bottom: 20px; }\n.andy-support__receipt h2 { margin-bottom: 10px; }\n.andy-support__receipt > strong { font-size: 22px; }\n.andy-support__receipt .andy-support__primary { margin-top: 16px; }\n.andy-support__ticket { display: grid; grid-template-columns: 1fr auto; gap: 4px 12px; width: 100%; text-align: left; padding: 16px 0; border: 0; border-bottom: 1px solid #eee; background: none; }\n.andy-support__ticket small { grid-column: 1; color: #737373; }\n.andy-support__ticket > span:last-child { grid-column: 2; grid-row: 1 / 3; align-self: center; font-size: 20px; }\n.andy-support__entry { border-bottom: 1px solid #eee; padding: 16px 0; }\n.andy-support__unread { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; margin-left: 6px; vertical-align: middle; }\n.andy-support__ticket .andy-support__unread, .andy-support__menu .andy-support__unread { color: var(--andy-support-color); }\n.andy-support__request-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }\n.andy-support__request-actions .andy-support__secondary { margin-top: 0; }\n.andy-support__followup { flex-shrink: 0; display: flex; flex-direction: column; gap: 8px; margin: 0 18px 12px; }\n.andy-support__followup label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; }\n.andy-support__followup textarea { width: 100%; max-height: 120px; resize: vertical; border: 1px solid #d4d4d4; border-radius: 10px; padding: 10px 12px; color: inherit; background: #fff; }\n.andy-support__followup button { align-self: flex-end; }\n.andy-support__error { margin-top: 16px; padding: 12px; border-radius: 10px; background: #fef2f2; color: #991b1b; font-size: 12px; }\n.andy-support__error button { border: 0; background: none; color: inherit; text-decoration: underline; padding: 0; }\n@media (max-width: 600px) { .andy-support__panel, :host(.andy-support-host--left) .andy-support__panel { inset: 0; width: 100%; max-width: none; height: 100dvh; border-radius: 0; border: 0; padding-bottom: env(safe-area-inset-bottom); } .andy-support__launcher { bottom: calc(18px + env(safe-area-inset-bottom)); right: 18px; } }\n@media (prefers-reduced-motion: reduce) { .andy-support__content { scroll-behavior: auto; } }\n`\n","import { useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport { createSupportController, type SupportOptions, type SupportState } from 'andy-widget-core'\n\nconst empty: SupportState = { config: null, view: 'conversation', messages: [], transcript: [], tickets: [], ticket: null, entries: [], loading: true, busy: false, error: null, submission: null, followup: null, unreadCount: 0 }\nconst noSubscribe = () => () => {}\nconst emptySnapshot = () => empty\n\n/** The host context key changes before a new user/company is allowed to see any previous state. */\nexport const useSupportChat = (options: SupportOptions | null) => {\n\tconst key = options ? JSON.stringify([options.installationId, options.contextKey, options.apiBaseUrl]) : null\n\tconst callback = useRef(options?.getRequesterPass)\n\tcallback.current = options?.getRequesterPass\n\tconst [owned, setOwned] = useState<{ key: string; controller: ReturnType<typeof createSupportController> } | null>(null)\n\tconst controller = owned?.key === key ? owned?.controller : null\n\tconst state = useSyncExternalStore(controller?.subscribe || noSubscribe, controller?.getSnapshot || emptySnapshot, emptySnapshot)\n\tuseEffect(() => {\n\t\tif (!options || !key) return\n\t\tconst controller = createSupportController({ ...options, getRequesterPass: () => callback.current!() })\n\t\tsetOwned({ key, controller })\n\t\tvoid controller.bootstrap()\n\t\treturn () => controller.dispose()\n\t}, [key])\n\tuseEffect(() => { controller?.setLanguage(options?.lang) }, [controller, options?.lang])\n\tconst ready = !!state.config\n\tuseEffect(() => {\n\t\tif (ready && options?.ticketId) void controller?.inspect(options.ticketId)\n\t}, [controller, ready, options?.ticketId])\n\treturn { mode: 'support' as const, state, controller }\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { generateDesignTokenVariablesString, getContrastTextColor, getSupportStylesheet, sanitizeUrl, type SupportTicket } from 'andy-widget-core'\nimport type { SupportAndyChatProps } from './types'\nimport { useSupportChat } from './hooks/useSupportChat'\n\nconst copy = {\n\tes: { support: 'Soporte', close: 'Cerrar', back: 'Volver', menu: 'Menú', new: 'Nueva conversación', team: 'Hablar con el equipo', requests: 'Mis solicitudes', placeholder: '¿En qué te podemos ayudar?', send: 'Enviar', subject: 'Asunto', detail: 'Cuéntanos qué ocurrió', notice: 'Se adjuntará esta conversación', consent: 'Al enviar, aceptas adjuntar esta conversación para que el equipo pueda ayudarte.', submit: 'Enviar solicitud', receipt: 'Solicitud enviada', promise: 'El equipo responderá en', businessDay: 'un día hábil', hours: 'horas hábiles', minutes: 'minutos hábiles', empty: 'Todavía no tienes solicitudes.', powered: 'Con tecnología de Andy', loading: 'Cargando…', retry: 'Reintentar', error: 'No pudimos completar la solicitud. Puedes reintentar.', auth: 'Tu sesión de soporte no está disponible. Vuelve a iniciar sesión en esta aplicación.', denied: 'El soporte no está disponible para esta cuenta.', transcript: 'mensajes', transcriptSingular: 'mensaje', reply: 'Escribe tu respuesta', reopen: 'Reabrir', reopening: 'Cuéntanos qué volvió a ocurrir', otherProblem: 'Es otro problema', reopened: 'Reabierto', unread: 'Respuestas sin leer', resolvedReply: 'Esta solicitud está resuelta. Reábrela para continuar con el mismo problema.', open: 'Recibido', in_progress: 'En curso', waiting_customer: 'Espera tu respuesta', resolved: 'Resuelto' },\n\ten: { support: 'Support', close: 'Close', back: 'Back', menu: 'Menu', new: 'New conversation', team: 'Talk to the team', requests: 'My requests', placeholder: 'How can we help?', send: 'Send', subject: 'Subject', detail: 'Tell us what happened', notice: 'This conversation will be attached', consent: 'By sending, you agree to attach this conversation so the team can help you.', submit: 'Send request', receipt: 'Request sent', promise: 'The team will reply within', businessDay: 'one business day', hours: 'business hours', minutes: 'business minutes', empty: 'You have no requests yet.', powered: 'Powered by Andy', loading: 'Loading…', retry: 'Retry', error: 'We could not complete the request. You can retry.', auth: 'Your support session is unavailable. Sign in again in this application.', denied: 'Support is unavailable for this account.', transcript: 'messages', transcriptSingular: 'message', reply: 'Write your reply', reopen: 'Reopen', reopening: 'Tell us what happened again', otherProblem: 'This is another problem', reopened: 'Reopened', unread: 'Unread replies', resolvedReply: 'This request is resolved. Reopen it to continue with the same problem.', open: 'Received', in_progress: 'In progress', waiting_customer: 'Waiting for your reply', resolved: 'Resolved' }\n}\n\n/** Private Requester UI. Sales bootstrap, visitor identity and storage never enter this renderer. */\nconst SupportPanel: React.FC<SupportAndyChatProps> = ({ support, lang, orientation = 'right', initialOpen = false, tooltip }) => {\n\tconst { state, controller } = useSupportChat({ ...support, lang: lang || support.lang })\n\tconst replyLanguage = lang || support.lang || state.config?.defaultLang || 'es'\n\tconst strings = copy[replyLanguage]\n\tconst [open, setOpen] = useState(initialOpen)\n\tconst [menu, setMenu] = useState(false)\n\tconst [draft, setDraft] = useState('')\n\tconst [subject, setSubject] = useState('')\n\tconst [body, setBody] = useState('')\n\tconst [replyDraft, setReplyDraft] = useState('')\n\tconst [reopening, setReopening] = useState(false)\n\tconst [selectedTicketId, setSelectedTicketId] = useState<string | null>(null)\n\tconst host = useRef<HTMLDivElement>(null)\n\tconst messages = useRef<HTMLDivElement>(null)\n\tconst [portal, setPortal] = useState<HTMLDivElement | null>(null)\n\tuseEffect(() => {\n\t\tif (!host.current) return\n\t\tconst shadow = host.current.shadowRoot || host.current.attachShadow({ mode: 'open' })\n\t\tconst style = document.createElement('style')\n\t\tstyle.textContent = generateDesignTokenVariablesString() + getSupportStylesheet()\n\t\tconst target = document.createElement('div')\n\t\tshadow.append(style, target)\n\t\tsetPortal(target)\n\t\treturn () => { style.remove(); target.remove() }\n\t}, [])\n\tuseEffect(() => {\n\t\tconst color = state.config?.branding.color || '#171717'\n\t\thost.current?.style.setProperty('--andy-support-color', color)\n\t\thost.current?.style.setProperty('--andy-support-contrast', getContrastTextColor(color))\n\t}, [state.config?.branding.color])\n\tuseEffect(() => { messages.current?.scrollTo?.({ top: messages.current.scrollHeight, behavior: 'smooth' }) }, [state.messages, state.view])\n\tuseEffect(() => { controller?.setVisible(open) }, [controller, open])\n\tuseEffect(() => { if (support.ticketId) setOpen(true) }, [support.ticketId])\n\tuseEffect(() => { if (state.ticket?.status !== 'resolved' && state.followup?.action !== 'reopen') setReopening(false) }, [state.ticket?.status, state.followup?.action])\n\tconst choose = (action: () => void) => { setMenu(false); action() }\n\tconst escalate = () => { setSubject(''); setBody(''); controller?.escalate() }\n\tconst send = () => { if (!draft.trim() || state.busy) return; void controller?.send(draft); setDraft('') }\n\tconst newProblem = () => { setSubject(''); setBody(''); setReplyDraft(''); setReopening(false); controller?.newProblem() }\n\tconst followup = async () => {\n\t\tconst result = await controller?.reply(replyDraft, reopening)\n\t\tif (result) { setReplyDraft(''); setReopening(false) }\n\t}\n\tconst unread = <span className='andy-support__unread' role='img' aria-label={strings.unread} />\n\tconst title = state.config?.branding.name || strings.support\n\tconst ticketRow = (ticket: SupportTicket) => <button key={ticket.id} type='button' className='andy-support__ticket' onClick={() => { setSelectedTicketId(ticket.id); setReplyDraft(''); setReopening(false); void controller?.inspect(ticket.id) }}><span>#{ticket.number} · {ticket.subject} {ticket.unread && unread}</span><small>{strings[ticket.status]}</small><span aria-hidden='true'>›</span></button>\n\tconst retry = () => {\n\t\tif (!state.config) void controller?.bootstrap()\n\t\telse if (state.view === 'form') void controller?.submit(subject, body, replyLanguage)\n\t\telse if (state.view === 'requests') void controller?.showRequests()\n\t\telse if (state.view === 'request' && state.followup) void followup()\n\t\telse if (state.view === 'request' && (selectedTicketId || support.ticketId)) void controller?.inspect((selectedTicketId || support.ticketId)!)\n\t}\n\tconst errorText = state.error === 'ticket_resolved' ? strings.resolvedReply : ['expired', 'unknown_key', 'malformed', 'authentication_required', 'invalid_signature'].includes(state.error || '') ? strings.auth : state.error === 'permission_denied' ? strings.denied : strings.error\n\tconst promise = state.ticket?.replyPromise || state.config?.replyPromise\n\tconst promiseText = !promise ? null : promise.minutes === promise.businessDayMinutes ? strings.businessDay : promise.minutes % 60 === 0 ? `${promise.minutes / 60} ${strings.hours}` : `${promise.minutes} ${strings.minutes}`\n\treturn <div ref={host} className={`andy-support-host andy-support-host--${orientation}`}>\n\t\t{portal && createPortal(<div className='andy-support' data-private data-ph-no-capture data-sentry-block lang={replyLanguage}>\n\t\t\t{!open && <button type='button' className='andy-support__launcher' title={tooltip} onClick={() => setOpen(true)}><span>{strings.support} · {title} {state.unreadCount > 0 && unread}</span><span aria-hidden='true'>↗</span></button>}\n\t\t\t{open && <section className='andy-support__panel' role='dialog' aria-label={`${strings.support} · ${title}`}>\n\t\t\t\t<header className='andy-support__header'>\n\t\t\t\t\t{state.view !== 'conversation' && <button type='button' aria-label={strings.back} onClick={() => state.view === 'request' ? void controller?.showRequests() : controller?.back()}>‹</button>}\n\t\t\t\t\t<span className='andy-support__mark' aria-hidden='true'>{title.slice(0, 1)}</span><div className='andy-support__identity'><strong>{title}</strong><small>{strings.support}</small></div>\n\t\t\t\t\t<button type='button' aria-label={strings.menu} aria-expanded={menu} disabled={!state.config} onClick={() => setMenu(!menu)}>···</button><button type='button' aria-label={strings.close} onClick={() => setOpen(false)}>×</button>\n\t\t\t\t\t{menu && <nav className='andy-support__menu' aria-label={strings.menu}><button type='button' onClick={() => choose(() => controller?.newConversation())}>{strings.new}</button><button type='button' onClick={() => choose(escalate)}>{strings.team}</button><button type='button' onClick={() => choose(() => void controller?.showRequests())}>{strings.requests} {state.unreadCount > 0 && unread}</button></nav>}\n\t\t\t\t</header>\n\t\t\t\t<div className='andy-support__content' ref={messages}>\n\t\t\t\t\t{state.loading && <p role='status'>{strings.loading}</p>}\n\t\t\t\t\t{state.view === 'conversation' && <>\n\t\t\t\t\t\t{state.messages.map((message, index) => <div key={index} className={`andy-support__message andy-support__message--${message.role}`}>{message.content}</div>)}\n\t\t\t\t\t\t{state.config && state.messages.length === 1 && <div className='andy-support__questions'>{state.config.questions.map(question => <button type='button' key={question} disabled={state.busy} onClick={() => void controller?.send(question)}>{question}</button>)}</div>}\n\t\t\t\t\t\t{state.busy && <p className='andy-support__muted' role='status'>···</p>}\n\t\t\t\t\t\t{state.messages.length > 1 && !state.busy && <button type='button' className='andy-support__secondary' onClick={escalate}>{strings.team} ↗</button>}\n\t\t\t\t\t</>}\n\t\t\t\t\t{state.view === 'form' && <form className='andy-support__form' onSubmit={event => { event.preventDefault(); void controller?.submit(subject, body, replyLanguage) }}>\n\t\t\t\t\t\t<h2>{strings.team}</h2><label>{strings.subject}<input required maxLength={200} value={state.submission?.subject ?? subject} readOnly={!!state.submission} disabled={state.busy} onChange={event => setSubject(event.target.value)} /></label><label>{strings.detail}<textarea required maxLength={20000} rows={5} value={state.submission?.body ?? body} readOnly={!!state.submission} disabled={state.busy} onChange={event => setBody(event.target.value)} /></label>\n\t\t\t\t\t\t<details className='andy-support__transcript'><summary>{strings.notice} · {state.transcript.length} {state.transcript.length === 1 ? strings.transcriptSingular : strings.transcript}</summary>{state.transcript.map((message, index) => <p key={index}>{message.content}</p>)}</details><p className='andy-support__muted'>{strings.consent}</p><button type='submit' className='andy-support__primary' disabled={state.busy || !subject.trim() || !body.trim()}>{state.busy ? strings.loading : strings.submit}</button>\n\t\t\t\t\t</form>}\n\t\t\t\t\t{state.view === 'receipt' && state.ticket && <div className='andy-support__receipt'><span className='andy-support__check' aria-hidden='true'>✓</span><h2>{strings.receipt}</h2><strong>#{state.ticket.number}</strong><p>{state.ticket.subject}</p>{promiseText && <p>{strings.promise} <strong>{promiseText}</strong>.</p>}<button type='button' className='andy-support__primary' onClick={() => void controller?.showRequests()}>{strings.requests}</button></div>}\n\t\t\t\t\t{state.view === 'requests' && <><h2>{strings.requests}</h2>{state.tickets.map(ticketRow)}{!state.busy && !state.error && !state.tickets.length && <p className='andy-support__muted'>{strings.empty}</p>}</>}\n\t\t\t\t\t{state.view === 'request' && state.ticket && <><h2>#{state.ticket.number} · {state.ticket.subject}</h2><p className='andy-support__muted'>{strings[state.ticket.status]}{state.ticket.reopened && ` · ${strings.reopened}`}</p>{state.entries.filter(entry => ['requester_message', 'public_reply'].includes(entry.kind)).map(entry => <article className='andy-support__entry' key={entry.id}><strong>{entry.authorName}</strong><p>{entry.body}</p></article>)}\n\t\t\t\t\t\t{state.ticket.status === 'resolved' && !reopening && <div className='andy-support__request-actions'><button type='button' className='andy-support__primary' onClick={() => setReopening(true)}>{strings.reopen}</button><button type='button' className='andy-support__secondary' onClick={newProblem}>{strings.otherProblem}</button></div>}\n\t\t\t\t\t</>}\n\t\t\t\t\t{state.error && <div className='andy-support__error' role='alert'><p>{errorText}</p>{(!state.config || state.view === 'form' || state.view === 'requests' || (state.view === 'request' && state.error !== 'ticket_resolved' && (selectedTicketId || support.ticketId))) && <button type='button' onClick={retry} disabled={state.busy}>{strings.retry}</button>}</div>}\n\t\t\t\t</div>\n\t\t\t\t{state.view === 'conversation' && <form className='andy-support__composer' onSubmit={event => { event.preventDefault(); send() }}><input aria-label={strings.placeholder} placeholder={strings.placeholder} value={draft} maxLength={10000} disabled={!state.config} onChange={event => setDraft(event.target.value)} /><button type='submit' aria-label={strings.send} disabled={state.busy || !state.config || !draft.trim()}>↑</button></form>}\n\t\t\t\t{state.view === 'request' && state.ticket && (state.ticket.status !== 'resolved' || reopening) && <form className='andy-support__followup' onSubmit={event => { event.preventDefault(); void followup() }}><label>{reopening ? strings.reopening : strings.reply}<textarea rows={3} maxLength={20000} required value={state.followup?.body ?? replyDraft} readOnly={!!state.followup} disabled={state.busy} onChange={event => setReplyDraft(event.target.value)} /></label><button type='submit' className='andy-support__primary' disabled={state.busy || !replyDraft.trim()}>{state.busy ? strings.loading : reopening ? strings.reopen : strings.send}</button></form>}\n\t\t\t\t<footer className='andy-support__footer'><span>{strings.powered}</span>{state.config?.branding.footer.map(link => <a key={link.url} href={sanitizeUrl(link.url)} target='_blank' rel='noopener noreferrer'>{link.label}</a>)}</footer>\n\t\t\t</section>}\n\t\t</div>, portal)}\n\t</div>\n}\n\n/** A host identity change also destroys local drafts and menu state before the next render. */\nexport const SupportChat: React.FC<SupportAndyChatProps> = props => <SupportPanel key={JSON.stringify([props.support.installationId, props.support.contextKey, props.support.apiBaseUrl])} {...props} />\n","import React, { useState, useEffect, useRef, useCallback, FormEvent } from 'react'\nimport ReactDOM from 'react-dom'\n\nimport {\n\tfetchChatbotConfig,\n\tgenerateSessionId,\n\tcreateGreetingMessage,\n\tsendMessageForWidget as sendMessageToAPI,\n\tsubmitUserInfo,\n\tisValidEmbedId,\n\tgetFullStylesheet,\n\tgetHostClasses,\n\tcreateBrowserHandoff,\n\tparseMarkdown,\n\tescapeHtml,\n\tCHAT_BUBBLE_DEFAULT_ICON,\n\tCHAT_BUBBLE_DEFAULT_ICON_URL,\n\tSVG_ICONS,\n\tFOOTER_TEXT,\n\tgetFooterUrl,\n\tgetDefaultBubbleLabel,\n\tgetUiStrings,\n\tisMobileDevice\n} from 'andy-widget-core'\n\nimport type { AndyChatProps, SalesAndyChatProps, ChatbotConfig, Message } from './types'\nimport { SupportChat } from './SupportChat'\n\ninterface FaqItemProps {\n\tquestion: string\n\tanswer: string\n}\n\nconst FaqItem: React.FC<FaqItemProps> = ({ question, answer }) => {\n\tconst [isOpen, setIsOpen] = useState(false)\n\n\treturn (\n\t\t<div className={`andy-faq-item ${isOpen ? 'andy-faq-item--open' : ''}`}>\n\t\t\t<button\n\t\t\t\ttype='button'\n\t\t\t\tclassName='andy-faq-item__question'\n\t\t\t\taria-expanded={isOpen}\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t>\n\t\t\t\t<span className='andy-faq-item__question-text'>{question}</span>\n\t\t\t\t<svg\n\t\t\t\t\tclassName='andy-faq-item__chevron'\n\t\t\t\t\twidth='16'\n\t\t\t\t\theight='16'\n\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\tfill='none'\n\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td='M6 9l6 6 6-6'\n\t\t\t\t\t\tstroke='currentColor'\n\t\t\t\t\t\tstrokeWidth='2'\n\t\t\t\t\t\tstrokeLinecap='round'\n\t\t\t\t\t\tstrokeLinejoin='round'\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\t\t\t<div className='andy-faq-item__answer'>\n\t\t\t\t<div className='andy-faq-item__answer-content'>{answer}</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst SalesAndyChat: React.FC<SalesAndyChatProps> = ({\n\tembedId,\n\ttooltip,\n\tname,\n\theadline,\n\tdescription,\n\twelcomeMessage,\n\tbubbleLabel,\n\tlang,\n\tpredefinedQuestions,\n\ttheme,\n\torientation,\n\tbrandColor,\n\tbubbleStyle,\n\tuseBrandColor,\n\tlogoUrl,\n\tpreviewMode = false,\n\tinitialOpen = false\n}) => {\n\tconst [config, setConfig] = useState<ChatbotConfig | null>(null)\n\t// The visitor's language wins over the Agent's own default: a Spanish Agent\n\t// embedded on an English page must still render English chrome.\n\tconst uiLang = lang || config?.defaultLang || 'en'\n\tconst strings = getUiStrings(uiLang)\n\tconst activeQuestions = predefinedQuestions?.length ? predefinedQuestions : config?.predefinedQuestions\n\tconst [isOpen, setIsOpen] = useState(initialOpen)\n\tconst [messages, setMessages] = useState<Message[]>([])\n\tconst [isLoading, setIsLoading] = useState(false)\n\tconst [replyStarted, setReplyStarted] = useState(false)\n\tconst activeReplyRef = useRef<AbortController | null>(null)\n\tconst [sessionId, setSessionId] = useState(() => generateSessionId())\n\tconst handoffRef = useRef<ReturnType<typeof createBrowserHandoff>>(null)\n\tconst pendingHandoffIdsRef = useRef<string[]>([])\n\tconst [shadowReady, setShadowReady] = useState(false)\n\tconst [showPredefinedQuestions, setShowPredefinedQuestions] = useState(true)\n\tconst [userInfoCollected, setUserInfoCollected] = useState(false)\n\tconst [isCollectingUserInfo, setIsCollectingUserInfo] = useState(false)\n\tconst [pendingMessage, setPendingMessage] = useState<string | null>(null)\n\tconst [showWelcomePopup, setShowWelcomePopup] = useState(false)\n\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\tconst shadowRef = useRef<ShadowRoot | null>(null)\n\tconst portalRef = useRef<HTMLDivElement | null>(null)\n\tconst hasOpenedRef = useRef(false)\n\tconst messagesContainerRef = useRef<HTMLDivElement>(null)\n\tconst welcomePopupShownRef = useRef(false)\n\tconst welcomePopupTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n\tuseEffect(() => {\n\t\tif (!config?.bootstrap || !config.id) return\n\t\thandoffRef.current?.stop()\n\t\tconst handoff = createBrowserHandoff(config.id, config.bootstrap, projection => {\n\t\t\tif (projection.offline) return\n\t\t\tconst paused = projection.control === 'requested' || projection.control === 'human'\n\t\t\tif (paused) activeReplyRef.current?.abort()\n\t\t\telse if (activeReplyRef.current) return\n\t\t\tsetSessionId(projection.identity.sessionId)\n\t\t\tpendingHandoffIdsRef.current = projection.pendingProjectionIds || []\n\t\t\tconst projectedMessages = projection.messages.map(message => ({ id: message.id, content: message.content, sender: message.role === 'user' ? 'user' as const : 'bot' as const, timestamp: new Date(message.createdAt).toISOString(), isHuman: message.sentByHuman }))\n\t\t\t// An empty agent projection does not mean the client-only greeting is gone.\n\t\t\tif (projection.control === 'agent' && projectedMessages.length === 0) return\n\t\t\tsetMessages(projection.control === 'requested' || projection.control === 'human'\n\t\t\t\t? [...projectedMessages, { id: 'handoff-waiting', content: strings.handoffWaiting, sender: 'bot', timestamp: new Date().toISOString(), isWaiting: true }]\n\t\t\t\t: projectedMessages)\n\t\t})\n\t\thandoffRef.current = handoff\n\t\tif (handoff) setSessionId(handoff.identity.sessionId)\n\t\treturn () => {\n\t\t\tactiveReplyRef.current?.abort()\n\t\t\thandoffRef.current?.stop()\n\t\t\thandoffRef.current = null\n\t\t}\n\t}, [config?.bootstrap, config?.id])\n\n\tuseEffect(() => {\n\t\tpendingHandoffIdsRef.current.forEach(messageId => void handoffRef.current?.markRendered(messageId))\n\t}, [messages])\n\n\t// Create shadow DOM container on mount\n\tuseEffect(() => {\n\t\tif (!containerRef.current) return\n\n\t\tlet shadow = shadowRef.current\n\t\tif (!shadow) {\n\t\t\tif (containerRef.current.shadowRoot) {\n\t\t\t\tshadow = containerRef.current.shadowRoot\n\t\t\t} else {\n\t\t\t\tshadow = containerRef.current.attachShadow({ mode: 'open' })\n\t\t\t}\n\t\t\tshadowRef.current = shadow\n\t\t}\n\n\t\tlet styleElement = shadow.querySelector('style')\n\t\tif (!styleElement) {\n\t\t\tstyleElement = document.createElement('style')\n\t\t\tshadow.appendChild(styleElement)\n\t\t}\n\n\t\tstyleElement.textContent = getFullStylesheet({\n\t\t\tcolor: config?.brandColor,\n\t\t\tuseBrandColor: config?.useBrandColor ?? true,\n\t\t\ttheme: config?.theme || 'light',\n\t\t\torientation: config?.orientation || 'right'\n\t\t})\n\n\t\tif (containerRef.current) {\n\t\t\tconst hostClasses = getHostClasses({\n\t\t\t\ttheme: config?.theme || 'light',\n\t\t\t\torientation: config?.orientation || 'right'\n\t\t\t})\n\t\t\tcontainerRef.current.className = hostClasses\n\t\t}\n\n\t\tif (!portalRef.current) {\n\t\t\tlet portalTarget = shadow.querySelector('.andy-react-portal') as HTMLDivElement | null\n\t\t\tif (!portalTarget) {\n\t\t\t\tportalTarget = document.createElement('div')\n\t\t\t\tportalTarget.className = 'andy-react-portal'\n\t\t\t\tshadow.appendChild(portalTarget)\n\t\t\t}\n\t\t\tportalRef.current = portalTarget\n\t\t}\n\n\t\tsetShadowReady(true)\n\n\t\treturn () => {\n\t\t\tshadowRef.current = null\n\t\t\tportalRef.current = null\n\t\t\tsetShadowReady(false)\n\t\t}\n\t}, [])\n\n\t// Update styles when config changes\n\tuseEffect(() => {\n\t\tif (!shadowRef.current || !config) return\n\n\t\tconst styleElement = shadowRef.current.querySelector('style')\n\t\tif (styleElement) {\n\t\t\tstyleElement.textContent = getFullStylesheet({\n\t\t\t\tcolor: config.brandColor,\n\t\t\t\tuseBrandColor: config.useBrandColor ?? true,\n\t\t\t\ttheme: config.theme || 'light',\n\t\t\t\torientation: config.orientation || 'right'\n\t\t\t})\n\t\t}\n\n\t\tif (containerRef.current) {\n\t\t\tconst hostClasses = getHostClasses({\n\t\t\t\ttheme: config.theme || 'light',\n\t\t\t\torientation: config.orientation || 'right'\n\t\t\t})\n\t\t\tcontainerRef.current.className = hostClasses\n\t\t}\n\t}, [config])\n\n\t// Close button handler\n\tuseEffect(() => {\n\t\tif (!shadowReady || !shadowRef.current || !isOpen) return\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tconst closeButton = shadowRef.current?.querySelector('#andy-close-button') as HTMLButtonElement | null\n\t\t\tif (closeButton) {\n\t\t\t\tconst handleCloseClick = () => {\n\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t}\n\t\t\t\tcloseButton.addEventListener('click', handleCloseClick)\n\t\t\t\t;(closeButton as any)._closeHandler = handleCloseClick\n\t\t\t}\n\t\t}, 100)\n\n\t\treturn () => {\n\t\t\tclearTimeout(timer)\n\t\t\tif (shadowRef.current) {\n\t\t\t\tconst closeButton = shadowRef.current.querySelector('#andy-close-button') as HTMLButtonElement | null\n\t\t\t\tif (closeButton && (closeButton as any)._closeHandler) {\n\t\t\t\t\tcloseButton.removeEventListener('click', (closeButton as any)._closeHandler)\n\t\t\t\t\tdelete (closeButton as any)._closeHandler\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [isOpen, shadowReady])\n\n\t// Click outside to close\n\tuseEffect(() => {\n\t\tif (!shadowReady || !shadowRef.current) return\n\t\tif (previewMode) return\n\n\t\tconst handleDocumentClick = (event: MouseEvent) => {\n\t\t\tif (isMobileDevice()) return\n\t\t\tif (!isOpen) return\n\n\t\t\tconst selection = window.getSelection()\n\t\t\tif (selection && selection.toString().length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst chatbotContainer = containerRef.current\n\t\t\tlet isClickInsideChatbot = false\n\n\t\t\tif (chatbotContainer && chatbotContainer.contains(event.target as Node)) {\n\t\t\t\tisClickInsideChatbot = true\n\t\t\t}\n\n\t\t\tif (event.composedPath) {\n\t\t\t\tconst path = event.composedPath()\n\t\t\t\tif (chatbotContainer && path.includes(chatbotContainer)) {\n\t\t\t\t\tisClickInsideChatbot = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (event.target === chatbotContainer) {\n\t\t\t\tisClickInsideChatbot = true\n\t\t\t}\n\n\t\t\tif (!isClickInsideChatbot) {\n\t\t\t\tsetIsOpen(false)\n\t\t\t}\n\t\t}\n\n\t\tconst handleShadowClick = (event: Event) => {\n\t\t\tconst target = event.target as Element\n\t\t\tif (\n\t\t\t\ttarget.closest('#andy-close-button') ||\n\t\t\t\ttarget.closest('#andy-send-button') ||\n\t\t\t\ttarget.closest('.andy-predefined-question')\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (target.closest('.andy-chat-window')) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('click', handleDocumentClick)\n\t\tshadowRef.current.addEventListener('click', handleShadowClick, true)\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('click', handleDocumentClick)\n\t\t\tif (shadowRef.current) {\n\t\t\t\tshadowRef.current.removeEventListener('click', handleShadowClick, true)\n\t\t\t}\n\t\t}\n\t}, [isOpen, shadowReady, previewMode])\n\n\t// Initialize config\n\tuseEffect(() => {\n\t\tif (previewMode) {\n\t\t\tconst previewConfig: ChatbotConfig = {\n\t\t\t\tid: embedId || 'preview',\n\t\t\t\tname: name || 'Andy Bot',\n\t\t\t\ttheme: theme || 'light',\n\t\t\t\tlogoUrl: logoUrl || '',\n\t\t\t\theadline: headline || '',\n\t\t\t\tbrandColor: brandColor || '#3B82F6',\n\t\t\t\tdescription: description || '',\n\t\t\t\torientation: orientation || 'right',\n\t\t\t\tbubbleStyle: bubbleStyle || 'icon',\n\t\t\t\tbubbleLabel: bubbleLabel || null,\n\t\t\t\tuseBrandColor: useBrandColor !== undefined ? useBrandColor : true,\n\t\t\t\tdefaultLang: uiLang,\n\t\t\t\tshowBranding: true,\n\t\t\t\tshowWelcomePopup: { enabled: false, seconds: 3, message: '' },\n\t\t\t\tcollectUserInfo: { enabled: false, message: '' },\n\t\t\t\twelcomeMessage: welcomeMessage || 'Hi there! How can I help you today?',\n\t\t\t\tpredefinedQuestions: predefinedQuestions || [],\n\t\t\t\tfaqs: []\n\t\t\t}\n\t\t\tsetConfig(previewConfig)\n\t\t\treturn\n\t\t}\n\n\t\tif (!embedId || !isValidEmbedId(embedId)) {\n\t\t\tsetConfig(null)\n\t\t\tconsole.warn('AndyChat: Invalid or missing embedId')\n\t\t\treturn\n\t\t}\n\n\t\tlet cancelled = false\n\n\t\tconst loadConfig = async () => {\n\t\t\ttry {\n\t\t\t\tsetConfig(null)\n\t\t\t\tconst rawConfig = await fetchChatbotConfig(embedId)\n\n\t\t\t\tconst configWithOverrides: ChatbotConfig = {\n\t\t\t\t\t...rawConfig,\n\t\t\t\t\t...(name && { name }),\n\t\t\t\t\t...(headline && { headline }),\n\t\t\t\t\t...(description && { description }),\n\t\t\t\t\t...(welcomeMessage && { welcomeMessage }),\n\t\t\t\t\t...(theme && { theme }),\n\t\t\t\t\t...(orientation && { orientation }),\n\t\t\t\t\t...(brandColor && { brandColor }),\n\t\t\t\t\t...(bubbleStyle && { bubbleStyle }),\n\t\t\t\t\t...(bubbleLabel && { bubbleLabel }),\n\t\t\t\t\t...(useBrandColor !== undefined && { useBrandColor }),\n\t\t\t\t\t...(logoUrl && { logoUrl })\n\t\t\t\t}\n\n\t\t\t\tif (!cancelled) setConfig(configWithOverrides)\n\t\t\t} catch {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetConfig(null)\n\t\t\t\t\tconsole.error('AndyChat: Failed to load configuration.')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tloadConfig()\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t}\n\t}, [\n\t\tembedId,\n\t\tname,\n\t\theadline,\n\t\tdescription,\n\t\twelcomeMessage,\n\t\tpreviewMode,\n\t\ttheme,\n\t\torientation,\n\t\tbrandColor,\n\t\tbubbleStyle,\n\t\tbubbleLabel,\n\t\tuseBrandColor,\n\t\tlogoUrl\n\t])\n\n\t// Welcome popup timer\n\tuseEffect(() => {\n\t\tif (welcomePopupTimeoutRef.current) {\n\t\t\tclearTimeout(welcomePopupTimeoutRef.current)\n\t\t\twelcomePopupTimeoutRef.current = null\n\t\t}\n\n\t\tif (config?.showWelcomePopup?.enabled && !welcomePopupShownRef.current && !isOpen) {\n\t\t\tconst delaySeconds = config.showWelcomePopup.seconds ?? 3\n\t\t\twelcomePopupTimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (!isOpen) {\n\t\t\t\t\tsetShowWelcomePopup(true)\n\t\t\t\t\twelcomePopupShownRef.current = true\n\t\t\t\t}\n\t\t\t}, delaySeconds * 1000)\n\t\t}\n\n\t\tif (isOpen && showWelcomePopup) {\n\t\t\tsetShowWelcomePopup(false)\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (welcomePopupTimeoutRef.current) {\n\t\t\t\tclearTimeout(welcomePopupTimeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [config, isOpen, showWelcomePopup])\n\n\t// Add welcome message on first open\n\tuseEffect(() => {\n\t\tif (isOpen && !hasOpenedRef.current && config?.welcomeMessage) {\n\t\t\thasOpenedRef.current = true\n\t\t\tconst greeting = createGreetingMessage(config)\n\t\t\tif (greeting) {\n\t\t\t\tsetMessages([\n\t\t\t\t\t{\n\t\t\t\t\t\tid: Date.now(),\n\t\t\t\t\t\tcontent: greeting,\n\t\t\t\t\t\tsender: 'bot',\n\t\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t}, [isOpen, config])\n\n\t// Auto-scroll\n\tuseEffect(() => {\n\t\tif (messagesContainerRef.current) {\n\t\t\tmessagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight\n\t\t}\n\t}, [messages, isLoading])\n\n\t// Form submit handler\n\tuseEffect(() => {\n\t\tif (isCollectingUserInfo && shadowRef.current) {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tconst form = shadowRef.current?.querySelector('#andy-user-info-form') as HTMLFormElement | null\n\t\t\t\tif (form) {\n\t\t\t\t\tconst handleSubmit = (e: Event) => {\n\t\t\t\t\t\thandleUserInfoSubmit(e as unknown as FormEvent<HTMLFormElement>)\n\t\t\t\t\t}\n\t\t\t\t\tform.addEventListener('submit', handleSubmit)\n\t\t\t\t\t;(form as any)._submitHandler = handleSubmit\n\t\t\t\t}\n\t\t\t}, 100)\n\n\t\t\treturn () => {\n\t\t\t\tclearTimeout(timer)\n\t\t\t\tif (shadowRef.current) {\n\t\t\t\t\tconst form = shadowRef.current.querySelector('#andy-user-info-form') as HTMLFormElement | null\n\t\t\t\t\tif (form && (form as any)._submitHandler) {\n\t\t\t\t\t\tform.removeEventListener('submit', (form as any)._submitHandler)\n\t\t\t\t\t\tdelete (form as any)._submitHandler\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [isCollectingUserInfo, messages])\n\n\tconst handleNewChat = () => {\n\t\tactiveReplyRef.current?.abort()\n\t\tactiveReplyRef.current = null\n\t\tsetIsLoading(false)\n\t\tsetReplyStarted(false)\n\t\thandoffRef.current = handoffRef.current?.restart() || null\n\t\tpendingHandoffIdsRef.current = []\n\t\tsetSessionId(handoffRef.current?.identity.sessionId || generateSessionId())\n\n\t\tif (config?.welcomeMessage) {\n\t\t\tconst greeting = createGreetingMessage(config)\n\t\t\tif (greeting) {\n\t\t\t\tsetMessages([\n\t\t\t\t\t{\n\t\t\t\t\t\tid: Date.now(),\n\t\t\t\t\t\tcontent: greeting,\n\t\t\t\t\t\tsender: 'bot',\n\t\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}\n\t\t} else {\n\t\t\tsetMessages([])\n\t\t}\n\n\t\tif (activeQuestions && activeQuestions.length > 0) {\n\t\t\tsetShowPredefinedQuestions(true)\n\t\t}\n\t}\n\n\tconst sendUserMessage = useCallback(\n\t\tasync (rawMessageText: string, options: { hidePredefined?: boolean } = {}) => {\n\t\t\tconst messageText = typeof rawMessageText === 'string' ? rawMessageText.trim() : ''\n\t\t\tif (!messageText || activeReplyRef.current) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst { hidePredefined = true } = options\n\t\t\tconst timestamp = Date.now()\n\t\t\tconst controller = new AbortController()\n\t\t\tactiveReplyRef.current = controller\n\n\t\t\tconst userMessage: Message = {\n\t\t\t\tid: timestamp,\n\t\t\t\tcontent: messageText,\n\t\t\t\tsender: 'user',\n\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t}\n\t\t\thandoffRef.current?.recordVisitorMessage(messageText)\n\t\t\tsetMessages(prev => [...prev, userMessage])\n\n\t\t\tif (hidePredefined) {\n\t\t\t\tsetShowPredefinedQuestions(false)\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tsetIsLoading(true)\n\t\t\t\tsetReplyStarted(false)\n\t\t\t\tconst showReply = (content: string, isStreaming: boolean) => {\n\t\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\t\tsetReplyStarted(true)\n\t\t\t\t\tconst reply: Message = { id: timestamp + 1, content, sender: 'bot', timestamp: new Date(timestamp).toISOString(), isStreaming }\n\t\t\t\t\tsetMessages(prev => prev.some(message => message.id === reply.id)\n\t\t\t\t\t\t? prev.map(message => message.id === reply.id ? reply : message)\n\t\t\t\t\t\t: [...prev, reply])\n\t\t\t\t}\n\t\t\t\tconst response = await sendMessageToAPI(embedId!, sessionId, messageText, {\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tonText: text => showReply(text, true)\n\t\t\t\t})\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tif (response.status === 'waiting') {\n\t\t\t\t\tsetMessages(prev => {\n\t\t\t\t\t\tconst visible = prev.filter(message => message.id !== timestamp + 1)\n\t\t\t\t\t\treturn visible.some(message => message.isWaiting) ? visible : [...visible, { id: 'handoff-waiting', content: strings.handoffWaiting, sender: 'bot', timestamp: new Date().toISOString(), isWaiting: true }]\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tshowReply(response.text, false)\n\n\t\t\t\tif (config?.collectUserInfo?.enabled && !userInfoCollected && !isCollectingUserInfo) {\n\t\t\t\t\tsetPendingMessage(messageText)\n\t\t\t\t\tsetIsCollectingUserInfo(true)\n\n\t\t\t\t\tconst formMessage: Message = {\n\t\t\t\t\t\tid: timestamp + 2,\n\t\t\t\t\t\tcontent: 'USER_INFO_FORM',\n\t\t\t\t\t\tsender: 'bot',\n\t\t\t\t\t\tisForm: true,\n\t\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t\t}\n\t\t\t\t\tsetMessages(prev => [...prev, formMessage])\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tconsole.error('AndyChat: Message request failed.')\n\t\t\t\tconst errorMessage: Message = {\n\t\t\t\t\tid: timestamp + 3,\n\t\t\t\t\tcontent: strings.sendFailure,\n\t\t\t\t\tsender: 'bot',\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tisError: true\n\t\t\t\t}\n\t\t\t\tsetMessages(prev => [...prev.filter(message => message.id !== timestamp + 1), errorMessage])\n\t\t\t} finally {\n\t\t\t\tif (activeReplyRef.current === controller) {\n\t\t\t\t\tactiveReplyRef.current = null\n\t\t\t\t\tsetIsLoading(false)\n\t\t\t\t\tsetReplyStarted(false)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[config, embedId, sessionId, userInfoCollected, isCollectingUserInfo]\n\t)\n\n\tconst handleSendMessage = useCallback(\n\t\t(messageText: string) => {\n\t\t\treturn sendUserMessage(messageText)\n\t\t},\n\t\t[sendUserMessage]\n\t)\n\n\tconst handlePredefinedQuestion = useCallback(\n\t\t(question: string) => {\n\t\t\tif (isCollectingUserInfo || isLoading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst trimmedQuestion = typeof question === 'string' ? question.trim() : ''\n\t\t\tif (!trimmedQuestion) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst input = shadowRef.current?.getElementById('andy-message-input') as HTMLInputElement | null\n\t\t\tif (input) {\n\t\t\t\tinput.value = ''\n\t\t\t}\n\n\t\t\tsendUserMessage(trimmedQuestion)\n\t\t},\n\t\t[isCollectingUserInfo, isLoading, sendUserMessage]\n\t)\n\n\t// Predefined questions click handler\n\tuseEffect(() => {\n\t\tif (!shadowRef.current) {\n\t\t\treturn\n\t\t}\n\n\t\tconst shadowRoot = shadowRef.current\n\t\tconst captureClick = (event: Event) => {\n\t\t\tconst composedTarget = event.composedPath ? event.composedPath()[0] : event.target\n\t\t\tconst elementTarget = composedTarget instanceof Element ? composedTarget : null\n\t\t\tconst button =\n\t\t\t\telementTarget?.closest?.('.andy-predefined-question') ||\n\t\t\t\tshadowRoot.querySelector('.andy-predefined-question:focus')\n\t\t\tif (!button) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ((button as HTMLButtonElement).disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst question = button.getAttribute('data-question') || button.textContent || ''\n\t\t\thandlePredefinedQuestion(question)\n\t\t}\n\n\t\tshadowRoot.addEventListener('click', captureClick)\n\t\treturn () => {\n\t\t\tshadowRoot.removeEventListener('click', captureClick)\n\t\t}\n\t}, [handlePredefinedQuestion, shadowReady])\n\n\tconst handleUserInfoSubmit = async (e: FormEvent<HTMLFormElement>) => {\n\t\te.preventDefault()\n\n\t\tconst form = e.target as HTMLFormElement\n\t\tconst nameInput = form.querySelector('#andy-user-name') as HTMLInputElement | null\n\t\tconst emailInput = form.querySelector('#andy-user-email') as HTMLInputElement | null\n\t\tconst userName = nameInput?.value\n\t\tconst email = emailInput?.value\n\n\t\tif (!userName || !email) return\n\n\t\tsetMessages(prev => prev.filter(msg => !msg.isForm))\n\n\t\tconst loadingMessage: Message = {\n\t\t\tid: Date.now(),\n\t\t\tcontent: 'LOADING',\n\t\t\tsender: 'bot',\n\t\t\tisLoading: true,\n\t\t\ttimestamp: new Date().toISOString()\n\t\t}\n\t\tsetMessages(prev => [...prev, loadingMessage])\n\n\t\ttry {\n\t\t\tawait submitUserInfo(embedId!, sessionId, { name: userName, email })\n\n\t\t\tsetUserInfoCollected(true)\n\t\t\tsetIsCollectingUserInfo(false)\n\n\t\t\tsetMessages(prev => prev.filter(msg => !msg.isLoading))\n\t\t\tsetPendingMessage(null)\n\t\t} catch (error) {\n\t\t\tconsole.error('Error submitting user info:', error)\n\t\t\tsetMessages(prev => prev.filter(msg => !msg.isLoading))\n\t\t\tconst errorMessage: Message = {\n\t\t\t\tid: Date.now() + 1,\n\t\t\t\tcontent: 'Sorry, there was an error submitting your information. Please try again.',\n\t\t\t\tsender: 'bot',\n\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t}\n\t\t\tsetMessages(prev => [...prev, errorMessage])\n\n\t\t\tsetIsCollectingUserInfo(false)\n\t\t}\n\t}\n\n\tif (!previewMode && (!embedId || !isValidEmbedId(embedId))) {\n\t\treturn null\n\t}\n\n\t// Render bubble\n\tuseEffect(() => {\n\t\tif (!shadowRef.current || !shadowReady) return\n\t\tif (!config) {\n\t\t\tshadowRef.current.querySelector('.andy-chat-bubble')?.remove()\n\t\t\treturn\n\t\t}\n\n\t\tlet bubble = shadowRef.current.querySelector('.andy-chat-bubble') as HTMLButtonElement | null\n\t\tif (!bubble) {\n\t\t\tbubble = document.createElement('button')\n\t\t\tbubble.type = 'button'\n\t\t\tbubble.className = 'andy-chat-bubble'\n\t\t\tbubble.setAttribute('aria-label', strings.openChat)\n\n\t\t\tconst tooltipHTML = tooltip\n\t\t\t\t? `<span class=\"andy-chat-bubble__tooltip\" role=\"tooltip\">${escapeHtml(tooltip)}</span>`\n\t\t\t\t: ''\n\t\t\tbubble.innerHTML = `${CHAT_BUBBLE_DEFAULT_ICON}${tooltipHTML}`\n\t\t\tshadowRef.current.appendChild(bubble)\n\n\t\t\tbubble.addEventListener('click', () => setIsOpen(prev => !prev))\n\t\t}\n\n\t\tconst isPillStyle = config?.bubbleStyle === 'pill'\n\t\tconst displayLabel =\n\t\t\tbubbleLabel || config?.bubbleLabel || (isPillStyle ? getDefaultBubbleLabel(uiLang) : null)\n\t\tconst bubbleLogoUrl = config?.logoUrl || CHAT_BUBBLE_DEFAULT_ICON_URL\n\n\t\tif (bubble) {\n\t\t\tbubble.setAttribute('aria-label', isOpen ? strings.closeChat : strings.openChat)\n\t\t\tbubble.className = 'andy-chat-bubble'\n\t\t\tif (isPillStyle) {\n\t\t\t\tbubble.classList.add('andy-chat-bubble--pill')\n\t\t\t}\n\t\t\tif (isOpen) {\n\t\t\t\tbubble.classList.add('andy-chat-bubble--open')\n\t\t\t}\n\t\t\tif (config?.theme === 'dark') {\n\t\t\t\tbubble.classList.add('andy-chat-bubble--theme-dark')\n\t\t\t}\n\t\t\tif (config) {\n\t\t\t\tbubble.classList.add('andy-chat-bubble--loaded')\n\t\t\t}\n\n\t\t\tconst tooltipHTML =\n\t\t\t\t!isOpen && tooltip && !isPillStyle\n\t\t\t\t\t? `<span class=\"andy-chat-bubble__tooltip\" role=\"tooltip\">${escapeHtml(tooltip)}</span>`\n\t\t\t\t\t: ''\n\n\t\t\tconst configUseBrandColor = config?.useBrandColor ?? true\n\t\t\tconst isDarkTheme = config?.theme === 'dark'\n\t\t\tconst needsWhiteIcon = configUseBrandColor || isDarkTheme\n\t\t\tconst iconFilterStyle = needsWhiteIcon ? '' : 'filter: none;'\n\t\t\tconst darkModeIconStyle =\n\t\t\t\t!configUseBrandColor && isDarkTheme ? 'filter: brightness(0) invert(1);' : iconFilterStyle\n\n\t\t\tif (isOpen) {\n\t\t\t\tconst chevronWithStyle = SVG_ICONS.chevronDown.replace(\n\t\t\t\t\t'class=\"andy-chat-bubble__icon\"',\n\t\t\t\t\t`class=\"andy-chat-bubble__icon\" style=\"${darkModeIconStyle}\"`\n\t\t\t\t)\n\t\t\t\tbubble.innerHTML = chevronWithStyle\n\t\t\t} else if (isPillStyle && displayLabel) {\n\t\t\t\tbubble.innerHTML = `\n\t\t\t\t\t<span class=\"andy-chat-bubble__label\">${escapeHtml(displayLabel)}</span>\n\t\t\t\t\t<img src=\"${escapeHtml(bubbleLogoUrl)}\" alt=\"Chat\" class=\"andy-chat-bubble__icon--pill\" style=\"${darkModeIconStyle}\" />\n\t\t\t\t`\n\t\t\t} else {\n\t\t\t\tif (config?.logoUrl) {\n\t\t\t\t\tbubble.innerHTML = `<img src=\"${escapeHtml(config.logoUrl)}\" alt=\"Chatbot Logo\" class=\"andy-chat-bubble__logo\" style=\"${darkModeIconStyle}\" />${tooltipHTML}`\n\t\t\t\t} else {\n\t\t\t\t\tconst defaultIconWithStyle = CHAT_BUBBLE_DEFAULT_ICON.replace(\n\t\t\t\t\t\t'class=\"andy-chat-bubble__icon\"',\n\t\t\t\t\t\t`class=\"andy-chat-bubble__icon\" style=\"${darkModeIconStyle}\"`\n\t\t\t\t\t)\n\t\t\t\t\tbubble.innerHTML = `${defaultIconWithStyle}${tooltipHTML}`\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [shadowReady, config, isOpen, tooltip, bubbleLabel])\n\n\treturn (\n\t\t<div ref={containerRef} id='andy-chatbot-container'>\n\t\t\t{portalRef.current && shadowReady && config && (\n\t\t\t\t<>\n\t\t\t\t\t{ReactDOM.createPortal(\n\t\t\t\t\t\t<div className={`andy-chat-window ${isOpen ? 'andy-chat-window--open' : ''}`}>\n\t\t\t\t\t\t\t<header className='andy-header'>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\t\t\tclassName='andy-header__back'\n\t\t\t\t\t\t\t\t\tid='andy-back-button'\n\t\t\t\t\t\t\t\t\taria-label={strings.goBack}\n\t\t\t\t\t\t\t\t\tonClick={() => setIsOpen(false)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\tclassName='andy-header__back-icon'\n\t\t\t\t\t\t\t\t\t\twidth='20'\n\t\t\t\t\t\t\t\t\t\theight='20'\n\t\t\t\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\t\t\t\tfill='none'\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td='M15 18l-6-6 6-6'\n\t\t\t\t\t\t\t\t\t\t\tstroke='currentColor'\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth='2'\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap='round'\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinejoin='round'\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t<div className='andy-header__bot-info'>\n\t\t\t\t\t\t\t\t\t<div className='andy-header__avatar'>\n\t\t\t\t\t\t\t\t\t\t{config?.logoUrl ? (\n\t\t\t\t\t\t\t\t\t\t\t<img src={config.logoUrl} alt='Bot Avatar' className='andy-header__avatar-image' />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={CHAT_BUBBLE_DEFAULT_ICON_URL}\n\t\t\t\t\t\t\t\t\t\t\t\talt='Bot Avatar'\n\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-header__avatar-icon andy-header__avatar-icon--default'\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className='andy-header__text'>\n\t\t\t\t\t\t\t\t\t\t<h1 className='andy-header__name'>{config?.name || 'Andy bot'}</h1>\n\t\t\t\t\t\t\t\t\t\t{config?.headline && (\n\t\t\t\t\t\t\t\t\t\t\t<p className='andy-header__subtitle' title={config.headline}>\n\t\t\t\t\t\t\t\t\t\t\t\t{config.headline}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\t\t\tclassName='andy-header__close'\n\t\t\t\t\t\t\t\t\tid='andy-close-button'\n\t\t\t\t\t\t\t\t\taria-label={strings.closeChat}\n\t\t\t\t\t\t\t\t\tonClick={() => setIsOpen(false)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\tclassName='andy-header__close-icon'\n\t\t\t\t\t\t\t\t\t\twidth='20'\n\t\t\t\t\t\t\t\t\t\theight='20'\n\t\t\t\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\t\t\t\tfill='none'\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td='M18 6L6 18M6 6l12 12'\n\t\t\t\t\t\t\t\t\t\t\tstroke='currentColor'\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth='2'\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap='round'\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinejoin='round'\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</header>\n\n\t\t\t\t\t\t\t<div className='andy-chat-window__messages' id='andy-messages' ref={messagesContainerRef}>\n\t\t\t\t\t\t\t\t{config?.description && (\n\t\t\t\t\t\t\t\t\t<div className='andy-chat-subtitle'>\n\t\t\t\t\t\t\t\t\t\t<p className='andy-chat-subtitle__text'>{config.description}</p>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{messages.map(message => {\n\t\t\t\t\t\t\t\t\tif (message.isForm) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={message.id} className='andy-message-container andy-message-container--form'>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-avatar'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-avatar__icon'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth='24'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight='24'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill='none'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td='M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2Z'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill='currentColor'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-message andy-message--bot andy-message--form'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-user-info-form'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-user-info-form__content'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 className='andy-user-info-form__title'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{config?.collectUserInfo?.message ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Please provide your information to continue:'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<form className='andy-user-info-form__form' id='andy-user-info-form'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-form-group'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label htmlFor='andy-user-name' className='andy-form-group__label'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype='text'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid='andy-user-name'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-form-group__input'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder='Your Name'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-form-group'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label htmlFor='andy-user-email' className='andy-form-group__label'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tEmail\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype='email'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid='andy-user-email'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-form-group__input'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder='Your Email'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype='submit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-button andy-button--primary andy-user-info-form__submit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSubmit\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (message.isLoading) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-message-container andy-message-container--bot andy-message-container--loading'\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-message andy-message--bot'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName={`andy-message-container andy-message-container--${message.sender} ${message.isWaiting ? 'andy-message-container--waiting' : ''}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{message.sender === 'bot' && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={`andy-message andy-message--bot ${message.isHuman ? 'andy-message--operator' : ''} ${message.isWaiting ? 'andy-message--waiting' : ''} ${message.isError ? 'andy-message--error' : ''}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-bot-header'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-bot-header__icon'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{config?.logoUrl ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={config.logoUrl}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talt='Bot Avatar'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-bot-header__icon-image'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={CHAT_BUBBLE_DEFAULT_ICON_URL}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talt='Bot Avatar'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-bot-header__icon-image andy-bot-header__icon-image--default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<span className='andy-bot-header__name'>\n\t\t\t\t\t\t\t\t\t\t{message.isHuman ? strings.teamName : config?.name || 'Andy bot'}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-message__content'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{message.isStreaming ? <div className='andy-message__stream'>{message.content}</div> : <div dangerouslySetInnerHTML={{ __html: parseMarkdown(message.content) }} />}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{message.sender === 'user' && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-message andy-message--user'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-message__content'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>{message.content}</p>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{isLoading && !replyStarted && (\n\t\t\t\t\t\t\t\t\t<div className='andy-message-container andy-message-container--bot andy-message-container--typing'>\n\t\t\t\t\t\t\t\t\t\t<div className='andy-message andy-message--bot andy-message--typing'>\n\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator'>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div className='andy-chat-window__bottom'>\n\t\t\t\t\t\t\t\t{activeQuestions &&\n\t\t\t\t\t\t\t\t\tactiveQuestions.length > 0 &&\n\t\t\t\t\t\t\t\t\tshowPredefinedQuestions && (\n\t\t\t\t\t\t\t\t\t\t<div className='andy-predefined-questions' id='andy-predefined-questions'>\n\t\t\t\t\t\t\t\t\t\t\t<div className='andy-predefined-questions__header'>\n\t\t\t\t\t\t\t\t\t\t\t\t<p className='andy-predefined-questions__title'>{strings.predefinedQuestionsTitle}</p>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div className='andy-predefined-questions__list'>\n\t\t\t\t\t\t\t\t\t\t\t\t{activeQuestions.map((q, index) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-predefined-question'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-question={q.question}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isCollectingUserInfo || isLoading || !config}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className='andy-predefined-question__icon'>💬</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className='andy-predefined-question__text'>{q.question}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t<div className='andy-chat-window__input'>\n\t\t\t\t\t\t\t\t\t<div className='andy-input-container'>\n\t\t\t\t\t\t\t\t\t\t<div className='andy-input'>\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype='text'\n\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-input__field'\n\t\t\t\t\t\t\t\t\t\t\t\tid='andy-message-input'\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={config ? strings.inputPlaceholder : '...'}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.messageInput}\n\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={e => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' && activeReplyRef.current) { e.preventDefault(); return }\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' && (e.target as HTMLInputElement).value.trim()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSendMessage((e.target as HTMLInputElement).value)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t;(e.target as HTMLInputElement).value = ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isCollectingUserInfo || !config}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-input__button'\n\t\t\t\t\t\t\t\t\t\t\t\tid='andy-send-button'\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={strings.sendMessage}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (activeReplyRef.current) return\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst input = shadowRef.current?.getElementById(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'andy-message-input'\n\t\t\t\t\t\t\t\t\t\t\t\t\t) as HTMLInputElement | null\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (input && input.value.trim()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSendMessage(input.value)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tinput.value = ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isCollectingUserInfo || isLoading || !config}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName='andy-input__button-icon'\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth='18'\n\t\t\t\t\t\t\t\t\t\t\t\t\theight='18'\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill='currentColor'\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path d='M2.01 21L23 12 2.01 3 2 10l15 2-15 2z' />\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{config?.showBranding !== false && (\n\t\t\t\t\t\t\t\t\t<footer className='andy-chat-window__footer'>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref={getFooterUrl()}\n\t\t\t\t\t\t\t\t\t\t\ttarget='_blank'\n\t\t\t\t\t\t\t\t\t\t\trel='noopener noreferrer'\n\t\t\t\t\t\t\t\t\t\t\tclassName='andy-chat-window__footer-link'\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className='andy-chat-window__footer-text'>{FOOTER_TEXT}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</footer>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>,\n\t\t\t\t\t\tportalRef.current\n\t\t\t\t\t)}\n\t\t\t\t\t{showWelcomePopup &&\n\t\t\t\t\t\t!isOpen &&\n\t\t\t\t\t\tReactDOM.createPortal(\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={`andy-welcome-popup ${config?.orientation === 'left' ? 'andychat-popup-left' : ''}`}\n\t\t\t\t\t\t\t\tstyle={{ display: 'block' }}\n\t\t\t\t\t\t\t\trole='dialog'\n\t\t\t\t\t\t\t\taria-label={strings.welcomeMessage}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className='andy-welcome-popup__content'>\n\t\t\t\t\t\t\t\t\t<div className='andy-welcome-popup__message'>\n\t\t\t\t\t\t\t\t\t\t{config?.showWelcomePopup?.message ||\n\t\t\t\t\t\t\t\t\t\t\tconfig?.welcomeMessage ||\n\t\t\t\t\t\t\t\t\t\t\t'Welcome! How can I help you today?'}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\t\t\t\tclassName='andy-welcome-popup__close'\n\t\t\t\t\t\t\t\t\t\taria-label={strings.closeWelcomeMessage}\n\t\t\t\t\t\t\t\t\t\tonClick={() => setShowWelcomePopup(false)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\tclassName='andy-welcome-popup__close-icon'\n\t\t\t\t\t\t\t\t\t\t\twidth='20'\n\t\t\t\t\t\t\t\t\t\t\theight='20'\n\t\t\t\t\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\t\t\t\t\tfill='none'\n\t\t\t\t\t\t\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td='M18 6L6 18M6 6l12 12'\n\t\t\t\t\t\t\t\t\t\t\t\tstroke='currentColor'\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth='2'\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap='round'\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinejoin='round'\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className='andy-welcome-popup__arrow'></div>\n\t\t\t\t\t\t\t</div>,\n\t\t\t\t\t\t\tportalRef.current\n\t\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nconst AndyChat: React.FC<AndyChatProps> = props => props.mode === 'support'\n\t? <SupportChat key={`${props.support.installationId}:${props.support.contextKey}`} {...props} />\n\t: <SalesAndyChat {...props} />\n\nexport default AndyChat\n","import { useState, useCallback, useRef, useEffect } from 'react'\nimport {\n\tfetchChatbotConfig,\n\tgenerateSessionId,\n\tcreateGreetingMessage,\n\tsendMessageForWidget as sendMessageToAPI,\n\tsubmitUserInfo as submitUserInfoAPI,\n\tinitializeConfig,\n\tvalidateChatbotConfig,\n\tnormalizeConfig,\n\tCONFIG\n} from 'andy-widget-core'\nimport type { ChatbotConfig, Message, UserInfo, UseAndyChatReturn } from '../types'\nimport type { SupportOptions } from 'andy-widget-core'\nimport { useSupportChat } from './useSupportChat'\n\nconst { SESSION_STORAGE_KEY, FORM_DISPLAY_DELAY_MS, PERSIST_SESSION } = CONFIG\n\nconst useSalesAndyChat = (embedId: string, enabled: boolean): UseAndyChatReturn => {\n\tif (enabled) initializeConfig('andy-widget-react')\n\n\tconst [config, setConfig] = useState<Partial<ChatbotConfig>>({})\n\tconst [isLoading, setIsLoading] = useState(true)\n\tconst [isOpen, setIsOpen] = useState(false)\n\tconst [error, setError] = useState<string | null>(null)\n\n\tconst [messages, setMessages] = useState<Message[]>([])\n\tconst [showingFaq, setShowingFaq] = useState(false)\n\tconst [sessionId, setSessionId] = useState(() => generateSessionId())\n\n\tconst [userInfoCollected, setUserInfoCollected] = useState(false)\n\tconst [showingWelcomePopup, setShowingWelcomePopup] = useState(false)\n\tconst [showingUserInfoForm, setShowingUserInfoForm] = useState(false)\n\tconst [welcomePopupShown, setWelcomePopupShown] = useState(false)\n\n\tconst activeReplyRef = useRef<AbortController | null>(null)\n\tuseEffect(() => () => {\n\t\tactiveReplyRef.current?.abort()\n\t\tactiveReplyRef.current = null\n\t}, [embedId])\n\n\tconst welcomeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\tconst userInfoTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n\tconst initializeChatbot = useCallback(async () => {\n\t\tif (!enabled) return\n\t\tif (!embedId) {\n\t\t\tthrow new Error('Embed ID is required')\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsLoading(true)\n\t\t\tsetError(null)\n\n\t\t\tconst rawConfig = await fetchChatbotConfig(embedId)\n\n\t\t\tconst validationResult = validateChatbotConfig(rawConfig)\n\t\t\tif (!validationResult.isValid) {\n\t\t\t\tthrow new Error(`Invalid configuration: ${validationResult.errors.join(', ')}`)\n\t\t\t}\n\n\t\t\tconst normalizedConfig = normalizeConfig(rawConfig as unknown as Record<string, unknown>) as unknown as ChatbotConfig\n\t\t\tsetConfig(normalizedConfig)\n\n\t\t\tif (PERSIST_SESSION) {\n\t\t\t\tconst storedSessionId = localStorage.getItem(SESSION_STORAGE_KEY)\n\t\t\t\tif (storedSessionId) {\n\t\t\t\t\tsetSessionId(storedSessionId)\n\t\t\t\t} else {\n\t\t\t\t\tsetSessionId(currentSessionId => {\n\t\t\t\t\t\tlocalStorage.setItem(SESSION_STORAGE_KEY, currentSessionId)\n\t\t\t\t\t\treturn currentSessionId\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (normalizedConfig.welcomeMessage) {\n\t\t\t\tconst greeting = createGreetingMessage(normalizedConfig)\n\t\t\t\tif (greeting) {\n\t\t\t\t\tconst greetingMessage: Message = {\n\t\t\t\t\t\tid: Date.now(),\n\t\t\t\t\t\tcontent: greeting,\n\t\t\t\t\t\tsender: 'bot',\n\t\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t\t}\n\t\t\t\t\tsetMessages([greetingMessage])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetIsLoading(false)\n\t\t} catch (err) {\n\t\t\tconsole.error('Failed to initialize chatbot:', err)\n\t\t\tsetError(err instanceof Error ? err.message : 'Unknown error')\n\t\t\tsetIsLoading(false)\n\t\t\tthrow err\n\t\t}\n\t}, [embedId, enabled])\n\n\tconst toggleChat = useCallback(() => {\n\t\tsetIsOpen(prev => {\n\t\t\tconst newIsOpen = !prev\n\n\t\t\tif (newIsOpen) {\n\t\t\t\tsetShowingFaq(false)\n\n\t\t\t\tconst typedConfig = config as ChatbotConfig\n\t\t\t\tif (typedConfig?.showWelcomePopup?.enabled && !welcomePopupShown) {\n\t\t\t\t\tsetShowingWelcomePopup(true)\n\t\t\t\t\tsetWelcomePopupShown(true)\n\t\t\t\t}\n\n\t\t\t\tif (typedConfig?.collectUserInfo?.enabled && !userInfoCollected) {\n\t\t\t\t\tif (userInfoTimeoutRef.current) {\n\t\t\t\t\t\tclearTimeout(userInfoTimeoutRef.current)\n\t\t\t\t\t}\n\n\t\t\t\t\tuserInfoTimeoutRef.current = setTimeout(() => {\n\t\t\t\t\t\tsetShowingUserInfoForm(true)\n\t\t\t\t\t}, FORM_DISPLAY_DELAY_MS)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsetShowingWelcomePopup(false)\n\t\t\t\tsetShowingUserInfoForm(false)\n\n\t\t\t\tif (welcomeTimeoutRef.current) {\n\t\t\t\t\tclearTimeout(welcomeTimeoutRef.current)\n\t\t\t\t}\n\t\t\t\tif (userInfoTimeoutRef.current) {\n\t\t\t\t\tclearTimeout(userInfoTimeoutRef.current)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newIsOpen\n\t\t})\n\t}, [config, welcomePopupShown, userInfoCollected])\n\n\tconst sendMessage = useCallback(\n\t\tasync (messageText: string) => {\n\t\t\tif (!enabled || !messageText.trim() || !config || !sessionId || activeReplyRef.current) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst controller = new AbortController()\n\t\t\tactiveReplyRef.current = controller\n\t\t\tconst userMessage: Message = {\n\t\t\t\tid: Date.now(),\n\t\t\t\tcontent: messageText,\n\t\t\t\tsender: 'user',\n\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t}\n\n\t\t\tsetMessages(prev => [...prev, userMessage])\n\n\t\t\tconst replyId = Date.now() + 1\n\t\t\tconst showReply = (content: string, isStreaming: boolean) => {\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tconst reply: Message = { id: replyId, content, sender: 'bot', timestamp: new Date().toISOString(), isStreaming }\n\t\t\t\tsetMessages(prev => prev.some(message => message.id === replyId)\n\t\t\t\t\t? prev.map(message => message.id === replyId ? reply : message)\n\t\t\t\t\t: [...prev, reply])\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst response = await sendMessageToAPI(embedId, sessionId, messageText, { signal: controller.signal, onText: text => showReply(text, true) })\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tif (response.status === 'waiting') {\n\t\t\t\t\tsetMessages(prev => prev.filter(message => message.id !== replyId))\n\t\t\t\t\treturn response\n\t\t\t\t}\n\t\t\t\tshowReply(response.text, false)\n\n\t\t\t\treturn response\n\t\t\t} catch (err) {\n\t\t\t\tif (controller.signal.aborted) return\n\t\t\t\tconsole.error('Error sending message:', err)\n\n\t\t\t\tconst errorMessage: Message = {\n\t\t\t\t\tid: Date.now() + 1,\n\t\t\t\t\tcontent: 'Sorry, I encountered an error. Please try again.',\n\t\t\t\t\tsender: 'bot',\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tisError: true\n\t\t\t\t}\n\n\t\t\t\tsetMessages(prev => [...prev.filter(message => message.id !== replyId), errorMessage])\n\t\t\t\tthrow err\n\t\t\t} finally {\n\t\t\t\tif (activeReplyRef.current === controller) activeReplyRef.current = null\n\t\t\t}\n\t\t},\n\t\t[embedId, sessionId, config, enabled]\n\t)\n\n\tconst showFaq = useCallback(() => {\n\t\tsetShowingFaq(true)\n\t}, [])\n\n\tconst hideFaq = useCallback(() => {\n\t\tsetShowingFaq(false)\n\t}, [])\n\n\tconst showWelcomePopup = useCallback(() => {\n\t\tsetShowingWelcomePopup(true)\n\t}, [])\n\n\tconst hideWelcomePopup = useCallback(() => {\n\t\tsetShowingWelcomePopup(false)\n\t}, [])\n\n\tconst showUserInfoForm = useCallback(() => {\n\t\tsetShowingUserInfoForm(true)\n\t}, [])\n\n\tconst hideUserInfoForm = useCallback(() => {\n\t\tsetShowingUserInfoForm(false)\n\t}, [])\n\n\tconst submitUserInfo = useCallback(\n\t\tasync (userInfo: UserInfo) => {\n\t\t\tif (!enabled) return\n\t\t\ttry {\n\t\t\t\tawait submitUserInfoAPI(embedId, sessionId, userInfo)\n\t\t\t\tsetUserInfoCollected(true)\n\t\t\t\tsetShowingUserInfoForm(false)\n\n\t\t\t\tconst confirmMessage: Message = {\n\t\t\t\t\tid: Date.now(),\n\t\t\t\t\tcontent: 'Thank you for providing your information! How can I help you today?',\n\t\t\t\t\tsender: 'bot',\n\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t}\n\n\t\t\t\tsetMessages(prev => [...prev, confirmMessage])\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('Error submitting user info:', err)\n\t\t\t\tthrow err\n\t\t\t}\n\t\t},\n\t\t[embedId, sessionId, enabled]\n\t)\n\n\tconst startNewSession = useCallback(() => {\n\t\tif (!enabled) return\n\t\tactiveReplyRef.current?.abort()\n\t\tactiveReplyRef.current = null\n\t\tconst newSessionId = generateSessionId()\n\t\tsetSessionId(newSessionId)\n\n\t\tif (PERSIST_SESSION) {\n\t\t\tlocalStorage.setItem(SESSION_STORAGE_KEY, newSessionId)\n\t\t} else {\n\t\t\tlocalStorage.removeItem(SESSION_STORAGE_KEY)\n\t\t}\n\n\t\tsetMessages([])\n\t\tsetUserInfoCollected(false)\n\t\tsetShowingFaq(false)\n\t\tsetShowingUserInfoForm(false)\n\t\tsetWelcomePopupShown(false)\n\n\t\tconst typedConfig = config as ChatbotConfig\n\t\tif (typedConfig?.welcomeMessage) {\n\t\t\tconst greeting = createGreetingMessage(typedConfig)\n\t\t\tif (greeting) {\n\t\t\t\tconst greetingMessage: Message = {\n\t\t\t\t\tid: Date.now(),\n\t\t\t\t\tcontent: greeting,\n\t\t\t\t\tsender: 'bot',\n\t\t\t\t\ttimestamp: new Date().toISOString()\n\t\t\t\t}\n\t\t\t\tsetMessages([greetingMessage])\n\t\t\t}\n\t\t}\n\t}, [config, enabled])\n\n\tconst addMessage = useCallback((message: Message) => {\n\t\tsetMessages(prev => [...prev, message])\n\t}, [])\n\n\treturn {\n\t\tconfig,\n\t\tisLoading,\n\t\tisOpen,\n\t\tshowingFaq,\n\t\tshowingWelcomePopup,\n\t\tshowingUserInfoForm,\n\t\tmessages,\n\t\tuserInfoCollected,\n\t\tsessionId,\n\t\terror,\n\n\t\tinitializeChatbot,\n\t\ttoggleChat,\n\t\tsendMessage,\n\t\tshowFaq,\n\t\thideFaq,\n\t\tshowWelcomePopup,\n\t\thideWelcomePopup,\n\t\tshowUserInfoForm,\n\t\thideUserInfoForm,\n\t\tsubmitUserInfo,\n\t\tstartNewSession,\n\t\taddMessage\n\t}\n}\n\nexport function useAndyChat(embedId: string): UseAndyChatReturn\nexport function useAndyChat(options: { mode: 'support'; support: SupportOptions }): ReturnType<typeof useSupportChat>\nexport function useAndyChat(input: string | { mode: 'support'; support: SupportOptions }) {\n\tconst support = useSupportChat(typeof input === 'string' ? null : input.support)\n\tconst sales = useSalesAndyChat(typeof input === 'string' ? input : '', typeof input === 'string')\n\treturn typeof input === 'string' ? sales : support\n}\n","import React from 'react'\nimport { CHAT_BUBBLE_DEFAULT_ICON_URL } from 'andy-widget-core'\nimport type { ChatbotConfig } from '../types'\n\ninterface ChatBubbleProps {\n\tisOpen: boolean\n\tconfig: ChatbotConfig | null\n\tonClick: () => void\n}\n\nconst ChatBubble: React.FC<ChatBubbleProps> = ({ isOpen, config, onClick }) => {\n\tconst bubbleClasses = ['andy-bubble', isOpen && 'andy-bubble--open'].filter(Boolean).join(' ')\n\n\treturn (\n\t\t<div\n\t\t\tclassName={bubbleClasses}\n\t\t\tonClick={onClick}\n\t\t\trole='button'\n\t\t\ttabIndex={0}\n\t\t\taria-label={isOpen ? 'Close chat' : 'Open chat'}\n\t\t\tonKeyDown={e => {\n\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tonClick()\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t{isOpen ? (\n\t\t\t\t<svg\n\t\t\t\t\tclassName='andy-chat-bubble__icon'\n\t\t\t\t\twidth='28'\n\t\t\t\t\theight='28'\n\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\tfill='currentColor'\n\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t>\n\t\t\t\t\t<path d='M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z' />\n\t\t\t\t</svg>\n\t\t\t) : config?.logoUrl ? (\n\t\t\t\t<img src={config.logoUrl} alt='Chatbot Logo' className='andy-chat-bubble__logo' />\n\t\t\t) : (\n\t\t\t\t<img src={CHAT_BUBBLE_DEFAULT_ICON_URL} alt='Chat' className='andy-chat-bubble__icon' />\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport default ChatBubble\n","import React, { useEffect, useRef } from 'react'\nimport { parseMarkdown } from 'andy-widget-core'\nimport type { Message } from '../types'\n\ninterface MessageProps {\n\tmessage: Message\n\tlogoUrl?: string\n\tbotName?: string\n}\n\nconst MessageComponent: React.FC<MessageProps> = ({ message, botName }) => {\n\tconst isBot = message.sender === 'bot'\n\n\tconst containerClasses = ['andy-message-container', `andy-message-container--${message.sender}`]\n\t\t.filter(Boolean)\n\t\t.join(' ')\n\n\tconst messageClasses = ['andy-message', `andy-message--${message.sender}`].filter(Boolean).join(' ')\n\n\tconst messageContent = isBot && !message.isStreaming ? parseMarkdown(message.content) : message.content\n\n\tif (isBot) {\n\t\treturn (\n\t\t\t<div className={containerClasses}>\n\t\t\t\t<div className='andy-bot-header'>\n\t\t\t\t\t<div className='andy-bot-header__icon'>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth='16'\n\t\t\t\t\t\t\theight='16'\n\t\t\t\t\t\t\tviewBox='0 0 24 24'\n\t\t\t\t\t\t\tfill='none'\n\t\t\t\t\t\t\txmlns='http://www.w3.org/2000/svg'\n\t\t\t\t\t\t\tstroke='currentColor'\n\t\t\t\t\t\t\tstrokeWidth='2'\n\t\t\t\t\t\t\tstrokeLinecap='round'\n\t\t\t\t\t\t\tstrokeLinejoin='round'\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d='M12 6V2H8' />\n\t\t\t\t\t\t\t<path d='m8 18-4 4V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2Z' />\n\t\t\t\t\t\t\t<path d='M2 12h2' />\n\t\t\t\t\t\t\t<path d='M9 11v2' />\n\t\t\t\t\t\t\t<path d='M15 11v2' />\n\t\t\t\t\t\t\t<path d='M20 12h2' />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span className='andy-bot-header__name'>{botName || 'Andy bot'}</span>\n\t\t\t\t</div>\n\t\t\t\t<div className={messageClasses}>\n\t\t\t\t\t{message.isStreaming\n\t\t\t\t\t\t? <div className='andy-message__content andy-message__stream'>{message.content}</div>\n\t\t\t\t\t\t: <div className='andy-message__content' dangerouslySetInnerHTML={{ __html: messageContent }} />}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className={containerClasses}>\n\t\t\t<div className={messageClasses}>\n\t\t\t\t<div className='andy-message__content'>\n\t\t\t\t\t<p>{messageContent}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst TypingIndicator: React.FC = () => (\n\t<div className='andy-message-container andy-message-container--bot andy-message-container--typing'>\n\t\t<div className='andy-message andy-message--bot andy-message--typing'>\n\t\t\t<div className='andy-typing-indicator'>\n\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t\t<div className='andy-typing-indicator__dot'></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n)\n\ninterface MessageListProps {\n\tmessages: Message[]\n\tisLoading: boolean\n\tlogoUrl?: string\n\tbotName?: string\n}\n\nconst MessageList: React.FC<MessageListProps> = ({ messages, isLoading, logoUrl, botName }) => {\n\tconst messagesEndRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tif (messagesEndRef.current) {\n\t\t\tmessagesEndRef.current.scrollIntoView({\n\t\t\t\tbehavior: 'smooth',\n\t\t\t\tblock: 'end'\n\t\t\t})\n\t\t}\n\t}, [messages, isLoading])\n\n\treturn (\n\t\t<>\n\t\t\t{messages.map(message => (\n\t\t\t\t<MessageComponent\n\t\t\t\t\tkey={message.id || message.timestamp}\n\t\t\t\t\tmessage={message}\n\t\t\t\t\tlogoUrl={logoUrl}\n\t\t\t\t\tbotName={botName}\n\t\t\t\t/>\n\t\t\t))}\n\n\t\t\t{isLoading && !messages.some(message => message.isStreaming) && <TypingIndicator />}\n\n\t\t\t{messages.length === 0 && !isLoading && (\n\t\t\t\t<div className='andy-empty-state'>\n\t\t\t\t\t<div className='andy-empty-state__icon'>💬</div>\n\t\t\t\t\t<div className='andy-empty-state__text'>Start a conversation by typing a message below</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div ref={messagesEndRef} />\n\t\t</>\n\t)\n}\n\nexport default MessageList\n","import React, { useState, useRef, KeyboardEvent, ChangeEvent, FormEvent } from 'react'\n\ninterface MessageInputProps {\n\tonSendMessage: (message: string) => Promise<void> | void\n\tdisabled?: boolean\n\tplaceholder?: string\n}\n\nconst MessageInput: React.FC<MessageInputProps> = ({\n\tonSendMessage,\n\tdisabled = false,\n\tplaceholder = 'Type your message here...'\n}) => {\n\tconst [message, setMessage] = useState('')\n\tconst [isSubmitting, setIsSubmitting] = useState(false)\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\n\tconst handleSubmit = async (e: FormEvent<HTMLFormElement> | KeyboardEvent<HTMLInputElement>) => {\n\t\te.preventDefault()\n\n\t\tconst trimmedMessage = message.trim()\n\t\tif (!trimmedMessage || disabled || isSubmitting) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSubmitting(true)\n\t\t\tsetMessage('')\n\t\t\tawait onSendMessage(trimmedMessage)\n\n\t\t\tif (inputRef.current) {\n\t\t\t\tinputRef.current.focus()\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Error sending message:', error)\n\t\t\tsetMessage(current => current || trimmedMessage)\n\t\t} finally {\n\t\t\tsetIsSubmitting(false)\n\t\t}\n\t}\n\n\tconst handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tsetMessage(e.target.value)\n\t}\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\tif (e.key === 'Enter' && !e.shiftKey) {\n\t\t\te.preventDefault()\n\t\t\thandleSubmit(e)\n\t\t}\n\t}\n\n\tconst isInputDisabled = disabled || isSubmitting\n\tconst canSend = message.trim().length > 0 && !isInputDisabled\n\n\treturn (\n\t\t<div className='andy-input'>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\ttype='text'\n\t\t\t\tvalue={message}\n\t\t\t\tonChange={handleInputChange}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tmaxLength={1000}\n\t\t\t\tautoComplete='off'\n\t\t\t\tid='andy-input'\n\t\t\t/>\n\t\t\t<button type='button' onClick={() => handleSubmit({ preventDefault: () => {} } as FormEvent<HTMLFormElement>)} disabled={!canSend} id='andy-send'>\n\t\t\t\t{isSubmitting ? (\n\t\t\t\t\t'...'\n\t\t\t\t) : (\n\t\t\t\t\t<svg width='18' height='18' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n\t\t\t\t\t\t<path d='M2.01 21L23 12 2.01 3 2 10l15 2-15 2z' fill='white' />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n\nexport default MessageInput\n","import React from 'react'\nimport MessageList from './MessageList'\nimport MessageInput from './MessageInput'\nimport { FOOTER_TEXT, FOOTER_URL } from 'andy-widget-core'\nimport type { ChatbotConfig, Message } from '../types'\n\ninterface ChatWindowProps {\n\tconfig: ChatbotConfig | null\n\tmessages: Message[]\n\tisLoading: boolean\n\tonClose: () => void\n\tonSendMessage: (message: string) => Promise<void> | void\n}\n\nconst ChatWindow: React.FC<ChatWindowProps> = ({ config, messages, isLoading, onClose, onSendMessage }) => {\n\tconst windowClasses = ['andy-chatbot', 'open'].filter(Boolean).join(' ')\n\n\treturn (\n\t\t<div className={windowClasses}>\n\t\t\t<div className='andy-header'>\n\t\t\t\t<div className='andy-title'>{config?.headline || 'Chat with our AI ✨'}</div>\n\t\t\t\t<div className='andy-subtitle'>{config?.description || 'Ask any question and our AI will answer'}</div>\n\n\t\t\t\t<div className='andy-close' onClick={onClose} role='button' tabIndex={0}>\n\t\t\t\t\t✕\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div className='andy-messages' id='andy-messages'>\n\t\t\t\t<MessageList\n\t\t\t\t\tmessages={messages}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tlogoUrl={config?.logoUrl}\n\t\t\t\t\tbotName={config?.name}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div className='andy-input-container'>\n\t\t\t\t<MessageInput onSendMessage={onSendMessage} disabled={isLoading} placeholder='Type your message here...' />\n\t\t\t</div>\n\n\t\t\t{config?.showBranding !== false && (\n\t\t\t\t<div className='andy-footer'>\n\t\t\t\t\t<a href={FOOTER_URL} target='_blank' rel='noopener noreferrer'>\n\t\t\t\t\t\t{FOOTER_TEXT}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport default ChatWindow\n","import React from 'react'\nimport type { FAQItem } from '../types'\n\ninterface FAQProps {\n\tfaqs?: FAQItem[]\n\tonBack: () => void\n}\n\nconst FAQ: React.FC<FAQProps> = ({ faqs = [], onBack }) => {\n\treturn (\n\t\t<div className='andy-chat-faq'>\n\t\t\t<button className='andy-chat-faq__back' onClick={onBack} type='button' aria-label='Back to chat'>\n\t\t\t\t<svg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg' width='16' height='16'>\n\t\t\t\t\t<path d='M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z' fill='currentColor' />\n\t\t\t\t</svg>\n\t\t\t\tBack to chat\n\t\t\t</button>\n\n\t\t\t<div className='andy-chat-faq__title'>Frequently Asked Questions</div>\n\n\t\t\t<div className='andy-chat-faq__list'>\n\t\t\t\t{faqs.length > 0 ? (\n\t\t\t\t\tfaqs.map((faq, index) => (\n\t\t\t\t\t\t<div key={index} className='andy-chat-faq__item'>\n\t\t\t\t\t\t\t<div className='andy-chat-faq__question'>{faq.question}</div>\n\t\t\t\t\t\t\t<div className='andy-chat-faq__answer'>{faq.answer}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))\n\t\t\t\t) : (\n\t\t\t\t\t<div className='andy-chat-faq__empty'>\n\t\t\t\t\t\t<div className='andy-chat-faq__empty-icon'>\n\t\t\t\t\t\t\t<svg width='48' height='48' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z'\n\t\t\t\t\t\t\t\t\tfill='currentColor'\n\t\t\t\t\t\t\t\t\topacity='0.3'\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className='andy-chat-faq__empty-text'>No frequently asked questions available at this time.</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default FAQ\n","import React, { useEffect, MouseEvent } from 'react'\n\ninterface WelcomePopupProps {\n\tmessage: string\n\tbrandColor?: string\n\tonClose: () => void\n}\n\nconst WelcomePopup: React.FC<WelcomePopupProps> = ({ message, onClose }) => {\n\tuseEffect(() => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tonClose()\n\t\t}, 5000)\n\n\t\treturn () => clearTimeout(timer)\n\t}, [onClose])\n\n\tconst handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n\t\tif (e.target === e.currentTarget) {\n\t\t\tonClose()\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tonClose()\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('keydown', handleEscape)\n\t\treturn () => document.removeEventListener('keydown', handleEscape)\n\t}, [onClose])\n\n\treturn (\n\t\t<div className='andy-chat-welcome-popup__backdrop' onClick={handleBackdropClick}>\n\t\t\t<div className='andy-chat-welcome-popup'>\n\t\t\t\t<button\n\t\t\t\t\tclassName='andy-chat-welcome-popup__close'\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\taria-label='Close welcome message'\n\t\t\t\t\ttype='button'\n\t\t\t\t>\n\t\t\t\t\t✕\n\t\t\t\t</button>\n\n\t\t\t\t<div className='andy-chat-welcome-popup__icon'>\n\t\t\t\t\t<svg width='32' height='32' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td='M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z'\n\t\t\t\t\t\t\tfill='currentColor'\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\n\t\t\t\t<div className='andy-chat-welcome-popup__message'>{message}</div>\n\n\t\t\t\t<button className='andy-chat-welcome-popup__button' onClick={onClose} type='button'>\n\t\t\t\t\tGet Started\n\t\t\t\t</button>\n\n\t\t\t\t<div className='andy-chat-welcome-popup__timer'>\n\t\t\t\t\t<div className='andy-chat-welcome-popup__timer-bar'></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default WelcomePopup\n","import React, { useState, useEffect, MouseEvent, ChangeEvent, FormEvent } from 'react'\nimport type { UserInfo } from '../types'\n\ninterface UserInfoFormProps {\n\theaderText?: string\n\tbrandColor?: string\n\tonSubmit: (data: UserInfo) => Promise<void> | void\n\tonClose: () => void\n}\n\ninterface FormErrors {\n\tname?: string\n\temail?: string\n\tsubmit?: string\n}\n\nconst UserInfoForm: React.FC<UserInfoFormProps> = ({ headerText, onSubmit, onClose }) => {\n\tconst [formData, setFormData] = useState<UserInfo>({\n\t\tname: '',\n\t\temail: ''\n\t})\n\tconst [errors, setErrors] = useState<FormErrors>({})\n\tconst [isSubmitting, setIsSubmitting] = useState(false)\n\n\tconst validateForm = (): boolean => {\n\t\tconst newErrors: FormErrors = {}\n\n\t\tif (!formData.name.trim()) {\n\t\t\tnewErrors.name = 'Name is required'\n\t\t} else if (formData.name.trim().length < 2) {\n\t\t\tnewErrors.name = 'Name must be at least 2 characters'\n\t\t}\n\n\t\tif (!formData.email.trim()) {\n\t\t\tnewErrors.email = 'Email is required'\n\t\t} else {\n\t\t\tconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\t\t\tif (!emailRegex.test(formData.email)) {\n\t\t\t\tnewErrors.email = 'Please enter a valid email address'\n\t\t\t}\n\t\t}\n\n\t\tsetErrors(newErrors)\n\t\treturn Object.keys(newErrors).length === 0\n\t}\n\n\tconst handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n\t\te.preventDefault()\n\n\t\tif (!validateForm() || isSubmitting) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSubmitting(true)\n\t\t\tawait onSubmit(formData)\n\t\t} catch (error) {\n\t\t\tconsole.error('Error submitting user info:', error)\n\t\t\tsetErrors({\n\t\t\t\tsubmit: 'Failed to save your information. Please try again.'\n\t\t\t})\n\t\t} finally {\n\t\t\tsetIsSubmitting(false)\n\t\t}\n\t}\n\n\tconst handleInputChange = (field: keyof UserInfo) => (e: ChangeEvent<HTMLInputElement>) => {\n\t\tsetFormData(prev => ({\n\t\t\t...prev,\n\t\t\t[field]: e.target.value\n\t\t}))\n\n\t\tif (errors[field]) {\n\t\t\tsetErrors(prev => ({\n\t\t\t\t...prev,\n\t\t\t\t[field]: undefined\n\t\t\t}))\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tconst handleEscape = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tonClose()\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('keydown', handleEscape)\n\t\treturn () => document.removeEventListener('keydown', handleEscape)\n\t}, [onClose])\n\n\tconst handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n\t\tif (e.target === e.currentTarget) {\n\t\t\tonClose()\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className='andy-chat-user-form__backdrop' onClick={handleBackdropClick}>\n\t\t\t<div className='andy-chat-user-form'>\n\t\t\t\t<button className='andy-chat-user-form__close' onClick={onClose} aria-label='Close form' type='button'>\n\t\t\t\t\t✕\n\t\t\t\t</button>\n\n\t\t\t\t<div className='andy-chat-user-form__header'>\n\t\t\t\t\t<div className='andy-chat-user-form__icon'>\n\t\t\t\t\t\t<svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'\n\t\t\t\t\t\t\t\tfill='currentColor'\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className='andy-chat-user-form__title'>{headerText || \"Let's get to know you better\"}</div>\n\t\t\t\t\t<div className='andy-chat-user-form__subtitle'>Please provide your information to continue</div>\n\t\t\t\t</div>\n\n\t\t\t\t<form className='andy-chat-user-form__form' onSubmit={handleSubmit}>\n\t\t\t\t\t<div className='andy-chat-user-form__field'>\n\t\t\t\t\t\t<label htmlFor='andy-user-name' className='andy-chat-user-form__label'>\n\t\t\t\t\t\t\tName *\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid='andy-user-name'\n\t\t\t\t\t\t\ttype='text'\n\t\t\t\t\t\t\tclassName={`andy-chat-user-form__input ${errors.name ? 'andy-chat-user-form__input--error' : ''}`}\n\t\t\t\t\t\t\tvalue={formData.name}\n\t\t\t\t\t\t\tonChange={handleInputChange('name')}\n\t\t\t\t\t\t\tplaceholder='Enter your name'\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tmaxLength={100}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{errors.name && <div className='andy-chat-user-form__error'>{errors.name}</div>}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className='andy-chat-user-form__field'>\n\t\t\t\t\t\t<label htmlFor='andy-user-email' className='andy-chat-user-form__label'>\n\t\t\t\t\t\t\tEmail *\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid='andy-user-email'\n\t\t\t\t\t\t\ttype='email'\n\t\t\t\t\t\t\tclassName={`andy-chat-user-form__input ${errors.email ? 'andy-chat-user-form__input--error' : ''}`}\n\t\t\t\t\t\t\tvalue={formData.email}\n\t\t\t\t\t\t\tonChange={handleInputChange('email')}\n\t\t\t\t\t\t\tplaceholder='Enter your email'\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\tmaxLength={100}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{errors.email && <div className='andy-chat-user-form__error'>{errors.email}</div>}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{errors.submit && <div className='andy-chat-user-form__submit-error'>{errors.submit}</div>}\n\n\t\t\t\t\t<div className='andy-chat-user-form__actions'>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype='button'\n\t\t\t\t\t\t\tclassName='andy-chat-user-form__button andy-chat-user-form__button--secondary'\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSkip for now\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype='submit'\n\t\t\t\t\t\t\tclassName='andy-chat-user-form__button andy-chat-user-form__button--primary'\n\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSubmitting ? (\n\t\t\t\t\t\t\t\t<span className='andy-chat-user-form__loading'>\n\t\t\t\t\t\t\t\t\t<span className='andy-chat-user-form__loading-dot'></span>\n\t\t\t\t\t\t\t\t\t<span className='andy-chat-user-form__loading-dot'></span>\n\t\t\t\t\t\t\t\t\t<span className='andy-chat-user-form__loading-dot'></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t'Continue'\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default UserInfoForm\n"],"names":["_jsx","_jsxs","_Fragment","sendMessageToAPI","submitUserInfo","submitUserInfoAPI"],"mappings":"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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAM,0BAA0B,GAAG,MAAM;AAChD;AACA;AACA,CAAC,OAAO;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO,MAAM,4BAA4B,GAAG,MAAM;AAClD,CAAC,OAAO;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,KAAK;AACpF,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB;AACA,EAAE,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAC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"}
|