test-chat-component-per 1.0.1

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.
@@ -0,0 +1 @@
1
+ class DelaChatComponent extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.state={messages:[],isLoading:!1,isOpen:!0,error:null}}static get observedAttributes(){return["api-url","session-uid","datasource","product-id","token","theme","height","width"]}connectedCallback(){this.render(),this.attachEventListeners(),this.loadHistory(),this.dispatchEvent(new CustomEvent("ready",{bubbles:!0,composed:!0}))}attributeChangedCallback(e,n,t){n!==t&&this.shadowRoot.innerHTML&&this.render()}get config(){return{apiUrl:this.getAttribute("api-url"),sessionUid:this.getAttribute("session-uid"),datasource:this.getAttribute("datasource"),productId:parseInt(this.getAttribute("product-id")),token:this.getAttribute("token"),theme:this.getAttribute("theme")||"light",height:this.getAttribute("height")||"600px",width:this.getAttribute("width")||"100%"}}render(){const e=this.config;this.shadowRoot.innerHTML=`\n <style>\n ${this.getStyles()}\n </style>\n\n <div class="chat-window" data-theme="${e.theme}" style="height: ${e.height}; width: ${e.width};">\n \x3c!-- Header --\x3e\n <div class="chat-header">\n <h2 class="chat-title">Ask Dela</h2>\n <div class="chat-header-buttons">\n <button class="btn-icon" data-action="disclaimer" title="Disclaimer">ℹ</button>\n <button class="btn-icon" data-action="new-chat" title="New Chat">+</button>\n <button class="btn-icon" data-action="help" title="Help">?</button>\n <button class="btn-icon" data-action="close" title="Close">✕</button>\n </div>\n </div>\n\n \x3c!-- Disclaimer --\x3e\n <div class="disclaimer" style="display: none;">\n <p>Dela is an AI-powered assistant. While I strive to provide accurate information, please verify important details independently.</p>\n </div>\n\n \x3c!-- Error message --\x3e\n <div class="error" style="display: none;"></div>\n\n \x3c!-- Messages area --\x3e\n <div class="messages">\n <div class="welcome">\n <div class="ai-avatar-large">🤖</div>\n <p>Hello! I'm Dela, your AI assistant. How can I help you today?</p>\n </div>\n </div>\n\n \x3c!-- Loading indicator --\x3e\n <div class="loading" style="display: none;">\n <div class="loading-dots">\n <span></span>\n <span></span>\n <span></span>\n </div>\n <span>Dela is thinking...</span>\n </div>\n\n \x3c!-- Input area --\x3e\n <div class="input-container">\n <div class="input-wrapper">\n <textarea class="input" placeholder="Type your message..." rows="1"></textarea>\n <button class="btn-send" data-action="send" title="Send message">➤</button>\n </div>\n </div>\n </div>\n `}attachEventListeners(){const e=this.shadowRoot,n=e.querySelector(".input"),t=e.querySelector('[data-action="send"]'),s=e.querySelector('[data-action="close"]'),a=e.querySelector('[data-action="disclaimer"]'),i=e.querySelector('[data-action="new-chat"]'),o=e.querySelector('[data-action="help"]');t.addEventListener("click",()=>this.handleSend()),n.addEventListener("keydown",e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),this.handleSend())}),n.addEventListener("input",function(){this.style.height="auto",this.style.height=this.scrollHeight+"px"}),s.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("close",{bubbles:!0,composed:!0})),this.style.display="none"}),a.addEventListener("click",()=>{const n=e.querySelector(".disclaimer");n.style.display="none"===n.style.display?"block":"none"}),i.addEventListener("click",()=>{confirm("Start a new conversation? This will clear the current chat.")&&this.clearHistory()}),o.addEventListener("click",()=>{alert("DelaChat Help\n\nType your question and press Enter or click Send.")})}handleSend(){const e=this.shadowRoot.querySelector(".input"),n=e.value.trim();n&&!this.state.isLoading&&(this.sendMessage(n),e.value="",e.style.height="auto")}async loadHistory(){this.setLoading(!0);try{const e=await this.apiRequest("GET","/delachat/history?limit=50&offset=0");this.state.messages=e.records||[],this.renderMessages()}catch(e){this.handleError(e)}finally{this.setLoading(!1)}}async sendMessage(e){this.setLoading(!0),this.hideWelcome();const n={historyId:"temp-"+Date.now(),message:e,source:0,created:(new Date).toISOString(),userId:this.config.userName||"User",isUserMessage:!0};this.state.messages.unshift(n),this.renderMessages();try{const n=await this.apiRequest("POST","/delachat/history",{message:e,source:0,productUid:this.config.productId});this.state.messages[0]=n.record,this.renderMessages(),this.dispatchEvent(new CustomEvent("message-sent",{bubbles:!0,composed:!0,detail:{message:e}})),this.simulateAIResponse(e)}catch(e){this.handleError(e),this.setLoading(!1)}}async simulateAIResponse(e){setTimeout(async()=>{const n=`I received your message: "${e}". This is a simulated response.`;try{const e=await this.apiRequest("POST","/delachat/history",{message:n,source:1,productUid:this.config.productId});this.state.messages.unshift(e.record),this.renderMessages(),this.setLoading(!1),this.dispatchEvent(new CustomEvent("message-received",{bubbles:!0,composed:!0,detail:{message:n}}))}catch(e){this.handleError(e),this.setLoading(!1)}},1500)}renderMessages(){const e=this.shadowRoot.querySelector(".messages"),n=this.state.messages.map(e=>this.renderMessage(e)).join("");e.innerHTML=n,this.scrollToBottom()}renderMessage(e){const n=0===e.source,t=n?"👤":"🤖",s=n?"message-user":"message-ai",a=n?"":`\n <div class="message-actions">\n <button onclick="this.getRootNode().host.copyMessage('${e.historyId}')" class="btn-action">\n 📋 Copy\n </button>\n </div>\n `;return`\n <div class="message ${s}" data-id="${e.historyId}">\n <div class="avatar">${t}</div>\n <div class="message-content">\n <div class="message-bubble">${this.escapeHtml(e.message)}</div>\n ${a}\n </div>\n </div>\n `}copyMessage(e){const n=this.state.messages.find(n=>n.historyId===e);n&&navigator.clipboard&&(navigator.clipboard.writeText(n.message),alert("Message copied!"))}clearHistory(){this.state.messages=[],this.renderMessages(),this.shadowRoot.querySelector(".welcome").style.display="block"}open(){this.style.display="block"}close(){this.style.display="none"}async apiRequest(e,n,t=null){const s=this.config,a=s.apiUrl+n,i=await fetch(a,{method:e,headers:{"Content-Type":"application/json","X-SessionUid":s.sessionUid,"X-Datasource":s.datasource,"X-ProductId":s.productId.toString(),"X-RequestVerificationToken":s.token},body:t?JSON.stringify(t):null});if(!i.ok){if(401===i.status)throw new Error("Unauthorized: Session expired or invalid token");throw new Error(`Request failed: ${i.status}`)}return i.json()}setLoading(e){this.state.isLoading=e;const n=this.shadowRoot.querySelector(".loading"),t=this.shadowRoot.querySelector(".input"),s=this.shadowRoot.querySelector('[data-action="send"]');n.style.display=e?"flex":"none",t.disabled=e,s.disabled=e}handleError(e){this.state.error=e.message;const n=this.shadowRoot.querySelector(".error");n.textContent=e.message,n.style.display="block",this.dispatchEvent(new CustomEvent("error",{bubbles:!0,composed:!0,detail:{error:e}})),setTimeout(()=>{n.style.display="none"},5e3)}hideWelcome(){const e=this.shadowRoot.querySelector(".welcome");e&&(e.style.display="none")}scrollToBottom(){const e=this.shadowRoot.querySelector(".messages");e.scrollTop=e.scrollHeight}escapeHtml(e){const n=document.createElement("div");return n.textContent=e,n.innerHTML.replace(/\n/g,"<br>")}getStyles(){return'\n :host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n font-size: 14px;\n color: #1F2937;\n }\n\n .chat-window {\n display: flex;\n flex-direction: column;\n background: #FFFFFF;\n border-radius: 12px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n }\n\n .chat-header {\n background: #7C3AED;\n color: white;\n padding: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .chat-title {\n font-size: 18px;\n font-weight: 600;\n margin: 0;\n }\n\n .chat-header-buttons {\n display: flex;\n gap: 8px;\n }\n\n .btn-icon {\n background: transparent;\n border: none;\n color: white;\n cursor: pointer;\n padding: 6px;\n border-radius: 6px;\n width: 32px;\n height: 32px;\n font-size: 16px;\n }\n\n .btn-icon:hover {\n background: #6D28D9;\n }\n\n .disclaimer {\n background: #FEF3C7;\n border-bottom: 1px solid #F59E0B;\n padding: 12px 16px;\n font-size: 13px;\n color: #92400E;\n }\n\n .error {\n background: #FEE2E2;\n border-bottom: 1px solid #EF4444;\n padding: 12px 16px;\n font-size: 13px;\n color: #991B1B;\n }\n\n .messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column-reverse;\n gap: 16px;\n }\n\n .welcome {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n color: #6B7280;\n }\n\n .ai-avatar-large {\n width: 64px;\n height: 64px;\n background: #7C3AED;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 32px;\n margin-bottom: 16px;\n }\n\n .message {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n }\n\n .message-user {\n flex-direction: row-reverse;\n }\n\n .avatar {\n width: 32px;\n height: 32px;\n background: #6B7280;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .message-user .avatar {\n background: #7C3AED;\n }\n\n .message-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-width: 75%;\n }\n\n .message-user .message-content {\n align-items: flex-end;\n }\n\n .message-bubble {\n padding: 12px 16px;\n border-radius: 12px;\n line-height: 1.5;\n word-wrap: break-word;\n }\n\n .message-ai .message-bubble {\n background: #F3F4F6;\n border-bottom-left-radius: 4px;\n }\n\n .message-user .message-bubble {\n background: #7C3AED;\n color: white;\n border-bottom-right-radius: 4px;\n }\n\n .message-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-action {\n background: transparent;\n border: none;\n color: #6B7280;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n }\n\n .btn-action:hover {\n background: #F9FAFB;\n color: #7C3AED;\n }\n\n .loading {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n color: #6B7280;\n font-size: 13px;\n }\n\n .loading-dots {\n display: flex;\n gap: 4px;\n }\n\n .loading-dots span {\n width: 6px;\n height: 6px;\n background: #7C3AED;\n border-radius: 50%;\n animation: bounce 1.4s infinite ease-in-out both;\n }\n\n .loading-dots span:nth-child(2) {\n animation-delay: -0.16s;\n }\n\n .loading-dots span:nth-child(3) {\n animation-delay: -0.32s;\n }\n\n @keyframes bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n\n .input-container {\n padding: 16px;\n background: #F9FAFB;\n border-top: 1px solid #E5E7EB;\n }\n\n .input-wrapper {\n display: flex;\n gap: 8px;\n align-items: flex-end;\n }\n\n .input {\n flex: 1;\n padding: 10px 12px;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n resize: none;\n max-height: 120px;\n }\n\n .input:focus {\n outline: none;\n border-color: #7C3AED;\n box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1);\n }\n\n .input:disabled {\n background: #F9FAFB;\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .btn-send {\n background: #7C3AED;\n color: white;\n border: none;\n border-radius: 8px;\n padding: 10px 16px;\n cursor: pointer;\n font-size: 16px;\n }\n\n .btn-send:hover:not(:disabled) {\n background: #6D28D9;\n }\n\n .btn-send:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n '}}customElements.define("dela-chat",DelaChatComponent);
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DelaChatComponent","HTMLElement","constructor","super","this","attachShadow","mode","state","messages","isLoading","isOpen","error","observedAttributes","connectedCallback","render","attachEventListeners","loadHistory","dispatchEvent","CustomEvent","bubbles","composed","attributeChangedCallback","name","oldValue","newValue","shadowRoot","innerHTML","config","apiUrl","getAttribute","sessionUid","datasource","productId","parseInt","token","theme","height","width","getStyles","shadow","input","querySelector","btnSend","btnClose","btnDisclaimer","btnNewChat","btnHelp","addEventListener","handleSend","e","key","shiftKey","preventDefault","style","display","disclaimer","confirm","clearHistory","alert","message","value","trim","sendMessage","setLoading","data","apiRequest","records","renderMessages","handleError","hideWelcome","tempMsg","historyId","Date","now","source","created","toISOString","userId","userName","isUserMessage","unshift","productUid","record","detail","simulateAIResponse","userMessage","setTimeout","async","aiResponse","messagesContainer","messagesHtml","map","msg","renderMessage","join","scrollToBottom","isUser","avatarIcon","messageClass","actions","escapeHtml","copyMessage","messageId","find","m","navigator","clipboard","writeText","open","close","method","endpoint","url","response","fetch","headers","toString","body","JSON","stringify","ok","status","Error","json","loading","disabled","errorEl","textContent","welcome","scrollTop","scrollHeight","text","div","document","createElement","replace","customElements","define"],"sources":["src/delachat-webcomponent.js"],"mappings":"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","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "test-chat-component-per",
3
+ "version": "1.0.1",
4
+ "description": "AI Chat Web Component - Universal chat component for web applications",
5
+ "main": "dist/delachat-webcomponent.min.js",
6
+ "module": "src/delachat-webcomponent.js",
7
+ "types": "types/index.d.ts",
8
+ "files": [
9
+ "dist/",
10
+ "src/",
11
+ "types/",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "npm run build:minify",
17
+ "build:minify": "terser src/delachat-webcomponent.js -o dist/delachat-webcomponent.min.js -c -m --source-map",
18
+ "build:copy": "npm run build:minify && node -e \"require('fs').copyFileSync('src/delachat-webcomponent.js', 'dist/delachat-webcomponent.js')\"",
19
+ "prepublishOnly": "npm run build:copy && npm run validate",
20
+ "validate": "node -e \"const fs=require('fs');console.log('Validating package...');const files=['dist/delachat-webcomponent.min.js','dist/delachat-webcomponent.js','src/delachat-webcomponent.js','types/index.d.ts'];files.forEach(f=>{if(!fs.existsSync(f)||fs.statSync(f).size===0)throw new Error('Missing or empty: '+f)});console.log('✓ All required files present');\"",
21
+ "test": "echo \"Tests will be added\" && exit 0",
22
+ "version": "npm run build:copy && git add -A dist",
23
+ "postversion": "git push && git push --tags"
24
+ },
25
+ "keywords": [
26
+ "web-component",
27
+ "custom-element",
28
+ "chat",
29
+ "ai",
30
+ "webcomponent",
31
+ "shadow-dom",
32
+ "framework-agnostic",
33
+ "chat-ui",
34
+ "ai-chat"
35
+ ],
36
+ "author": "Your Name",
37
+ "license": "PROPRIETARY",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/yourusername/test-chat-component-per.git"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/yourusername/test-chat-component-per/issues"
44
+ },
45
+ "homepage": "https://github.com/yourusername/test-chat-component-per#readme",
46
+ "engines": {
47
+ "node": ">=14.0.0",
48
+ "npm": ">=6.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "terser": "^5.16.0"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "exports": {
58
+ ".": {
59
+ "import": "./src/delachat-webcomponent.js",
60
+ "require": "./dist/delachat-webcomponent.min.js",
61
+ "default": "./dist/delachat-webcomponent.min.js"
62
+ },
63
+ "./dist/*": "./dist/*",
64
+ "./src/*": "./src/*"
65
+ }
66
+ }