nerdagent-chat-widget 1.0.7 ā 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/angular/nerd-chat-widget.js +1 -1
- package/dist/angular/nerd-chat-widget.js.map +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/collection/components/chat-widget/chat-widget.js +1 -1
- package/dist/collection/components/chat-widget/chat-widget.js.map +1 -1
- package/dist/collection/script.js +14 -0
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/nerdagent-chat-widget/index.esm.js +1 -1
- package/dist/nerdagent-chat-widget/index.esm.js.map +1 -1
- package/dist/react/nerd-chat-widget.js +1 -1
- package/dist/react/nerd-chat-widget.js.map +1 -1
- package/dist/vue/nerd-chat-widget.js +1 -1
- package/dist/vue/nerd-chat-widget.js.map +1 -1
- package/package.json +1 -1
|
@@ -205,7 +205,7 @@ const ChatWidget = /*@__PURE__*/ proxyCustomElement(class ChatWidget extends HTM
|
|
|
205
205
|
throw new Error('No API key or token provided');
|
|
206
206
|
}
|
|
207
207
|
const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);
|
|
208
|
-
const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke/stream`;
|
|
208
|
+
const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke-smart/stream?show_execution_time=false`;
|
|
209
209
|
const formData = new FormData();
|
|
210
210
|
const body = {
|
|
211
211
|
service_provider: "strandsagent",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"nerd-chat-widget.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/chat-widget/chat-widget.scss?tag=nerd-chat-widget&encapsulation=shadow","src/components/chat-widget/chat-widget.tsx"],"sourcesContent":[":host {\n --primary-color: #2d3e50;\n --background-color: #ffffff;\n --accent-color: #4e8cff;\n --widget-width: 350px;\n --widget-height: 500px;\n --font-family: 'Segoe UI', Arial, sans-serif;\n \n position: fixed;\n z-index: 10000;\n font-family: var(--font-family);\n box-sizing: border-box;\n display: block;\n visibility: visible;\n}\n\n:host *,\n:host *::before,\n:host *::after {\n box-sizing: border-box;\n}\n\n.chat-widget {\n position: fixed !important;\n width: var(--widget-width);\n height: var(--widget-height);\n background: var(--background-color) !important;\n border-radius: 16px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n transition: all 0.3s ease;\n display: flex !important;\n flex-direction: column;\n font-family: var(--font-family);\n visibility: visible !important;\n opacity: 1 !important;\n \n /* Ensure all container elements use the background color and font family */\n .messages-container,\n .input-container,\n .tabs {\n background: var(--background-color) !important;\n font-family: var(--font-family);\n }\n\n &.position-bottom-right {\n bottom: 20px !important;\n right: 20px !important;\n top: auto !important;\n left: auto !important;\n }\n\n &.position-bottom-left {\n bottom: 20px !important;\n left: 20px !important;\n top: auto !important;\n right: auto !important;\n }\n\n\n &.minimized {\n width: 60px !important;\n height: 60px !important;\n border-radius: 50% !important;\n cursor: pointer;\n\n .chat-header,\n .messages-container,\n .input-container,\n .tabs,\n .powered-by {\n display: none;\n }\n\n .minimize-icon {\n display: flex !important;\n }\n }\n\n &.hidden {\n display: none !important;\n }\n \n /* Ensure widget is visible by default */\n &:not(.hidden) {\n display: flex !important;\n }\n}\n\n/* Standalone minimize icon (outside main widget) */\n:host .minimize-icon {\n position: fixed !important;\n width: 60px !important;\n height: 60px !important;\n border-radius: 50% !important;\n background: var(--primary-color) !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n transition: all 0.3s ease !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2) !important;\n z-index: 10001 !important;\n font-family: var(--font-family) !important;\n visibility: visible !important;\n opacity: 1 !important;\n position: relative !important;\n\n svg {\n width: 20px !important;\n height: 20px !important;\n }\n\n &:hover {\n transform: scale(1.05) !important;\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3) !important;\n }\n\n /* Pulsing animation */\n &.pulsing {\n &::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n border-radius: 50%;\n background: var(--primary-color);\n opacity: 0.3;\n animation: pulse 2s infinite;\n }\n\n &::after {\n content: '';\n position: absolute;\n top: -8px;\n left: -8px;\n right: -8px;\n bottom: -8px;\n border-radius: 50%;\n background: var(--primary-color);\n opacity: 0.2;\n animation: pulse 2s infinite 0.5s;\n }\n }\n\n /* Popup message */\n .popup-message {\n position: absolute;\n bottom: 70px;\n right:0;\n background: var(--primary-color);\n color: white;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n white-space: nowrap;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n z-index: 10002;\n font-family: var(--font-family);\n pointer-events: none; \n }\n}\n\n.chat-header {\n background: var(--primary-color);\n color: white;\n padding: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .agent-info {\n display: flex;\n align-items: center;\n gap: 12px;\n\n .agent-avatar {\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: 2px solid rgba(255, 255, 255, 0.3);\n object-fit: cover;\n }\n\n .agent-details {\n h4 {\n margin: 0;\n font-size: 1.1em;\n font-weight: 600;\n font-family: var(--font-family);\n }\n\n p {\n margin: 0;\n font-size: 0.95em;\n opacity: 0.8;\n font-family: var(--font-family);\n }\n }\n }\n\n .controls {\n display: flex;\n gap: 6px;\n\n .control-btn {\n background: rgba(0, 0, 0, 0.1);\n border: none;\n color: #fff;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.1em;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.2);\n }\n\n &.close-btn {\n &:hover {\n background: rgba(255, 0, 0, 0.3);\n }\n }\n }\n }\n}\n\n.messages-container {\n flex: 1;\n overflow-y: auto;\n padding: 18px 16px 12px 16px;\n background: var(--background-color) !important;\n display: flex;\n flex-direction: column;\n gap: 16px;\n font-family: var(--font-family);\n\n .message {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n\n &.user {\n flex-direction: row-reverse;\n }\n\n .message-avatar {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n flex-shrink: 0;\n object-fit: cover;\n border: 1px solid #eee;\n }\n\n .user-avatar-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n flex-shrink: 0;\n background: #4e8cff;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #eee;\n \n svg {\n color: white;\n width: 12px;\n height: 12px;\n }\n }\n\n .message-content {\n max-width: 70%;\n\n .message-text {\n padding: 10px 14px;\n border-radius: 10px;\n font-size: 1em;\n line-height: 1.4;\n font-family: var(--font-family);\n }\n\n .message-time {\n font-size: 11px;\n opacity: 0.6;\n margin-top: 4px;\n font-family: var(--font-family);\n }\n }\n\n &.agent .message-content .message-text {\n background: #eafbe7;\n color: #222;\n border-radius: 10px 10px 10px 0;\n \n img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 8px 0;\n display: block;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n a {\n color: var(--accent-color);\n text-decoration: underline;\n \n &:hover {\n text-decoration: none;\n }\n }\n }\n\n &.user .message-content .message-text {\n background: #e6f4ff;\n color: #222;\n border-radius: 10px 10px 0 10px;\n \n img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 8px 0;\n display: block;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n a {\n color: var(--accent-color);\n text-decoration: underline;\n \n &:hover {\n text-decoration: none;\n }\n }\n }\n }\n\n .typing-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n color: #666;\n font-style: italic;\n font-family: var(--font-family);\n\n .typing-dots {\n display: flex;\n gap: 2px;\n\n .dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: #666;\n animation: typing 1.4s infinite;\n\n &:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n &:nth-child(3) {\n animation-delay: 0.4s;\n }\n }\n }\n }\n}\n\n.input-container {\n background: var(--background-color);\n border-top: 1px solid #eee;\n padding: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .message-input {\n flex: 1;\n border: 1px solid #e0e0e0;\n border-radius: 20px;\n padding: 8px 14px;\n font-size: 1em;\n outline: none;\n background: #fafbfc;\n font-family: var(--font-family);\n\n &:focus {\n border-color: var(--accent-color);\n }\n }\n\n .send-btn,\n .feature-btn {\n background: var(--primary-color);\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 36px;\n height: 36px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2em;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07);\n transition: opacity 0.2s;\n position: relative;\n\n &:hover {\n opacity: 0.9;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n\n .feature-btn {\n color: var(--accent-color);\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n \n .spinning {\n animation: spin 1s linear infinite;\n }\n }\n}\n\n/* Tabs CSS removed - functionality disabled */\n/*\n.tabs {\n background: var(--background-color) !important;\n border-top: 1.5px solid #e0e7ff;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: space-around;\n height: 40px;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .tab {\n flex: 1;\n text-align: center;\n padding: 6px 0;\n color: var(--primary-color);\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n\n &:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n span:not(.fallback-icon) {\n font-size: 0.91em;\n font-family: var(--font-family);\n }\n }\n}\n*/\n\n.powered-by {\n text-align: center;\n font-size: 0.8em;\n color: #aaa;\n padding: 6px 0;\n background: var(--background-color);\n border-top: 1px solid #f3f3f3;\n flex-shrink: 0;\n font-family: var(--font-family);\n line-height: 1.2;\n img {\n height: 18px;\n vertical-align: middle;\n margin-right: 6px;\n opacity: 0.85;\n object-fit: contain;\n }\n\n span, a {\n font-weight: 400;\n font-family: var(--font-family);\n }\n \n a {\n text-decoration: none;\n transition: opacity 0.2s ease;\n \n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n }\n}\n\n.minimize-icon {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 24px;\n color: white;\n background: var(--primary-color);\n border-radius: 50%;\n cursor: pointer;\n}\n\n@keyframes typing {\n 0%, 60%, 100% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-10px);\n }\n}\n\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 0.3;\n }\n 50% {\n transform: scale(1.1);\n opacity: 0.1;\n }\n 100% {\n transform: scale(1.2);\n opacity: 0;\n }\n}\n\n@keyframes popupFadeIn {\n 0% {\n opacity: 0;\n transform: translateX(-50%) translateY(10px);\n }\n 100% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n// Spinning animation for file upload\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n// Mobile responsiveness\n@media (max-width: 768px) {\n .chat-widget {\n width: 100% !important;\n height: 100% !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n border-radius: 0 !important;\n\n .messages-container {\n height: calc(100vh - 200px);\n }\n }\n}","import { Component, Prop, State, Element, Event, EventEmitter, Watch, h, Host } from '@stencil/core';\n\nexport interface ChatMessage {\n id: string;\n text: string;\n isUser: boolean;\n timestamp: Date;\n}\n\nexport type WidgetPosition = 'bottom-right' | 'bottom-left';\n\nexport interface ChatWidgetConfig {\n // Agent Information\n agentName?: string;\n agentRole?: string;\n agentAvatar?: string;\n \n // Appearance\n primaryColor?: string;\n accentColor?: string;\n fontFamily?: string;\n width?: number;\n height?: number;\n \n // Messages\n welcomeMessage?: string;\n thankYouMessage?: string;\n placeholderText?: string;\n \n // Features\n showMinimizeButton?: boolean;\n enableFileUpload?: boolean;\n enableSpeech?: boolean;\n showTimestamps?: boolean;\n collapsed?: boolean;\n \n // Position\n position?: WidgetPosition;\n \n // Branding\n showPoweredBy?: boolean;\n poweredByLogo?: string;\n poweredByText?: string;\n poweredByBrand?: string;\n poweredByUrl?: string;\n poweredByColor?: string;\n \n // API\n agentId?: string;\n apikey?: string;\n apiEndpoint?: string;\n enableDebug?: string;\n tokenEndpoint?: string;\n clientId?: string;\n clientSecret?: string;\n \n // Advanced\n zIndex?: number;\n customCSS?: string;\n \n // Animation and Popup\n enablePulsingAnimation?: boolean;\n popupMessage?: string;\n popupShowDelay?: number;\n popupHideDelay?: number;\n}\n\n@Component({\n tag: 'nerd-chat-widget',\n styleUrl: 'chat-widget.scss',\n shadow: true,\n})\nexport class ChatWidget {\n @Element() el: HTMLElement;\n\n // Configuration props\n @Prop() config: ChatWidgetConfig = {};\n @Prop() agentName: string = 'Support Agent';\n @Prop() agentRole: string = 'Customer Support';\n @Prop() agentAvatar: string = '';\n @Prop() primaryColor: string = '#2d3e50';\n @Prop() accentColor: string = '#4e8cff';\n @Prop() welcomeMessage: string = 'Hi! How can I help you today?';\n @Prop() position: WidgetPosition = 'bottom-right';\n @Prop() showMinimizeButton: boolean = true;\n @Prop() enableFileUpload: boolean = false;\n @Prop() enableSpeech: boolean = false;\n @Prop() showTimestamps: boolean = true;\n @Prop() agentId: string = '';\n @Prop() apikey: string = '';\n @Prop() token: string = '';\n @Prop() apiEndpoint: string = '';\n @Prop() enableDebug: string = '';\n @Prop() placeholderText: string = 'Type your message...';\n @Prop() thankYouMessage: string = 'Thank you for chatting with us!';\n @Prop() showPoweredBy: boolean = true;\n @Prop() poweredByLogo: string = 'https://innovationincubator.com/wp-content/uploads/2023/05/Innovation-Incubator-logo.png';\n @Prop() poweredByText: string = 'Powered by';\n @Prop() poweredByBrand: string = 'NerdAgent';\n @Prop() poweredByUrl: string = 'https://nerdagent.com';\n @Prop() poweredByColor: string = '#4e8cff';\n @Prop() width: number = 350;\n @Prop() height: number = 500;\n @Prop() fontFamily: string = 'Segoe UI, Arial, sans-serif';\n @Prop() zIndex: number = 10000;\n @Prop() customCSS: string = '';\n @Prop() collapsedByDefault: boolean = false;\n @Prop() enablePulsingAnimation: boolean = true;\n @Prop() popupMessage: string = 'Hi, How can I help you?';\n @Prop() popupShowDelay: number = 2;\n @Prop() popupHideDelay: number = 5;\n\n // State\n @State() messages: ChatMessage[] = [];\n @State() isMinimized: boolean = false; // Start open by default\n @State() isTyping: boolean = false;\n @State() inputValue: string = '';\n @State() isChatOpen: boolean = true;\n @State() currentPosition: WidgetPosition = 'bottom-right';\n @State() showPopup: boolean = false;\n @State() isUploading: boolean = false;\n\n // Events\n @Event() messageSent: EventEmitter<{ message: string; widget: HTMLElement }>;\n @Event() widgetOpened: EventEmitter<{ widget: HTMLElement }>;\n @Event() widgetClosed: EventEmitter<{ widget: HTMLElement }>;\n\n private messageIdCounter = 0;\n private scrollTimeout: ReturnType<typeof setTimeout> | null = null;\n\n @Watch('apikey')\n async handleApikeyChange(newValue: string, oldValue: string) {\n console.log('[Chat Widget] API key changed:', { oldValue, newValue });\n if (newValue && newValue !== oldValue) {\n await this.loadAgentConfiguration();\n }\n }\n\n async componentDidLoad() {\n this.currentPosition = this.position;\n\n console.log('[Chat Widget] componentDidLoad - API Key:', this.apikey);\n console.log('[Chat Widget] componentDidLoad - Token:', this.token ? 'Present' : 'Not provided');\n console.log('[Chat Widget] componentDidLoad - Agent ID:', this.agentId);\n \n if (this.apikey || this.token) {\n await this.loadAgentConfiguration();\n }\n \n const config = this.getConfig();\n this.isMinimized = config.collapsed || this.collapsedByDefault;\n \n this.loadFontAwesome();\n \n this.applyCustomCSS();\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n } else {\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n \n setTimeout(() => this.scrollToBottom(), 600);\n }\n \n }\n\n @Watch('config')\n configChanged() {\n }\n\n @Watch('customCSS')\n customCSSChanged() {\n this.applyCustomCSS();\n }\n\n\n @Watch('position')\n positionChanged() {\n this.currentPosition = this.position;\n }\n\n @Watch('collapsedByDefault')\n collapsedByDefaultChanged() {\n this.isMinimized = !this.collapsedByDefault;\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n } else {\n this.showPopup = false;\n if (this.messages.length === 0) {\n const config = this.getConfig();\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n }\n }\n }\n\n private getConfig(): ChatWidgetConfig {\n const mergedConfig = {\n agentName: this.agentName,\n agentRole: this.agentRole,\n agentAvatar: this.agentAvatar,\n primaryColor: this.primaryColor,\n accentColor: this.accentColor,\n welcomeMessage: this.welcomeMessage,\n position: this.position,\n showMinimizeButton: this.showMinimizeButton,\n enableFileUpload: this.enableFileUpload,\n enableSpeech: this.enableSpeech,\n showTimestamps: this.showTimestamps,\n agentId: this.agentId,\n apikey: this.apikey,\n apiEndpoint: this.apiEndpoint,\n enableDebug: this.enableDebug,\n placeholderText: this.placeholderText,\n thankYouMessage: this.thankYouMessage,\n showPoweredBy: this.showPoweredBy,\n poweredByLogo: this.poweredByLogo,\n poweredByText: this.poweredByText,\n poweredByBrand: this.poweredByBrand,\n poweredByUrl: this.poweredByUrl,\n poweredByColor: this.poweredByColor,\n width: this.width,\n height: this.height,\n fontFamily: this.fontFamily,\n zIndex: this.zIndex,\n customCSS: this.customCSS,\n collapsed: this.collapsedByDefault,\n enablePulsingAnimation: this.enablePulsingAnimation,\n popupMessage: this.popupMessage,\n popupShowDelay: this.popupShowDelay,\n popupHideDelay: this.popupHideDelay,\n ...this.config\n };\n \n return mergedConfig;\n }\n\n private loadFontAwesome() {\n if (!document.getElementById('fa-cdn-stencil')) {\n const link = document.createElement('link');\n link.id = 'fa-cdn-stencil';\n link.rel = 'stylesheet';\n link.href = 'https://use.fontawesome.com/releases/v6.4.2/css/all.css';\n link.crossOrigin = 'anonymous';\n document.head.appendChild(link);\n }\n }\n\n private applyCustomCSS() {\n if (this.customCSS) {\n const existingStyle = document.getElementById('nerd-chat-widget-custom-css');\n if (existingStyle) {\n existingStyle.remove();\n }\n \n const style = document.createElement('style');\n style.id = 'nerd-chat-widget-custom-css';\n style.textContent = this.customCSS;\n document.head.appendChild(style);\n }\n }\n\n private addMessage(text: string, isUser: boolean = false) {\n const message: ChatMessage = {\n id: `msg-${++this.messageIdCounter}`,\n text,\n isUser,\n timestamp: new Date()\n };\n \n this.messages = [...this.messages, message];\n \n setTimeout(() => this.scrollToBottom(), 100);\n }\n\n private async sendMessage() {\n const text = this.inputValue.trim();\n if (!text) return;\n\n this.addMessage(text, true);\n this.inputValue = '';\n\n this.messageSent.emit({ message: text, widget: this.el });\n\n if (this.agentId) {\n await this.sendMessageToAgent(text);\n } \n }\n\n\n\n private getAuthHeaders(): HeadersInit {\n const headers: HeadersInit = {\n 'accept': 'application/json',\n 'Origin': window.location.origin\n };\n \n // Prefer token (JWT) over apikey\n if (this.token) {\n headers['Authorization'] = `Bearer ${this.token}`;\n console.log('[Chat Widget] Using JWT token for authentication');\n } else if (this.apikey) {\n headers['agent-key'] = this.apikey;\n console.log('[Chat Widget] Using API key for authentication');\n }\n \n return headers;\n }\n\n private getApiUrlFromApikey(token: string): string {\n const prefix = token.substring(0, 3);\n \n switch (prefix) {\n case 'DT_':\n return 'https://agent-na-dev.api.iinerds.com';\n case 'ST_':\n return 'https://agent-na-uat.api.iinerds.com';\n case 'UT_':\n return 'https://agent-na-uat.api.iinerds.com';\n case 'PN_':\n return 'https://agent-na.api.iinerds.com';\n default:\n return 'https://agent-na-dev.api.iinerds.com';\n }\n }\n\n\n private async sendMessageToAgent(message: string) {\n this.isTyping = true;\n\n try {\n \n if (!this.apikey && !this.token) {\n throw new Error('No API key or token provided');\n }\n \n const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);\n const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke/stream`;\n \n const formData = new FormData();\n const body = {\n service_provider: \"strandsagent\",\n prompt: message,\n session_id: this.getSessionId(),\n response_format: \"text\"\n };\n \n formData.append('body', JSON.stringify(body));\n\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: this.getAuthHeaders(),\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let streamedText = '';\n \n const streamMessageId = `msg-${++this.messageIdCounter}`;\n const streamMessage: ChatMessage = {\n id: streamMessageId,\n text: '',\n isUser: false,\n timestamp: new Date()\n };\n this.messages = [...this.messages, streamMessage];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n \n const chunk = decoder.decode(value, { stream: true });\n streamedText += chunk;\n \n this.messages = this.messages.map(msg => \n msg.id === streamMessageId \n ? { ...msg, text: streamedText }\n : msg\n );\n \n this.debouncedScrollToBottom();\n }\n } finally {\n reader.releaseLock();\n }\n\n this.isTyping = false;\n\n if (!streamedText.trim()) {\n this.messages = this.messages.map(msg => \n msg.id === streamMessageId \n ? { ...msg, text: 'No response received from the agent.' }\n : msg\n );\n }\n\n } catch (error) {\n console.error('API Error:', error);\n this.isTyping = false;\n this.addMessage('Sorry, I encountered an error. Please try again.', false);\n }\n }\n\n private toggleMinimize() {\n this.isMinimized = !this.isMinimized;\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n this.widgetClosed.emit({ widget: this.el });\n } else {\n this.showPopup = false;\n this.widgetOpened.emit({ widget: this.el });\n }\n }\n\n private closeWidget() {\n this.isMinimized = true;\n this.clearConversation();\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n this.widgetClosed.emit({ widget: this.el });\n }\n\n private openWidget() {\n this.isMinimized = false;\n this.showPopup = false;\n \n if (this.messages.length === 0) {\n const config = this.getConfig();\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n }\n \n setTimeout(() => this.scrollToBottom(), 100);\n \n this.widgetOpened.emit({ widget: this.el });\n }\n\n private clearConversation() {\n this.messages = [];\n this.inputValue = '';\n this.isTyping = false;\n }\n\n private showPopupMessage() {\n const config = this.getConfig();\n \n setTimeout(() => {\n this.showPopup = true;\n \n setTimeout(() => {\n this.showPopup = false;\n }, config.popupHideDelay * 1000);\n }, config.popupShowDelay * 1000);\n }\n\n private handleKeyPress(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.sendMessage();\n }\n }\n\n private handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement;\n this.inputValue = target.value;\n }\n\n private handleFileUpload(event: Event) {\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n \n if (!file) return;\n \n const maxSize = 10 * 1024 * 1024; // 10MB\n if (file.size > maxSize) {\n this.addMessage('File size too large. Please upload files smaller than 10MB.', false);\n return;\n }\n \n const allowedTypes = [\n 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp',\n 'application/pdf',\n 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain', 'text/csv'\n ];\n \n if (!allowedTypes.includes(file.type)) {\n this.addMessage('File type not supported. Please upload images, PDFs, documents, or Excel files.', false);\n return;\n }\n \n this.uploadFile(file);\n }\n\n private async uploadFile(file: File) {\n this.isUploading = true;\n const fileMessageId = `msg-${++this.messageIdCounter}`;\n \n try {\n const fileMessage: ChatMessage = {\n id: fileMessageId,\n text: `š Uploading ${file.name}...`,\n isUser: true,\n timestamp: new Date()\n };\n this.messages = [...this.messages, fileMessage];\n \n await this.sendFileToAgent(file);\n \n this.messages = this.messages.map(msg => \n msg.id === fileMessageId \n ? { ...msg, text: `š ${file.name} uploaded successfully` }\n : msg\n );\n \n } catch (error) {\n console.error('File upload error:', error);\n this.messages = this.messages.map(msg => \n msg.id === fileMessageId \n ? { ...msg, text: 'Failed to upload ' + file.name }\n : msg\n );\n this.addMessage('Failed to upload file. Please try again.', false);\n } finally {\n this.isUploading = false;\n }\n }\n\n private async sendFileToAgent(file: File) {\n this.isTyping = true;\n\n try {\n if (!this.apikey && !this.token) {\n throw new Error('No API key or token provided');\n }\n \n const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);\n const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke`;\n \n const formData = new FormData();\n const body = {\n service_provider: \"strandsagent\",\n prompt: `User uploaded file: ${file.name}`,\n session_id: this.getSessionId(),\n response_format: \"text\"\n };\n \n formData.append('body', JSON.stringify(body));\n \n formData.append('file', file, file.name);\n\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: this.getAuthHeaders(),\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const responseData = await response.json();\n \n this.isTyping = false;\n\n if (responseData.status_code === 200 && responseData.data && responseData.data.response) {\n const responseText = responseData.data.response;\n \n const s3UrlMatch = responseText.match(/https:\\/\\/[^\\s]+\\.(jpeg|jpg|png|gif|webp|pdf|doc|docx|xls|xlsx)/i);\n const s3Url = s3UrlMatch ? s3UrlMatch[0] : null;\n \n console.log('S3 URL found:', s3Url);\n console.log('Response text:', responseText);\n \n let responseMessage = responseText;\n if (s3Url && /\\.(jpeg|jpg|png|gif|webp)$/i.test(s3Url)) {\n responseMessage = `${responseText}\\n\\nš· **Image Preview:**\\n\\n\\nš **Direct Link:** ${s3Url}`;\n }\n \n this.addMessage(responseMessage, false);\n } else {\n this.addMessage('File uploaded successfully, but no response received from the agent.', false);\n }\n\n } catch (error) {\n console.error('File API Error:', error);\n this.isTyping = false;\n this.addMessage('Sorry, I encountered an error processing your file. Please try again.', false);\n throw error;\n }\n }\n\n private getSessionId(): string {\n return 'session-' + Math.random().toString(36).substring(2, 11);\n }\n\n private async loadAgentConfiguration(): Promise<void> {\n try {\n if ((!this.apikey && !this.token) || !this.agentId) {\n console.log('[Chat Widget] API key/token or agent ID not provided, skipping configuration load');\n console.log('[Chat Widget] API Key:', this.apikey);\n console.log('[Chat Widget] Token:', this.token ? 'Present' : 'Not provided');\n console.log('[Chat Widget] Agent ID:', this.agentId);\n return;\n }\n\n const baseApiUrl = this.getApiUrlFromApikey(this.apikey);\n const configUrl = `${baseApiUrl}/api/v1/chatbuilder/?agent_id=${this.agentId}`;\n \n console.log('[Chat Widget] Loading configuration from:', configUrl);\n console.log('[Chat Widget] Using auth:', this.token ? 'JWT Token' : 'API Key');\n \n const response = await fetch(configUrl, {\n headers: this.getAuthHeaders()\n });\n\n console.log('[Chat Widget] Config API response status:', response.status);\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error('[Chat Widget] Config API error response:', errorText);\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result = await response.json();\n console.log('[Chat Widget] Config API result:', result);\n const apiConfig = result.configuration || {};\n \n if (apiConfig.agentName) this.agentName = apiConfig.agentName;\n if (apiConfig.agentRole) this.agentRole = apiConfig.agentRole;\n if (apiConfig.agentAvatar) this.agentAvatar = apiConfig.agentAvatar;\n if (apiConfig.primaryColor) this.primaryColor = apiConfig.primaryColor;\n if (apiConfig.accentColor) this.accentColor = apiConfig.accentColor;\n if (apiConfig.welcomeMessage) this.welcomeMessage = apiConfig.welcomeMessage;\n if (apiConfig.placeholderText) this.placeholderText = apiConfig.placeholderText;\n if (apiConfig.showMinimizeButton !== undefined) this.showMinimizeButton = apiConfig.showMinimizeButton;\n if (apiConfig.enableFileUpload !== undefined) this.enableFileUpload = apiConfig.enableFileUpload;\n if (apiConfig.enableSpeech !== undefined) this.enableSpeech = apiConfig.enableSpeech;\n if (apiConfig.showTimestamps !== undefined) this.showTimestamps = apiConfig.showTimestamps;\n if (apiConfig.showPoweredBy !== undefined) this.showPoweredBy = apiConfig.showPoweredBy;\n if (apiConfig.width) this.width = apiConfig.width;\n if (apiConfig.height) this.height = apiConfig.height;\n if (apiConfig.position) this.position = apiConfig.position;\n \n console.log('[Chat Widget] Configuration loaded successfully from API');\n \n } catch (error) {\n console.error('[Chat Widget] Error loading configuration from API:', error);\n }\n }\n\n private getAgentAvatarUrl(): string {\n const config = this.getConfig();\n \n if (config.agentAvatar && config.agentAvatar.trim() !== '') {\n return config.agentAvatar;\n }\n \n const agentName = config.agentName || 'Support Agent';\n const encodedName = encodeURIComponent(agentName);\n return `https://ui-avatars.com/api/?name=${encodedName}&background=2d3e50&color=ffffff&size=44`;\n }\n\n private formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n }\n\n private formatMessageText(text: string): string {\n if (!text) return '';\n \n let formattedText = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_, alt, url) => {\n return `<div style=\"margin: 8px 0;\">\n <img src=\"${url}\" alt=\"${alt}\" style=\"max-width: 100%; height: auto; border-radius: 8px; display: block;\"/>\n </div>`;\n });\n \n formattedText = formattedText.replace(/\\n/g, '<br>');\n \n formattedText = formattedText.replace(/(?<!src=\")(https?:\\/\\/[^\\s<>\"]+)(?![^<]*>)/g, '<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: var(--accent-color); text-decoration: underline;\">$1</a>');\n \n return formattedText;\n }\n\n private scrollToBottom() {\n const messagesContainer = this.el.shadowRoot?.querySelector('.messages-container') as HTMLElement;\n if (messagesContainer) {\n messagesContainer.scrollTop = messagesContainer.scrollHeight;\n }\n }\n\n private debouncedScrollToBottom() {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n \n this.scrollTimeout = setTimeout(() => {\n this.scrollToBottom();\n this.scrollTimeout = null;\n }, 100);\n }\n\n\n render() {\n const config = this.getConfig();\n \n \n const getPositionStyles = () => {\n switch (this.currentPosition) {\n case 'bottom-left':\n return { bottom: '20px', left: '20px', top: 'auto', right: 'auto' };\n case 'bottom-right':\n default:\n return { bottom: '20px', right: '20px', top: 'auto', left: 'auto' };\n }\n };\n \n const widgetClasses = {\n 'chat-widget': true,\n 'minimized': this.isMinimized\n };\n\n return (\n <Host>\n {/* Minimize Icon (shown when minimized) */}\n {this.isMinimized && (\n <div \n class={`minimize-icon ${config.enablePulsingAnimation ? 'pulsing' : ''}`}\n onClick={() => this.openWidget()}\n style={{\n '--primary-color': config.primaryColor || '#2d3e50',\n '--font-family': config.fontFamily || 'Segoe UI, Arial, sans-serif',\n 'z-index': (config.zIndex || 10000).toString(),\n ...getPositionStyles()\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4l4 4 4-4h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-1h12v1zm0-3H6V9h12v1zm0-3H6V6h12v1z\"/>\n </svg>\n \n {/* Popup Message */}\n {this.showPopup && (\n <div class=\"popup-message\">\n {config.popupMessage}\n </div>\n )}\n </div>\n )}\n\n {/* Main Widget (shown when not minimized) */}\n {!this.isMinimized && (\n <div \n class={widgetClasses}\n style={{\n '--primary-color': config.primaryColor || '#2d3e50',\n '--background-color': '#ffffff',\n '--accent-color': config.accentColor || '#4e8cff',\n '--widget-width': `${config.width || 350}px`,\n '--widget-height': `${config.height || 500}px`,\n '--font-family': config.fontFamily || 'Segoe UI, Arial, sans-serif',\n 'z-index': (config.zIndex || 10000).toString(),\n ...getPositionStyles()\n }}\n >\n {/* Header */}\n <div class=\"chat-header\">\n <div class=\"agent-info\">\n <img src={this.getAgentAvatarUrl()} alt=\"Agent\" class=\"agent-avatar\" />\n <div class=\"agent-details\">\n <h4>{config.agentName}</h4>\n <p>{config.agentRole}</p>\n </div>\n </div>\n <div class=\"controls\">\n {config.showMinimizeButton && (\n <button \n class=\"control-btn minimize-btn\" \n onClick={() => this.toggleMinimize()}\n title={this.isMinimized ? 'Maximize' : 'Minimize'}\n >\n {this.isMinimized ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 14l5-5 5 5z\"/>\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n )}\n </button>\n )}\n <button \n class=\"control-btn close-btn\" \n onClick={() => this.closeWidget()}\n title=\"Close\"\n >\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n </div>\n </div>\n\n {/* Messages */}\n <div class=\"messages-container\">\n {this.messages.map(message => (\n <div key={message.id} class={`message ${message.isUser ? 'user' : 'agent'}`}>\n {message.isUser ? (\n <div class=\"message-avatar user-avatar-icon\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"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 </svg>\n </div>\n ) : (\n <img \n src={this.getAgentAvatarUrl()} \n alt=\"Agent\" \n class=\"message-avatar\" \n />\n )}\n <div class=\"message-content\">\n <div class=\"message-text\" innerHTML={this.formatMessageText(message.text)}></div>\n {config.showTimestamps && (\n <div class=\"message-time\">{this.formatTime(message.timestamp)}</div>\n )}\n </div>\n </div>\n ))}\n \n {this.isTyping && (\n <div class=\"typing-indicator\">\n <span>{config.agentName} is typing</span>\n <div class=\"typing-dots\">\n <div class=\"dot\"></div>\n <div class=\"dot\"></div>\n <div class=\"dot\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Input */}\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"message-input\"\n placeholder={(!this.apikey && !this.token) ? 'API key or token required to chat' : (config.placeholderText || 'Type your message...')}\n value={this.inputValue}\n disabled={!this.apikey && !this.token}\n onInput={(e) => this.handleInputChange(e)}\n onKeyPress={(e) => this.handleKeyPress(e)}\n />\n \n {/* Hidden file input */}\n <input\n type=\"file\"\n id=\"file-upload-input\"\n style={{ display: 'none' }}\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.txt,.csv\"\n onChange={(e) => this.handleFileUpload(e)}\n />\n \n {config.enableFileUpload && (\n <button \n class=\"feature-btn file-upload\"\n onClick={() => this.el.shadowRoot?.getElementById('file-upload-input')?.click()}\n disabled={this.isUploading}\n title=\"Upload file\"\n >\n {this.isUploading ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\" class=\"spinning\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/>\n </svg>\n )}\n </button>\n )}\n \n {config.enableSpeech && (\n <button class=\"feature-btn speech\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"/>\n </svg>\n </button>\n )}\n \n <button class=\"send-btn\" disabled={!this.apikey && !this.token} onClick={() => this.sendMessage()}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/>\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n {/*\n <div class=\"tabs\">\n <div class=\"tab active\">\n <span>Chat</span>\n </div>\n <div class=\"tab\">\n <span>Voice</span>\n </div>\n <div class=\"tab\">\n <span>History</span>\n </div>\n </div>{*/}\n\n {/* Powered By */}\n {config.showPoweredBy && (\n <div class=\"powered-by\">\n {/* <img src={config.poweredByLogo} alt=\"Powered By Logo\" /> */}\n {config.poweredByText} <a href={config.poweredByUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{color: config.poweredByColor, textDecoration: 'none'}}>{config.poweredByBrand}</a>\n </div>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"nerd-chat-widget.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/chat-widget/chat-widget.scss?tag=nerd-chat-widget&encapsulation=shadow","src/components/chat-widget/chat-widget.tsx"],"sourcesContent":[":host {\n --primary-color: #2d3e50;\n --background-color: #ffffff;\n --accent-color: #4e8cff;\n --widget-width: 350px;\n --widget-height: 500px;\n --font-family: 'Segoe UI', Arial, sans-serif;\n \n position: fixed;\n z-index: 10000;\n font-family: var(--font-family);\n box-sizing: border-box;\n display: block;\n visibility: visible;\n}\n\n:host *,\n:host *::before,\n:host *::after {\n box-sizing: border-box;\n}\n\n.chat-widget {\n position: fixed !important;\n width: var(--widget-width);\n height: var(--widget-height);\n background: var(--background-color) !important;\n border-radius: 16px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n transition: all 0.3s ease;\n display: flex !important;\n flex-direction: column;\n font-family: var(--font-family);\n visibility: visible !important;\n opacity: 1 !important;\n \n /* Ensure all container elements use the background color and font family */\n .messages-container,\n .input-container,\n .tabs {\n background: var(--background-color) !important;\n font-family: var(--font-family);\n }\n\n &.position-bottom-right {\n bottom: 20px !important;\n right: 20px !important;\n top: auto !important;\n left: auto !important;\n }\n\n &.position-bottom-left {\n bottom: 20px !important;\n left: 20px !important;\n top: auto !important;\n right: auto !important;\n }\n\n\n &.minimized {\n width: 60px !important;\n height: 60px !important;\n border-radius: 50% !important;\n cursor: pointer;\n\n .chat-header,\n .messages-container,\n .input-container,\n .tabs,\n .powered-by {\n display: none;\n }\n\n .minimize-icon {\n display: flex !important;\n }\n }\n\n &.hidden {\n display: none !important;\n }\n \n /* Ensure widget is visible by default */\n &:not(.hidden) {\n display: flex !important;\n }\n}\n\n/* Standalone minimize icon (outside main widget) */\n:host .minimize-icon {\n position: fixed !important;\n width: 60px !important;\n height: 60px !important;\n border-radius: 50% !important;\n background: var(--primary-color) !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n transition: all 0.3s ease !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2) !important;\n z-index: 10001 !important;\n font-family: var(--font-family) !important;\n visibility: visible !important;\n opacity: 1 !important;\n position: relative !important;\n\n svg {\n width: 20px !important;\n height: 20px !important;\n }\n\n &:hover {\n transform: scale(1.05) !important;\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3) !important;\n }\n\n /* Pulsing animation */\n &.pulsing {\n &::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n border-radius: 50%;\n background: var(--primary-color);\n opacity: 0.3;\n animation: pulse 2s infinite;\n }\n\n &::after {\n content: '';\n position: absolute;\n top: -8px;\n left: -8px;\n right: -8px;\n bottom: -8px;\n border-radius: 50%;\n background: var(--primary-color);\n opacity: 0.2;\n animation: pulse 2s infinite 0.5s;\n }\n }\n\n /* Popup message */\n .popup-message {\n position: absolute;\n bottom: 70px;\n right:0;\n background: var(--primary-color);\n color: white;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n white-space: nowrap;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n z-index: 10002;\n font-family: var(--font-family);\n pointer-events: none; \n }\n}\n\n.chat-header {\n background: var(--primary-color);\n color: white;\n padding: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .agent-info {\n display: flex;\n align-items: center;\n gap: 12px;\n\n .agent-avatar {\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: 2px solid rgba(255, 255, 255, 0.3);\n object-fit: cover;\n }\n\n .agent-details {\n h4 {\n margin: 0;\n font-size: 1.1em;\n font-weight: 600;\n font-family: var(--font-family);\n }\n\n p {\n margin: 0;\n font-size: 0.95em;\n opacity: 0.8;\n font-family: var(--font-family);\n }\n }\n }\n\n .controls {\n display: flex;\n gap: 6px;\n\n .control-btn {\n background: rgba(0, 0, 0, 0.1);\n border: none;\n color: #fff;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.1em;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.2);\n }\n\n &.close-btn {\n &:hover {\n background: rgba(255, 0, 0, 0.3);\n }\n }\n }\n }\n}\n\n.messages-container {\n flex: 1;\n overflow-y: auto;\n padding: 18px 16px 12px 16px;\n background: var(--background-color) !important;\n display: flex;\n flex-direction: column;\n gap: 16px;\n font-family: var(--font-family);\n\n .message {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n\n &.user {\n flex-direction: row-reverse;\n }\n\n .message-avatar {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n flex-shrink: 0;\n object-fit: cover;\n border: 1px solid #eee;\n }\n\n .user-avatar-icon {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n flex-shrink: 0;\n background: #4e8cff;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #eee;\n \n svg {\n color: white;\n width: 12px;\n height: 12px;\n }\n }\n\n .message-content {\n max-width: 70%;\n\n .message-text {\n padding: 10px 14px;\n border-radius: 10px;\n font-size: 1em;\n line-height: 1.4;\n font-family: var(--font-family);\n }\n\n .message-time {\n font-size: 11px;\n opacity: 0.6;\n margin-top: 4px;\n font-family: var(--font-family);\n }\n }\n\n &.agent .message-content .message-text {\n background: #eafbe7;\n color: #222;\n border-radius: 10px 10px 10px 0;\n \n img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 8px 0;\n display: block;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n a {\n color: var(--accent-color);\n text-decoration: underline;\n \n &:hover {\n text-decoration: none;\n }\n }\n }\n\n &.user .message-content .message-text {\n background: #e6f4ff;\n color: #222;\n border-radius: 10px 10px 0 10px;\n \n img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 8px 0;\n display: block;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n a {\n color: var(--accent-color);\n text-decoration: underline;\n \n &:hover {\n text-decoration: none;\n }\n }\n }\n }\n\n .typing-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n color: #666;\n font-style: italic;\n font-family: var(--font-family);\n\n .typing-dots {\n display: flex;\n gap: 2px;\n\n .dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: #666;\n animation: typing 1.4s infinite;\n\n &:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n &:nth-child(3) {\n animation-delay: 0.4s;\n }\n }\n }\n }\n}\n\n.input-container {\n background: var(--background-color);\n border-top: 1px solid #eee;\n padding: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .message-input {\n flex: 1;\n border: 1px solid #e0e0e0;\n border-radius: 20px;\n padding: 8px 14px;\n font-size: 1em;\n outline: none;\n background: #fafbfc;\n font-family: var(--font-family);\n\n &:focus {\n border-color: var(--accent-color);\n }\n }\n\n .send-btn,\n .feature-btn {\n background: var(--primary-color);\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 36px;\n height: 36px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2em;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07);\n transition: opacity 0.2s;\n position: relative;\n\n &:hover {\n opacity: 0.9;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n\n .feature-btn {\n color: var(--accent-color);\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n \n .spinning {\n animation: spin 1s linear infinite;\n }\n }\n}\n\n/* Tabs CSS removed - functionality disabled */\n/*\n.tabs {\n background: var(--background-color) !important;\n border-top: 1.5px solid #e0e7ff;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: space-around;\n height: 40px;\n flex-shrink: 0;\n font-family: var(--font-family);\n\n .tab {\n flex: 1;\n text-align: center;\n padding: 6px 0;\n color: var(--primary-color);\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n\n &:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n span:not(.fallback-icon) {\n font-size: 0.91em;\n font-family: var(--font-family);\n }\n }\n}\n*/\n\n.powered-by {\n text-align: center;\n font-size: 0.8em;\n color: #aaa;\n padding: 6px 0;\n background: var(--background-color);\n border-top: 1px solid #f3f3f3;\n flex-shrink: 0;\n font-family: var(--font-family);\n line-height: 1.2;\n img {\n height: 18px;\n vertical-align: middle;\n margin-right: 6px;\n opacity: 0.85;\n object-fit: contain;\n }\n\n span, a {\n font-weight: 400;\n font-family: var(--font-family);\n }\n \n a {\n text-decoration: none;\n transition: opacity 0.2s ease;\n \n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n }\n}\n\n.minimize-icon {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 24px;\n color: white;\n background: var(--primary-color);\n border-radius: 50%;\n cursor: pointer;\n}\n\n@keyframes typing {\n 0%, 60%, 100% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-10px);\n }\n}\n\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 0.3;\n }\n 50% {\n transform: scale(1.1);\n opacity: 0.1;\n }\n 100% {\n transform: scale(1.2);\n opacity: 0;\n }\n}\n\n@keyframes popupFadeIn {\n 0% {\n opacity: 0;\n transform: translateX(-50%) translateY(10px);\n }\n 100% {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n// Spinning animation for file upload\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n// Mobile responsiveness\n@media (max-width: 768px) {\n .chat-widget {\n width: 100% !important;\n height: 100% !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n border-radius: 0 !important;\n\n .messages-container {\n height: calc(100vh - 200px);\n }\n }\n}","import { Component, Prop, State, Element, Event, EventEmitter, Watch, h, Host } from '@stencil/core';\n\nexport interface ChatMessage {\n id: string;\n text: string;\n isUser: boolean;\n timestamp: Date;\n}\n\nexport type WidgetPosition = 'bottom-right' | 'bottom-left';\n\nexport interface ChatWidgetConfig {\n // Agent Information\n agentName?: string;\n agentRole?: string;\n agentAvatar?: string;\n \n // Appearance\n primaryColor?: string;\n accentColor?: string;\n fontFamily?: string;\n width?: number;\n height?: number;\n \n // Messages\n welcomeMessage?: string;\n thankYouMessage?: string;\n placeholderText?: string;\n \n // Features\n showMinimizeButton?: boolean;\n enableFileUpload?: boolean;\n enableSpeech?: boolean;\n showTimestamps?: boolean;\n collapsed?: boolean;\n \n // Position\n position?: WidgetPosition;\n \n // Branding\n showPoweredBy?: boolean;\n poweredByLogo?: string;\n poweredByText?: string;\n poweredByBrand?: string;\n poweredByUrl?: string;\n poweredByColor?: string;\n \n // API\n agentId?: string;\n apikey?: string;\n apiEndpoint?: string;\n enableDebug?: string;\n tokenEndpoint?: string;\n clientId?: string;\n clientSecret?: string;\n \n // Advanced\n zIndex?: number;\n customCSS?: string;\n \n // Animation and Popup\n enablePulsingAnimation?: boolean;\n popupMessage?: string;\n popupShowDelay?: number;\n popupHideDelay?: number;\n}\n\n@Component({\n tag: 'nerd-chat-widget',\n styleUrl: 'chat-widget.scss',\n shadow: true,\n})\nexport class ChatWidget {\n @Element() el: HTMLElement;\n\n // Configuration props\n @Prop() config: ChatWidgetConfig = {};\n @Prop() agentName: string = 'Support Agent';\n @Prop() agentRole: string = 'Customer Support';\n @Prop() agentAvatar: string = '';\n @Prop() primaryColor: string = '#2d3e50';\n @Prop() accentColor: string = '#4e8cff';\n @Prop() welcomeMessage: string = 'Hi! How can I help you today?';\n @Prop() position: WidgetPosition = 'bottom-right';\n @Prop() showMinimizeButton: boolean = true;\n @Prop() enableFileUpload: boolean = false;\n @Prop() enableSpeech: boolean = false;\n @Prop() showTimestamps: boolean = true;\n @Prop() agentId: string = '';\n @Prop() apikey: string = '';\n @Prop() token: string = '';\n @Prop() apiEndpoint: string = '';\n @Prop() enableDebug: string = '';\n @Prop() placeholderText: string = 'Type your message...';\n @Prop() thankYouMessage: string = 'Thank you for chatting with us!';\n @Prop() showPoweredBy: boolean = true;\n @Prop() poweredByLogo: string = 'https://innovationincubator.com/wp-content/uploads/2023/05/Innovation-Incubator-logo.png';\n @Prop() poweredByText: string = 'Powered by';\n @Prop() poweredByBrand: string = 'NerdAgent';\n @Prop() poweredByUrl: string = 'https://nerdagent.com';\n @Prop() poweredByColor: string = '#4e8cff';\n @Prop() width: number = 350;\n @Prop() height: number = 500;\n @Prop() fontFamily: string = 'Segoe UI, Arial, sans-serif';\n @Prop() zIndex: number = 10000;\n @Prop() customCSS: string = '';\n @Prop() collapsedByDefault: boolean = false;\n @Prop() enablePulsingAnimation: boolean = true;\n @Prop() popupMessage: string = 'Hi, How can I help you?';\n @Prop() popupShowDelay: number = 2;\n @Prop() popupHideDelay: number = 5;\n\n // State\n @State() messages: ChatMessage[] = [];\n @State() isMinimized: boolean = false; // Start open by default\n @State() isTyping: boolean = false;\n @State() inputValue: string = '';\n @State() isChatOpen: boolean = true;\n @State() currentPosition: WidgetPosition = 'bottom-right';\n @State() showPopup: boolean = false;\n @State() isUploading: boolean = false;\n\n // Events\n @Event() messageSent: EventEmitter<{ message: string; widget: HTMLElement }>;\n @Event() widgetOpened: EventEmitter<{ widget: HTMLElement }>;\n @Event() widgetClosed: EventEmitter<{ widget: HTMLElement }>;\n\n private messageIdCounter = 0;\n private scrollTimeout: ReturnType<typeof setTimeout> | null = null;\n\n @Watch('apikey')\n async handleApikeyChange(newValue: string, oldValue: string) {\n console.log('[Chat Widget] API key changed:', { oldValue, newValue });\n if (newValue && newValue !== oldValue) {\n await this.loadAgentConfiguration();\n }\n }\n\n async componentDidLoad() {\n this.currentPosition = this.position;\n\n console.log('[Chat Widget] componentDidLoad - API Key:', this.apikey);\n console.log('[Chat Widget] componentDidLoad - Token:', this.token ? 'Present' : 'Not provided');\n console.log('[Chat Widget] componentDidLoad - Agent ID:', this.agentId);\n \n if (this.apikey || this.token) {\n await this.loadAgentConfiguration();\n }\n \n const config = this.getConfig();\n this.isMinimized = config.collapsed || this.collapsedByDefault;\n \n this.loadFontAwesome();\n \n this.applyCustomCSS();\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n } else {\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n \n setTimeout(() => this.scrollToBottom(), 600);\n }\n \n }\n\n @Watch('config')\n configChanged() {\n }\n\n @Watch('customCSS')\n customCSSChanged() {\n this.applyCustomCSS();\n }\n\n\n @Watch('position')\n positionChanged() {\n this.currentPosition = this.position;\n }\n\n @Watch('collapsedByDefault')\n collapsedByDefaultChanged() {\n this.isMinimized = !this.collapsedByDefault;\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n } else {\n this.showPopup = false;\n if (this.messages.length === 0) {\n const config = this.getConfig();\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n }\n }\n }\n\n private getConfig(): ChatWidgetConfig {\n const mergedConfig = {\n agentName: this.agentName,\n agentRole: this.agentRole,\n agentAvatar: this.agentAvatar,\n primaryColor: this.primaryColor,\n accentColor: this.accentColor,\n welcomeMessage: this.welcomeMessage,\n position: this.position,\n showMinimizeButton: this.showMinimizeButton,\n enableFileUpload: this.enableFileUpload,\n enableSpeech: this.enableSpeech,\n showTimestamps: this.showTimestamps,\n agentId: this.agentId,\n apikey: this.apikey,\n apiEndpoint: this.apiEndpoint,\n enableDebug: this.enableDebug,\n placeholderText: this.placeholderText,\n thankYouMessage: this.thankYouMessage,\n showPoweredBy: this.showPoweredBy,\n poweredByLogo: this.poweredByLogo,\n poweredByText: this.poweredByText,\n poweredByBrand: this.poweredByBrand,\n poweredByUrl: this.poweredByUrl,\n poweredByColor: this.poweredByColor,\n width: this.width,\n height: this.height,\n fontFamily: this.fontFamily,\n zIndex: this.zIndex,\n customCSS: this.customCSS,\n collapsed: this.collapsedByDefault,\n enablePulsingAnimation: this.enablePulsingAnimation,\n popupMessage: this.popupMessage,\n popupShowDelay: this.popupShowDelay,\n popupHideDelay: this.popupHideDelay,\n ...this.config\n };\n \n return mergedConfig;\n }\n\n private loadFontAwesome() {\n if (!document.getElementById('fa-cdn-stencil')) {\n const link = document.createElement('link');\n link.id = 'fa-cdn-stencil';\n link.rel = 'stylesheet';\n link.href = 'https://use.fontawesome.com/releases/v6.4.2/css/all.css';\n link.crossOrigin = 'anonymous';\n document.head.appendChild(link);\n }\n }\n\n private applyCustomCSS() {\n if (this.customCSS) {\n const existingStyle = document.getElementById('nerd-chat-widget-custom-css');\n if (existingStyle) {\n existingStyle.remove();\n }\n \n const style = document.createElement('style');\n style.id = 'nerd-chat-widget-custom-css';\n style.textContent = this.customCSS;\n document.head.appendChild(style);\n }\n }\n\n private addMessage(text: string, isUser: boolean = false) {\n const message: ChatMessage = {\n id: `msg-${++this.messageIdCounter}`,\n text,\n isUser,\n timestamp: new Date()\n };\n \n this.messages = [...this.messages, message];\n \n setTimeout(() => this.scrollToBottom(), 100);\n }\n\n private async sendMessage() {\n const text = this.inputValue.trim();\n if (!text) return;\n\n this.addMessage(text, true);\n this.inputValue = '';\n\n this.messageSent.emit({ message: text, widget: this.el });\n\n if (this.agentId) {\n await this.sendMessageToAgent(text);\n } \n }\n\n\n\n private getAuthHeaders(): HeadersInit {\n const headers: HeadersInit = {\n 'accept': 'application/json',\n 'Origin': window.location.origin\n };\n \n // Prefer token (JWT) over apikey\n if (this.token) {\n headers['Authorization'] = `Bearer ${this.token}`;\n console.log('[Chat Widget] Using JWT token for authentication');\n } else if (this.apikey) {\n headers['agent-key'] = this.apikey;\n console.log('[Chat Widget] Using API key for authentication');\n }\n \n return headers;\n }\n\n private getApiUrlFromApikey(token: string): string {\n const prefix = token.substring(0, 3);\n \n switch (prefix) {\n case 'DT_':\n return 'https://agent-na-dev.api.iinerds.com';\n case 'ST_':\n return 'https://agent-na-uat.api.iinerds.com';\n case 'UT_':\n return 'https://agent-na-uat.api.iinerds.com';\n case 'PN_':\n return 'https://agent-na.api.iinerds.com';\n default:\n return 'https://agent-na-dev.api.iinerds.com';\n }\n }\n\n\n private async sendMessageToAgent(message: string) {\n this.isTyping = true;\n\n try {\n \n if (!this.apikey && !this.token) {\n throw new Error('No API key or token provided');\n }\n \n const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);\n const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke-smart/stream?show_execution_time=false`;\n \n const formData = new FormData();\n const body = {\n service_provider: \"strandsagent\",\n prompt: message,\n session_id: this.getSessionId(),\n response_format: \"text\"\n };\n \n formData.append('body', JSON.stringify(body));\n\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: this.getAuthHeaders(),\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let streamedText = '';\n \n const streamMessageId = `msg-${++this.messageIdCounter}`;\n const streamMessage: ChatMessage = {\n id: streamMessageId,\n text: '',\n isUser: false,\n timestamp: new Date()\n };\n this.messages = [...this.messages, streamMessage];\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n \n const chunk = decoder.decode(value, { stream: true });\n streamedText += chunk;\n \n this.messages = this.messages.map(msg => \n msg.id === streamMessageId \n ? { ...msg, text: streamedText }\n : msg\n );\n \n this.debouncedScrollToBottom();\n }\n } finally {\n reader.releaseLock();\n }\n\n this.isTyping = false;\n\n if (!streamedText.trim()) {\n this.messages = this.messages.map(msg => \n msg.id === streamMessageId \n ? { ...msg, text: 'No response received from the agent.' }\n : msg\n );\n }\n\n } catch (error) {\n console.error('API Error:', error);\n this.isTyping = false;\n this.addMessage('Sorry, I encountered an error. Please try again.', false);\n }\n }\n\n private toggleMinimize() {\n this.isMinimized = !this.isMinimized;\n \n if (this.isMinimized) {\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n this.widgetClosed.emit({ widget: this.el });\n } else {\n this.showPopup = false;\n this.widgetOpened.emit({ widget: this.el });\n }\n }\n\n private closeWidget() {\n this.isMinimized = true;\n this.clearConversation();\n setTimeout(() => {\n this.showPopupMessage();\n }, 100);\n this.widgetClosed.emit({ widget: this.el });\n }\n\n private openWidget() {\n this.isMinimized = false;\n this.showPopup = false;\n \n if (this.messages.length === 0) {\n const config = this.getConfig();\n if (config.welcomeMessage) {\n setTimeout(() => {\n this.addMessage(config.welcomeMessage, false);\n }, 500);\n }\n }\n \n setTimeout(() => this.scrollToBottom(), 100);\n \n this.widgetOpened.emit({ widget: this.el });\n }\n\n private clearConversation() {\n this.messages = [];\n this.inputValue = '';\n this.isTyping = false;\n }\n\n private showPopupMessage() {\n const config = this.getConfig();\n \n setTimeout(() => {\n this.showPopup = true;\n \n setTimeout(() => {\n this.showPopup = false;\n }, config.popupHideDelay * 1000);\n }, config.popupShowDelay * 1000);\n }\n\n private handleKeyPress(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.sendMessage();\n }\n }\n\n private handleInputChange(event: Event) {\n const target = event.target as HTMLInputElement;\n this.inputValue = target.value;\n }\n\n private handleFileUpload(event: Event) {\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n \n if (!file) return;\n \n const maxSize = 10 * 1024 * 1024; // 10MB\n if (file.size > maxSize) {\n this.addMessage('File size too large. Please upload files smaller than 10MB.', false);\n return;\n }\n \n const allowedTypes = [\n 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp',\n 'application/pdf',\n 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain', 'text/csv'\n ];\n \n if (!allowedTypes.includes(file.type)) {\n this.addMessage('File type not supported. Please upload images, PDFs, documents, or Excel files.', false);\n return;\n }\n \n this.uploadFile(file);\n }\n\n private async uploadFile(file: File) {\n this.isUploading = true;\n const fileMessageId = `msg-${++this.messageIdCounter}`;\n \n try {\n const fileMessage: ChatMessage = {\n id: fileMessageId,\n text: `š Uploading ${file.name}...`,\n isUser: true,\n timestamp: new Date()\n };\n this.messages = [...this.messages, fileMessage];\n \n await this.sendFileToAgent(file);\n \n this.messages = this.messages.map(msg => \n msg.id === fileMessageId \n ? { ...msg, text: `š ${file.name} uploaded successfully` }\n : msg\n );\n \n } catch (error) {\n console.error('File upload error:', error);\n this.messages = this.messages.map(msg => \n msg.id === fileMessageId \n ? { ...msg, text: 'Failed to upload ' + file.name }\n : msg\n );\n this.addMessage('Failed to upload file. Please try again.', false);\n } finally {\n this.isUploading = false;\n }\n }\n\n private async sendFileToAgent(file: File) {\n this.isTyping = true;\n\n try {\n if (!this.apikey && !this.token) {\n throw new Error('No API key or token provided');\n }\n \n const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);\n const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke`;\n \n const formData = new FormData();\n const body = {\n service_provider: \"strandsagent\",\n prompt: `User uploaded file: ${file.name}`,\n session_id: this.getSessionId(),\n response_format: \"text\"\n };\n \n formData.append('body', JSON.stringify(body));\n \n formData.append('file', file, file.name);\n\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: this.getAuthHeaders(),\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const responseData = await response.json();\n \n this.isTyping = false;\n\n if (responseData.status_code === 200 && responseData.data && responseData.data.response) {\n const responseText = responseData.data.response;\n \n const s3UrlMatch = responseText.match(/https:\\/\\/[^\\s]+\\.(jpeg|jpg|png|gif|webp|pdf|doc|docx|xls|xlsx)/i);\n const s3Url = s3UrlMatch ? s3UrlMatch[0] : null;\n \n console.log('S3 URL found:', s3Url);\n console.log('Response text:', responseText);\n \n let responseMessage = responseText;\n if (s3Url && /\\.(jpeg|jpg|png|gif|webp)$/i.test(s3Url)) {\n responseMessage = `${responseText}\\n\\nš· **Image Preview:**\\n\\n\\nš **Direct Link:** ${s3Url}`;\n }\n \n this.addMessage(responseMessage, false);\n } else {\n this.addMessage('File uploaded successfully, but no response received from the agent.', false);\n }\n\n } catch (error) {\n console.error('File API Error:', error);\n this.isTyping = false;\n this.addMessage('Sorry, I encountered an error processing your file. Please try again.', false);\n throw error;\n }\n }\n\n private getSessionId(): string {\n return 'session-' + Math.random().toString(36).substring(2, 11);\n }\n\n private async loadAgentConfiguration(): Promise<void> {\n try {\n if ((!this.apikey && !this.token) || !this.agentId) {\n console.log('[Chat Widget] API key/token or agent ID not provided, skipping configuration load');\n console.log('[Chat Widget] API Key:', this.apikey);\n console.log('[Chat Widget] Token:', this.token ? 'Present' : 'Not provided');\n console.log('[Chat Widget] Agent ID:', this.agentId);\n return;\n }\n\n const baseApiUrl = this.getApiUrlFromApikey(this.apikey);\n const configUrl = `${baseApiUrl}/api/v1/chatbuilder/?agent_id=${this.agentId}`;\n \n console.log('[Chat Widget] Loading configuration from:', configUrl);\n console.log('[Chat Widget] Using auth:', this.token ? 'JWT Token' : 'API Key');\n \n const response = await fetch(configUrl, {\n headers: this.getAuthHeaders()\n });\n\n console.log('[Chat Widget] Config API response status:', response.status);\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error('[Chat Widget] Config API error response:', errorText);\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result = await response.json();\n console.log('[Chat Widget] Config API result:', result);\n const apiConfig = result.configuration || {};\n \n if (apiConfig.agentName) this.agentName = apiConfig.agentName;\n if (apiConfig.agentRole) this.agentRole = apiConfig.agentRole;\n if (apiConfig.agentAvatar) this.agentAvatar = apiConfig.agentAvatar;\n if (apiConfig.primaryColor) this.primaryColor = apiConfig.primaryColor;\n if (apiConfig.accentColor) this.accentColor = apiConfig.accentColor;\n if (apiConfig.welcomeMessage) this.welcomeMessage = apiConfig.welcomeMessage;\n if (apiConfig.placeholderText) this.placeholderText = apiConfig.placeholderText;\n if (apiConfig.showMinimizeButton !== undefined) this.showMinimizeButton = apiConfig.showMinimizeButton;\n if (apiConfig.enableFileUpload !== undefined) this.enableFileUpload = apiConfig.enableFileUpload;\n if (apiConfig.enableSpeech !== undefined) this.enableSpeech = apiConfig.enableSpeech;\n if (apiConfig.showTimestamps !== undefined) this.showTimestamps = apiConfig.showTimestamps;\n if (apiConfig.showPoweredBy !== undefined) this.showPoweredBy = apiConfig.showPoweredBy;\n if (apiConfig.width) this.width = apiConfig.width;\n if (apiConfig.height) this.height = apiConfig.height;\n if (apiConfig.position) this.position = apiConfig.position;\n \n console.log('[Chat Widget] Configuration loaded successfully from API');\n \n } catch (error) {\n console.error('[Chat Widget] Error loading configuration from API:', error);\n }\n }\n\n private getAgentAvatarUrl(): string {\n const config = this.getConfig();\n \n if (config.agentAvatar && config.agentAvatar.trim() !== '') {\n return config.agentAvatar;\n }\n \n const agentName = config.agentName || 'Support Agent';\n const encodedName = encodeURIComponent(agentName);\n return `https://ui-avatars.com/api/?name=${encodedName}&background=2d3e50&color=ffffff&size=44`;\n }\n\n private formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n }\n\n private formatMessageText(text: string): string {\n if (!text) return '';\n \n let formattedText = text.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_, alt, url) => {\n return `<div style=\"margin: 8px 0;\">\n <img src=\"${url}\" alt=\"${alt}\" style=\"max-width: 100%; height: auto; border-radius: 8px; display: block;\"/>\n </div>`;\n });\n \n formattedText = formattedText.replace(/\\n/g, '<br>');\n \n formattedText = formattedText.replace(/(?<!src=\")(https?:\\/\\/[^\\s<>\"]+)(?![^<]*>)/g, '<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: var(--accent-color); text-decoration: underline;\">$1</a>');\n \n return formattedText;\n }\n\n private scrollToBottom() {\n const messagesContainer = this.el.shadowRoot?.querySelector('.messages-container') as HTMLElement;\n if (messagesContainer) {\n messagesContainer.scrollTop = messagesContainer.scrollHeight;\n }\n }\n\n private debouncedScrollToBottom() {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout);\n }\n \n this.scrollTimeout = setTimeout(() => {\n this.scrollToBottom();\n this.scrollTimeout = null;\n }, 100);\n }\n\n\n render() {\n const config = this.getConfig();\n \n \n const getPositionStyles = () => {\n switch (this.currentPosition) {\n case 'bottom-left':\n return { bottom: '20px', left: '20px', top: 'auto', right: 'auto' };\n case 'bottom-right':\n default:\n return { bottom: '20px', right: '20px', top: 'auto', left: 'auto' };\n }\n };\n \n const widgetClasses = {\n 'chat-widget': true,\n 'minimized': this.isMinimized\n };\n\n return (\n <Host>\n {/* Minimize Icon (shown when minimized) */}\n {this.isMinimized && (\n <div \n class={`minimize-icon ${config.enablePulsingAnimation ? 'pulsing' : ''}`}\n onClick={() => this.openWidget()}\n style={{\n '--primary-color': config.primaryColor || '#2d3e50',\n '--font-family': config.fontFamily || 'Segoe UI, Arial, sans-serif',\n 'z-index': (config.zIndex || 10000).toString(),\n ...getPositionStyles()\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4l4 4 4-4h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-1h12v1zm0-3H6V9h12v1zm0-3H6V6h12v1z\"/>\n </svg>\n \n {/* Popup Message */}\n {this.showPopup && (\n <div class=\"popup-message\">\n {config.popupMessage}\n </div>\n )}\n </div>\n )}\n\n {/* Main Widget (shown when not minimized) */}\n {!this.isMinimized && (\n <div \n class={widgetClasses}\n style={{\n '--primary-color': config.primaryColor || '#2d3e50',\n '--background-color': '#ffffff',\n '--accent-color': config.accentColor || '#4e8cff',\n '--widget-width': `${config.width || 350}px`,\n '--widget-height': `${config.height || 500}px`,\n '--font-family': config.fontFamily || 'Segoe UI, Arial, sans-serif',\n 'z-index': (config.zIndex || 10000).toString(),\n ...getPositionStyles()\n }}\n >\n {/* Header */}\n <div class=\"chat-header\">\n <div class=\"agent-info\">\n <img src={this.getAgentAvatarUrl()} alt=\"Agent\" class=\"agent-avatar\" />\n <div class=\"agent-details\">\n <h4>{config.agentName}</h4>\n <p>{config.agentRole}</p>\n </div>\n </div>\n <div class=\"controls\">\n {config.showMinimizeButton && (\n <button \n class=\"control-btn minimize-btn\" \n onClick={() => this.toggleMinimize()}\n title={this.isMinimized ? 'Maximize' : 'Minimize'}\n >\n {this.isMinimized ? (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 14l5-5 5 5z\"/>\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5z\"/>\n </svg>\n )}\n </button>\n )}\n <button \n class=\"control-btn close-btn\" \n onClick={() => this.closeWidget()}\n title=\"Close\"\n >\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n </svg>\n </button>\n </div>\n </div>\n\n {/* Messages */}\n <div class=\"messages-container\">\n {this.messages.map(message => (\n <div key={message.id} class={`message ${message.isUser ? 'user' : 'agent'}`}>\n {message.isUser ? (\n <div class=\"message-avatar user-avatar-icon\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"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 </svg>\n </div>\n ) : (\n <img \n src={this.getAgentAvatarUrl()} \n alt=\"Agent\" \n class=\"message-avatar\" \n />\n )}\n <div class=\"message-content\">\n <div class=\"message-text\" innerHTML={this.formatMessageText(message.text)}></div>\n {config.showTimestamps && (\n <div class=\"message-time\">{this.formatTime(message.timestamp)}</div>\n )}\n </div>\n </div>\n ))}\n \n {this.isTyping && (\n <div class=\"typing-indicator\">\n <span>{config.agentName} is typing</span>\n <div class=\"typing-dots\">\n <div class=\"dot\"></div>\n <div class=\"dot\"></div>\n <div class=\"dot\"></div>\n </div>\n </div>\n )}\n </div>\n\n {/* Input */}\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"message-input\"\n placeholder={(!this.apikey && !this.token) ? 'API key or token required to chat' : (config.placeholderText || 'Type your message...')}\n value={this.inputValue}\n disabled={!this.apikey && !this.token}\n onInput={(e) => this.handleInputChange(e)}\n onKeyPress={(e) => this.handleKeyPress(e)}\n />\n \n {/* Hidden file input */}\n <input\n type=\"file\"\n id=\"file-upload-input\"\n style={{ display: 'none' }}\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.txt,.csv\"\n onChange={(e) => this.handleFileUpload(e)}\n />\n \n {config.enableFileUpload && (\n <button \n class=\"feature-btn file-upload\"\n onClick={() => this.el.shadowRoot?.getElementById('file-upload-input')?.click()}\n disabled={this.isUploading}\n title=\"Upload file\"\n >\n {this.isUploading ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\" class=\"spinning\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/>\n </svg>\n )}\n </button>\n )}\n \n {config.enableSpeech && (\n <button class=\"feature-btn speech\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z\"/>\n </svg>\n </button>\n )}\n \n <button class=\"send-btn\" disabled={!this.apikey && !this.token} onClick={() => this.sendMessage()}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"white\">\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/>\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n {/*\n <div class=\"tabs\">\n <div class=\"tab active\">\n <span>Chat</span>\n </div>\n <div class=\"tab\">\n <span>Voice</span>\n </div>\n <div class=\"tab\">\n <span>History</span>\n </div>\n </div>{*/}\n\n {/* Powered By */}\n {config.showPoweredBy && (\n <div class=\"powered-by\">\n {/* <img src={config.poweredByLogo} alt=\"Powered By Logo\" /> */}\n {config.poweredByText} <a href={config.poweredByUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={{color: config.poweredByColor, textDecoration: 'none'}}>{config.poweredByBrand}</a>\n </div>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"version":3}
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -203,7 +203,7 @@ const ChatWidget = class {
|
|
|
203
203
|
throw new Error('No API key or token provided');
|
|
204
204
|
}
|
|
205
205
|
const baseApiUrl = this.getApiUrlFromApikey(this.apikey || this.token);
|
|
206
|
-
const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke/stream`;
|
|
206
|
+
const apiUrl = `${baseApiUrl}/api/v1/agent/${this.agentId}/invoke-smart/stream?show_execution_time=false`;
|
|
207
207
|
const formData = new FormData();
|
|
208
208
|
const body = {
|
|
209
209
|
service_provider: "strandsagent",
|