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.
- package/LICENSE +29 -0
- package/README.md +298 -0
- package/dist/delachat-webcomponent.js +683 -0
- package/dist/delachat-webcomponent.min.js +1 -0
- package/dist/delachat-webcomponent.min.js.map +1 -0
- package/package.json +66 -0
- package/src/delachat-webcomponent.js +683 -0
- package/src/delachat.css +430 -0
- package/src/delachat.js +580 -0
- package/src/index.html +343 -0
- package/src/webcomponent-demo.html +452 -0
- package/types/index.d.ts +130 -0
|
@@ -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
|
+
}
|