UNPKG

ai-bot-snippet

Version:

A package for fast AI Chat for your website

1 lines 19.4 kB
{"version":3,"file":"ai-bot-snippet.mjs","sources":["../../../projects/ai-bot-snippet/src/lib/chat-bot.component.ts","../../../projects/ai-bot-snippet/src/lib/chat-bot.component.html","../../../projects/ai-bot-snippet/src/lib/shared.module.ts","../../../projects/ai-bot-snippet/src/ai-bot-snippet.ts"],"sourcesContent":["/**\r\n * @input {string} backgroundColor - Background color of the chat window.\r\n * @input {string} inputColor - Color of the text in the input field.\r\n * @input {string} botMassageColor - Color of the bot's messages.\r\n * @input {string} userMassageColor - Color of the user's messages.\r\n * @input {string} sendColor - Color of the send button (button to send a message).\r\n * @input {string} scrollbarColor - Color of the scrollbar.\r\n * @input {string} scrollbarTrackColor - Color of the scrollbar track.\r\n * @input {string} aiUrl - URL endpoint for the AI service to handle chat requests.\r\n * @input {string} left - The left position of the chat window on the screen.\r\n * @input {string} bottom - The bottom position of the chat window on the screen.\r\n * @input {string} top - The top position of the chat window on the screen.\r\n * @input {string} right - The right position of the chat window on the screen.\r\n * @input {string} width - Width of the chat window.\r\n * @input {string} height - Height of the chat window.\r\n * @input {string} borderRadius - The border radius of the chat window for rounded corners.\r\n * @input {string} boxShadow - The box shadow applied to the chat window for a 3D effect.\r\n * @input {string} placeholder - Just placeholder for chat input.\r\n * @input {boolean} show - Determines whether the chat window is shown (true) or hidden (false).\r\n * @input {string} btnBackgroundImage - Background image of the button that opens the chat window.\r\n * @input {string} btnBackgroundSize - The size of the background image on the open button.\r\n * @input {string} btnLeft - The left position of the button that opens the chat window.\r\n * @input {string} btnBottom - The bottom position of the button that opens the chat window.\r\n * @input {string} btnTop - The top position of the button that opens the chat window.\r\n * @input {string} btnRight - The right position of the button that opens the chat window.\r\n * @input {string} btnWidth - The width of the button that opens the chat window.\r\n * @input {string} btnHeight - The height of the button that opens the chat window.\r\n * @input {string} btnBorderRadius - The border radius of the button that opens the chat window for rounded corners.\r\n * @input {string} btnBoxShadow - The box shadow applied to the button that opens the chat window.\r\n * @input {string} btnText - The text displayed on the button that opens the chat window.\r\n */\r\n\r\nimport {\r\n Component,\r\n ElementRef,\r\n ViewChild,\r\n AfterViewInit,\r\n OnDestroy,\r\n Input,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport gsap from 'gsap';\r\nimport axios from 'axios';\r\nimport Cookies from 'js-cookie';\r\n\r\ninterface Message {\r\n sender: 'user' | 'bot';\r\n text: string;\r\n}\r\n@Component({\r\n selector: 'app-chat-bot',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './chat-bot.component.html',\r\n styleUrls: ['./chat-bot.component.css'],\r\n})\r\nexport class ChatBotComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('chatContainer') chatContainer!: ElementRef;\r\n @Input() backgroundColor: string = '#333';\r\n @Input() inputColor: string = 'white';\r\n @Input() botMassageColor: string = 'blue';\r\n @Input() userMassageColor: string = 'green';\r\n @Input() sendColor: string = 'green';\r\n @Input() scrollbarColor: string = 'gray';\r\n @Input() scrollbarTrackColor: string = '#333';\r\n @Input() aiUrl: string = 'http://localhost:5555';\r\n @Input() left: string = '10px';\r\n @Input() bottom: string = '';\r\n @Input() top: string = '';\r\n @Input() right: string = '';\r\n @Input() width: string = '300px';\r\n @Input() height: string = '400px';\r\n @Input() borderRadius: string = '10px';\r\n @Input() boxShadow: string = '0px 4px 10px rgba(0, 0, 0, 0.2)';\r\n @Input() placeholder: string = 'Write message...';\r\n @Input() show: boolean = false;\r\n @Input() btnBackgroundImage: string = '';\r\n @Input() btnBackgroundSize: string = '';\r\n @Input() btnLeft: string = '';\r\n @Input() btnBottom: string = '10px';\r\n @Input() btnTop: string = '';\r\n @Input() btnRight: string = '10px';\r\n @Input() btnWidth: string = '70px';\r\n @Input() btnHeight: string = '70px';\r\n @Input() btnBorderRadius: string = '999px';\r\n @Input() startMessage: string =\r\n \"Hi, I'm your personal assistant, how can I help you?\";\r\n @Input() btnBoxShadow: string = '0px 4px 10px rgba(0, 0, 0, 0.2)';\r\n @Input() btnText: string = 'Open Chat';\r\n @Input() errorCon: string = '';\r\n @Input() webSiteUrl: string = 'https://www.quellwerke.de/';\r\n\r\n messages: Message[] = [];\r\n inputText: string = '';\r\n error: string = '';\r\n loading: boolean = false;\r\n isClosing: boolean = false;\r\n isClearing: boolean = false;\r\n showBlock: boolean = true;\r\n\r\n constructor() {}\r\n\r\n get widthInPixels(): number {\r\n const numericWidth = parseInt(this.width, 10);\r\n return numericWidth / 1.5;\r\n }\r\n\r\n toggleChat() {\r\n if (this.show) {\r\n this.animateClose();\r\n } else {\r\n this.animateOpen();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.startMessage.trim() === '') {\r\n this.startMessage =\r\n \"Hi, I'm your personal assistant, how can I help you?\";\r\n }\r\n if (this.show === false) {\r\n this.showBlock = false;\r\n } else {\r\n if (this.show) {\r\n this.animateOpen();\r\n } else {\r\n this.animateClose();\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n this.loadMessages();\r\n this.show = true;\r\n this.showBlock = true;\r\n });\r\n }\r\n\r\n startAnimation() {\r\n const chatBotElement = document.getElementById('chatBot');\r\n if (chatBotElement) {\r\n gsap.to(chatBotElement, {\r\n scale: 0,\r\n duration: 0.001,\r\n onComplete: () => {\r\n this.show = false;\r\n },\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.animateClose();\r\n }\r\n\r\n loadMessages() {\r\n const savedMessages = Cookies.get('chatMessages');\r\n this.messages = savedMessages\r\n ? JSON.parse(savedMessages)\r\n : [\r\n {\r\n sender: 'bot',\r\n text: this.startMessage,\r\n },\r\n ];\r\n }\r\n\r\n saveMessages() {\r\n Cookies.set('chatMessages', JSON.stringify(this.messages), { expires: 7 });\r\n }\r\n\r\n animateOpen() {\r\n if (this.chatContainer) {\r\n const chatBotElement = this.chatContainer.nativeElement;\r\n gsap.to(chatBotElement, {\r\n opacity: 1,\r\n scale: 1,\r\n y: 0,\r\n duration: 0.6,\r\n onComplete: () => {\r\n this.show = true;\r\n },\r\n });\r\n }\r\n }\r\n\r\n animateClose() {\r\n const chatBotElement = document.getElementById('chatBot');\r\n if (chatBotElement) {\r\n gsap.to(chatBotElement, {\r\n opacity: 0,\r\n scale: 0,\r\n duration: 0.6,\r\n y: -100,\r\n onComplete: () => {\r\n this.show = false;\r\n },\r\n });\r\n }\r\n }\r\n\r\n async sendMessage() {\r\n if (this.isClearing || !this.inputText.trim()) return;\r\n\r\n this.error = '';\r\n this.messages.push({ sender: 'user', text: this.inputText });\r\n const userInput = this.inputText;\r\n\r\n this.inputText = '';\r\n\r\n this.loading = true;\r\n try {\r\n const response = await axios.post(this.aiUrl, {\r\n text: userInput,\r\n url: this.webSiteUrl,\r\n });\r\n\r\n this.messages.push({ sender: 'bot', text: response.data.reply });\r\n } catch (error: unknown) {\r\n if (axios.isAxiosError(error)) {\r\n if (\r\n error.response &&\r\n error.response.data &&\r\n error.response.data.reply\r\n ) {\r\n this.messages.push({\r\n sender: 'bot',\r\n text: error.response.data.reply,\r\n });\r\n } else {\r\n this.messages.push({ sender: 'bot', text: 'Error, server problem.' });\r\n this.error = this.errorCon;\r\n }\r\n } else {\r\n this.messages.push({\r\n sender: 'bot',\r\n text: this.errorCon,\r\n });\r\n this.error = this.errorCon;\r\n }\r\n } finally {\r\n this.loading = false;\r\n this.saveMessages();\r\n }\r\n }\r\n\r\n clearChat() {\r\n this.isClearing = true;\r\n this.messages = [\r\n {\r\n sender: 'bot',\r\n text: this.startMessage,\r\n },\r\n ];\r\n this.error = '';\r\n this.loading = false;\r\n this.isClearing = false;\r\n this.saveMessages();\r\n }\r\n}\r\n","<div\r\n *ngIf=\"showBlock\"\r\n id=\"chatBot\"\r\n #chatContainer\r\n class=\"chat-container\"\r\n [style.background-color]=\"backgroundColor\"\r\n [style.scrollbar-color]=\"scrollbarColor + ' ' + scrollbarTrackColor\"\r\n [style.top]=\"top\"\r\n [style.bottom]=\"bottom\"\r\n [style.right]=\"right\"\r\n [style.left]=\"left\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.border-radius]=\"borderRadius\"\r\n [style.box-shadow]=\"boxShadow\"\r\n>\r\n <button class=\"close-btn\" (click)=\"animateClose()\">✖</button>\r\n <button class=\"clear-btn\" (click)=\"clearChat()\">🗑</button>\r\n\r\n <div class=\"chat-messages\">\r\n <div\r\n *ngFor=\"let msg of messages\"\r\n [ngClass]=\"{ user: msg.sender === 'user', bot: msg.sender === 'bot' }\"\r\n [style.background-color]=\"\r\n msg.sender === 'user' ? userMassageColor : botMassageColor\r\n \"\r\n [style.margin-left]=\"msg.sender === 'user' ? 'auto' : 'none'\"\r\n [style.width]=\"widthInPixels + 'px'\"\r\n >\r\n {{ msg.text }}\r\n </div>\r\n <p *ngIf=\"loading\">Loading...</p>\r\n <p *ngIf=\"error\" class=\"error\">{{ error }}</p>\r\n </div>\r\n\r\n <div class=\"chat-input\" [style.background-color]=\"backgroundColor\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"inputText\"\r\n (keydown.enter)=\"sendMessage()\"\r\n [style.background-color]=\"inputColor\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <button\r\n (click)=\"sendMessage()\"\r\n [disabled]=\"!inputText.trim() || loading\"\r\n [style.background-color]=\"sendColor\"\r\n >\r\n\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div\r\n id=\"showChatBtn\"\r\n [style.background-color]=\"backgroundColor\"\r\n [style.border-radius]=\"borderRadius\"\r\n [style.background-image]=\"'url(' + btnBackgroundImage + ')'\"\r\n [style.background-size]=\"btnBackgroundSize\"\r\n [style.top]=\"btnTop\"\r\n [style.bottom]=\"btnBottom\"\r\n [style.right]=\"btnRight\"\r\n [style.left]=\"btnLeft\"\r\n [style.width]=\"btnWidth\"\r\n [style.height]=\"btnHeight\"\r\n [style.border-radius]=\"btnBorderRadius\"\r\n [style.box-shadow]=\"btnBoxShadow\"\r\n (click)=\"toggleChat()\"\r\n>\r\n {{ btnText }}\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule],\r\n})\r\nexport class SharedModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}