UNPKG

@dynamiq/assistant

Version:

A chat widget library for React and vanilla JavaScript

1 lines 71.1 kB
import e,{useRef as t,useEffect as i,isValidElement as a}from"react";import{renderToString as n}from"react-dom/server";import{marked as o,Renderer as s}from"marked";import r from"vega-embed";function c(e,t,i,a){return new(i||(i=Promise))((function(n,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class l extends Error{constructor(e,t){super(e),this.name="ParseError",this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}}function d(e){}function h(e){if("function"==typeof e)throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");const{onEvent:t=d,onError:i=d,onRetry:a=d,onComment:n}=e;let o,s="",r=!0,c="",h="";function p(e){if(""===e)return c.length>0&&t({id:o,event:h||void 0,data:c.endsWith("\n")?c.slice(0,-1):c}),o=void 0,c="",void(h="");if(e.startsWith(":"))return void(n&&n(e.slice(e.startsWith(": ")?2:1)));const i=e.indexOf(":");if(-1===i)g(e,"",e);else{const t=e.slice(0,i),a=" "===e[i+1]?2:1;g(t,e.slice(i+a),e)}}function g(e,t,n){switch(e){case"event":h=t;break;case"data":c=`${c}${t}\n`;break;case"id":o=t.includes("\0")?void 0:t;break;case"retry":/^\d+$/.test(t)?a(parseInt(t,10)):i(new l(`Invalid \`retry\` value: "${t}"`,{type:"invalid-retry",value:t,line:n}));break;default:i(new l(`Unknown field "${e.length>20?`${e.slice(0,20)}…`:e}"`,{type:"unknown-field",field:e,value:t,line:n}))}}return{feed:function(e){const t=r?e.replace(/^\xEF\xBB\xBF/,""):e,[i,a]=function(e){const t=[];let i="",a=0;for(;a<e.length;){const n=e.indexOf("\r",a),o=e.indexOf("\n",a);let s=-1;if(-1!==n&&-1!==o?s=Math.min(n,o):-1!==n?s=n:-1!==o&&(s=o),-1===s){i=e.slice(a);break}{const i=e.slice(a,s);t.push(i),a=s+1,"\r"===e[a-1]&&"\n"===e[a]&&a++}}return[t,i]}(`${s}${t}`);for(const e of i)p(e);s=a,r=!1},reset:function(e={}){s&&e.consume&&p(s),r=!0,o=void 0,c="",h="",s=""}}}!function(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===i&&a.firstChild?a.insertBefore(n,a.firstChild):a.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}('.chat-widget{--text-color:#333;color:var(--text-color);font-family:var(\n --font-family,"Inter",-apple-system,BlinkMacSystemFont,sans-serif\n );position:fixed;z-index:9999}.chat-widget-generating{.chat-widget-send{display:none!important}.chat-widget-abort{display:flex!important}}.chat-widget-bottom-right{bottom:20px;right:20px}.chat-widget-bottom-left{bottom:20px;left:20px}.chat-widget-top-right{right:20px;top:20px}.chat-widget-top-left{left:20px;top:20px}.chat-widget-toggle{align-items:center;background-color:var(--primary-color);border:none;border-radius:50%;box-shadow:0 4px 12px rgba(108,92,231,.4);color:#fff;cursor:pointer;display:flex;height:56px;justify-content:center;width:56px}.chat-widget-container{background-color:#fff;border-radius:16px;bottom:-20px;box-shadow:0 5px 40px rgba(0,0,0,.12);display:flex;flex-direction:column;height:100vh;overflow:hidden;position:absolute;transition:all .3s ease;width:100vw}@media only screen and (min-width:768px){.chat-widget-container{bottom:70px;height:600px;width:400px}}.chat-widget-container-full-screen{bottom:0;height:100vh;position:fixed;right:0;width:100vw}.chat-widget-bottom-right .chat-widget-container{right:-20px}@media only screen and (min-width:768px){.chat-widget-bottom-right .chat-widget-container{right:0}}.chat-widget-bottom-left .chat-widget-container{left:-20px}@media only screen and (min-width:768px){.chat-widget-bottom-left .chat-widget-container{left:0}}.chat-widget-top-right .chat-widget-container{bottom:auto;right:-20px;top:-20px}@media only screen and (min-width:768px){.chat-widget-top-right .chat-widget-container{right:0;top:70px}}.chat-widget-top-left .chat-widget-container{bottom:auto;left:-20px;top:-20px}@media only screen and (min-width:768px){.chat-widget-top-left .chat-widget-container{left:0;top:70px}}.chat-widget-header{align-items:center;background-color:#fff;border-bottom:1px solid #f0f0f0;color:var(--text-color);display:flex;padding:16px 20px}.chat-widget-header h3{font-size:16px;font-weight:600;margin:0}.chat-widget-container-full-screen .chat-widget-header h3{left:50%;position:absolute;transform:translateX(-50%)}.chat-widget-header-actions{align-items:center;display:flex;margin-left:auto}.chat-widget-new-chat{align-items:center;background:none;border:none;color:#666;cursor:pointer;display:flex;font-size:14px;margin-right:16px;padding:8px 12px}.chat-widget-new-chat:hover{background-color:#f0f0f0;border-radius:4px}.chat-widget-new-chat svg{margin-right:6px}.chat-widget-close{font-size:20px}.chat-widget-close,.chat-widget-full-screen{background:none;border:none;color:#666;cursor:pointer}.chat-widget-full-screen{display:none;font-size:14px}@media only screen and (min-width:768px){.chat-widget-full-screen{display:block}}.chat-widget-content{flex:1;min-height:0}.chat-widget-welcome-title{font-size:24px;font-weight:500}.chat-widget-welcome-subtitle,.chat-widget-welcome-title{color:var(--text-color);line-height:1.25;margin:0;text-align:center}.chat-widget-welcome-subtitle{font-size:14px}.chat-widget-prompts{display:flex;flex-direction:column;gap:8px;justify-content:flex-end;margin-top:16px;width:100%}.chat-widget-container-full-screen .chat-widget-prompts{flex-direction:row;justify-content:center}.chat-widget-prompt{background-color:color-mix(in srgb,var(--primary-color) 10%,transparent);border-radius:4px;border-width:0;cursor:pointer;font-family:var(--font-family);font-size:14px;font-weight:500;height:56px;padding:4px 16px;text-align:left}.chat-widget-container-full-screen .chat-widget-prompt{height:104px}.chat-widget-messages,.chat-widget-welcome-screen{background-color:#fff;box-sizing:border-box;height:100%;overflow-y:auto;padding:16px}.chat-widget-welcome-screen{align-items:center;display:flex;flex-direction:column;justify-content:center}.chat-message{align-items:flex-start;display:flex;margin-bottom:16px;max-width:100%}.chat-message-user{justify-content:flex-end;margin-left:auto}.chat-message-bot{justify-content:flex-start;margin-right:auto}.chat-message-content-wrapper-main{display:flex;flex-direction:row;max-width:100%;overflow:hidden}.chat-message-content-main{min-width:0;overflow:hidden;width:100%}.chat-message-bot .chat-message-content-wrapper-main{background-color:color-mix(in srgb,var(--primary-color) 10%,transparent);border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.05);color:var(--text-color);padding:12px 16px}.chat-message-bot .chat-message-content{width:100%}.chat-message-bot .chat-message-text{padding:0}.chat-message-avatar{align-items:center;border-radius:50%;display:flex;flex-shrink:0;height:32px;justify-content:center;margin:0 4px;width:32px}.chat-message-avatar svg path{fill:var(--primary-color)}.chat-message-user .chat-message-avatar{background-color:var(--primary-color);color:#fff;margin-left:8px;margin-right:0}.chat-message-bot .chat-message-avatar{margin-left:0}.chat-message-content{display:flex;flex-direction:column;max-width:100%;overflow:hidden}.chat-message-text{border-radius:4px;font-size:14px;line-height:1.5;max-width:100%;overflow:hidden;overflow-wrap:break-word;padding:12px 16px;word-break:break-word}.chat-message-user .chat-message-text{background-color:#f4f5f7;color:var(--text-color)}.chat-message-timestamp{color:#999;font-size:11px;margin-top:4px}.chat-message-user .chat-message-timestamp{margin-left:0;margin-right:4px;text-align:right}.chat-message-bot .chat-message-timestamp{margin-left:4px;margin-right:0;text-align:left}.chat-message-feedback{display:flex;gap:8px;margin-left:4px;margin-top:8px}.chat-message-feedback-button{background:none;border:none;border-radius:4px;cursor:pointer;font-size:16px;opacity:.6;padding:4px 8px;transition:all .2s ease;svg{pointer-events:none}}.chat-message-feedback-button:hover{background-color:color-mix(in srgb,var(--primary-color) 10%,transparent);color:var(--primary-color);opacity:1}.chat-widget-input{background-color:#fff;border-top:1px solid #f0f0f0;display:flex;flex-wrap:wrap;padding:16px;position:relative}.chat-widget-input textarea{border:1px solid #424652;border-radius:4px;box-sizing:content-box;color:var(--text-color);flex:1;font-family:var(--font-family);font-size:14px;outline:none;padding:18px 52px 18px 12px;resize:none}.chat-widget-input textarea:focus{border-color:var(--primary-color)}.chat-widget-input:has(.chat-widget-file-input-container) textarea{padding-left:52px}.chat-widget-file-input-container{bottom:24px;left:24px;position:absolute}.chat-widget-file-input{display:none}.chat-widget-file-button{align-items:center;background-color:var(--secondary-color);border:none;border-radius:50%;color:#666;cursor:pointer;display:flex;height:40px;justify-content:center;width:40px}.chat-widget-file-button:hover{background-color:#e0e0e0}.chat-widget-file-preview{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0;width:100%}.chat-widget-file-item{align-items:center;background-color:#f0f0f0;border-radius:12px;display:flex;font-size:12px;padding:4px 8px}.chat-widget-file-item span{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-widget-file-item button{background:none;border:none;color:#888;cursor:pointer;font-size:14px;margin-left:5px}.chat-message-files{display:flex;flex-wrap:wrap;gap:8px;margin-top:5px}.chat-message-file{align-items:center;display:flex;flex-direction:column;max-width:100px}.chat-message-file-preview{border-radius:4px;height:80px;object-fit:cover;width:80px}.chat-message-file-icon{align-items:center;color:#555;display:flex;height:40px;justify-content:center;width:40px}.chat-message-file-name{font-size:10px;margin-top:4px;max-width:100%;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.chat-message-user .chat-message-files{align-self:flex-end;justify-content:flex-end}.chat-message-bot .chat-message-files{align-self:flex-start;justify-content:flex-start}.chat-message-file-preview:hover{box-shadow:0 2px 8px rgba(0,0,0,.1);transform:scale(1.05);transition:transform .2s ease}.chat-message-file-download{background:none;border:none;border-radius:4px;color:var(--primary-color);cursor:pointer;font-size:12px;margin-top:4px;padding:2px 6px}.chat-message-file-download:hover{background-color:rgba(108,92,231,.1)}.chat-loading-spinner{align-items:center;display:flex;justify-content:center;margin:16px 0 16px 40px}.chat-loading-spinner-dot{animation:bounce 1.4s ease-in-out infinite both;background-color:var(--primary-color);border-radius:50%;height:8px;margin:0 4px;width:8px}.chat-loading-spinner-dot:first-child{animation-delay:-.32s}.chat-loading-spinner-dot:nth-child(2){animation-delay:-.16s}.chat-widget-send{align-items:center;background-color:transparent;border:none;bottom:24px;color:#fff;cursor:pointer;display:flex;height:40px;justify-content:center;position:absolute;right:24px;width:40px}.chat-widget-send svg path{fill:var(--primary-color)}.chat-widget-abort{align-items:center;background-color:var(--primary-color);border:none;border-radius:50%;bottom:29px;color:#fff;cursor:pointer;display:none;height:30px;justify-content:center;position:absolute;right:30px;width:30px}.chat-widget-footer,.chat-widget-powered-by{border-top:1px solid #f0f0f0;color:#999;font-size:12px;padding:12px 16px;text-align:center}.chat-widget-container-full-screen .chat-widget-footer,.chat-widget-container-full-screen .chat-widget-powered-by{background-color:#fff;border-top:none}.chat-widget-footer a{color:var(--primary-color);text-decoration:none}.chat-message-loading{align-items:center;display:flex;justify-content:flex-start;margin-top:6px;min-height:20px;min-width:50px;&~.chat-message-feedback{display:none}}.chat-message-dots{align-items:center;display:flex}.chat-message-dot{animation:bounce 1.4s ease-in-out infinite both;background-color:color-mix(in srgb,var(--primary-color) 10%,transparent);border-radius:50%;height:6px;margin:0 2px;width:6px}.chat-message-dot:first-child{animation-delay:-.32s}.chat-message-dot:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{transform:scale(.6)}40%{transform:scale(1)}}.chat-widget-human-support{padding:8px 16px 16px;text-align:center}.chat-widget-human-support a{align-items:center;color:var(--primary-color);display:inline-flex;font-size:14px;text-decoration:none;transition:color .2s}.chat-widget-human-link:hover{color:color-mix(in srgb,var(--primary-color) 80%,transparent);text-decoration:underline}.chat-widget-human-link svg{height:14px;margin-left:6px;width:14px}.chat-message-markdown{overflow:hidden}.chat-message-markdown h1,.chat-message-markdown h2,.chat-message-markdown h3,.chat-message-markdown h4,.chat-message-markdown h5,.chat-message-markdown h6{font-weight:600;line-height:1.25;margin-bottom:.5em;margin-top:.5em}.chat-message-markdown h1{font-size:1.5em}.chat-message-markdown h2{font-size:1.25em}.chat-message-markdown h3{font-size:1.125em}.chat-message-markdown p{margin-bottom:.75em;margin-top:0}.chat-message-markdown p:last-child{margin-bottom:0}.chat-message-markdown ol,.chat-message-markdown ul{margin-bottom:.75em;margin-top:0;padding-left:1.5em}.chat-message-markdown li{margin-bottom:.25em}.chat-message-markdown code{border-radius:3px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;padding:.2em .4em;word-break:break-all}.chat-message-markdown code,.chat-message-markdown pre{background-color:rgba(0,0,0,.05);font-size:.9em;max-width:100%}.chat-message-markdown pre{border-radius:6px;line-height:1.45;margin-bottom:.75em;margin-top:0;overflow-x:auto;padding:.75em;white-space:pre}.chat-message-markdown pre code{word-wrap:normal;background-color:transparent;border-radius:0;display:block;max-width:100%;overflow-x:auto;padding:0;white-space:pre}.chat-message-markdown a{color:var(--primary-color);text-decoration:none}.chat-message-markdown a:hover{text-decoration:underline}.chat-message-markdown blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;margin:0 0 .75em;padding:0 1em}.chat-message-markdown img{border-radius:4px;display:inline-block;height:auto;max-width:100%}.chat-message-markdown table{border-collapse:collapse;border-radius:4px;margin-bottom:.75em;width:100%;word-break:normal}.chat-message-markdown table th{color:hsla(0,0%,49%,.6);font-weight:400;padding:13px;text-align:left}.chat-message-markdown table td{font-weight:500;padding:17px 13px}.chat-message-markdown table tr{background-color:#fff;border-top:1px solid #eeeff1;position:relative}.chat-widget-panel{display:flex;flex:1;min-height:0}.chat-widget-container-full-screen .chat-widget-panel{background-color:#f0f0f0;gap:16px;padding:40px}.chat-widget-main{border-radius:4px;display:flex;flex:1;flex-direction:column;overflow:hidden;width:100%}.chat-widget-history{background-color:#fff;border-radius:4px;display:none;max-width:320px;min-width:250px;width:25%}.chat-widget-container-full-screen .chat-widget-history{display:flex;flex-direction:column}.chat-widget-history-title{border-bottom:1px solid #f0f0f0;font-size:16px;font-weight:500;margin:0;padding:32px 16px}.chat-widget-history-chats-container{display:flex;flex:1;flex-direction:column;overflow-y:auto;padding:16px}.chat-widget-history-empty{align-items:center;display:flex;flex:1;flex-direction:column;justify-content:center;padding:16px;text-align:center}.chat-widget-history-empty h4{font-size:24px;font-weight:500;line-height:32px;margin:0}.chat-widget-history-empty span{color:#7e7e7e;font-size:14px;line-height:22px}.chat-widget-history-chat{align-items:center;background:#fcfcfd;border-radius:6px;box-shadow:none;color:var(--text-color);cursor:pointer;display:flex;font-family:var(--font-family);gap:8px;justify-content:space-between;margin-bottom:10px;padding:12px;transition:background .15s,color .15s}.chat-widget-history-chat.active,.chat-widget-history-chat:hover{background:color-mix(in srgb,var(--primary-color) 5%,transparent);color:var(--primary-color)}.chat-widget-history-chat-title{font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-widget-history-chat-delete{appearance:none;background:transparent;border:none;border-radius:4px;color:#9aa0a6;cursor:pointer;padding:6px}.chat-widget-history-chat.active .chat-widget-history-chat-delete,.chat-widget-history-chat:hover .chat-widget-history-chat-delete{color:var(--primary-color)}.chat-widget-history-chat-delete:hover{background:rgba(0,0,0,.04)}.chat-widget-history-chat-timestamp{color:#b2aecd;font-size:13px;font-weight:400;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-widget-history-date-header{color:#7e7e7e;font-size:14px;font-weight:500;margin:16px 0 8px;padding:0 4px}.chat-widget-history-date-header:first-child{margin-top:0}.chat-message-chart{height:100%;width:100%}.chat-message-chart-container{min-height:300px;min-width:250px;width:100%}#vg-tooltip-element{z-index:99999}.chat-message--full-width>.chat-message-content{width:100%}.chat-message-intermediate-steps{background-color:color-mix(in srgb,var(--primary-color) 5%,transparent);border:1px solid color-mix(in srgb,var(--primary-color) 10%,transparent);border-radius:4px;margin-bottom:12px;overflow:hidden}.chat-message-intermediate-steps>summary{align-items:center;color:var(--text-color);cursor:pointer;display:flex;font-size:14px;font-weight:500;padding:5px 8px;transition:background-color .2s ease;user-select:none}.chat-message-intermediate-steps[open]>summary{color:var(--primary-color)}.chat-message-intermediate-steps>summary:hover{background-color:color-mix(in srgb,var(--primary-color) 5%,transparent);color:var(--primary-color)}.chat-message-intermediate-steps>summary::marker{content:""}.chat-message-intermediate-steps>summary:before{content:"🤔 Show thinking";font-size:14px;font-weight:500}.chat-message-intermediate-steps[open]>summary:before{content:"💡 Hide thinking"}.chat-message-intermediate-step{border-top:1px solid color-mix(in srgb,var(--primary-color) 10%,transparent);color:color-mix(in srgb,var(--text-color) 60%,transparent);font-size:13px;line-height:1.5;margin:0;padding:12px 16px 12px 40px;position:relative;transition:background-color .2s ease}.chat-message-intermediate-step:last-child{border-bottom:none}.chat-message-intermediate-step:before{background-color:var(--primary-color);border-radius:50%;content:"";height:8px;left:16px;opacity:.5;position:absolute;top:50%;transform:translateY(-50%);width:8px}.chat-message-intermediate-step:after{background-color:var(--primary-color);content:"";height:100%;left:19px;opacity:.2;position:absolute;top:0;width:2px}.chat-message-intermediate-step:first-of-type:last-of-type:after{display:none}.chat-message-intermediate-step:first-of-type:after{height:50%;top:50%}.chat-message-intermediate-step:last-child:after{height:50%}.chat-message-intermediate-step:hover{background-color:color-mix(in srgb,var(--primary-color) 5%,transparent)}.chat-message-intermediate-steps::details-content{height:0;overflow:clip;transition:height .5s ease,content-visibility allow-discrete .5s ease}.chat-message-image-link-container{align-items:center;display:flex;gap:24px}.chat-message-image-link-container a{line-height:0}.chat-contract-image{border-radius:50%!important;height:32px!important;left:10px;object-fit:cover!important;position:absolute;width:32px!important}.chat-message-markdown table tr:has(.chat-contract-image) td:first-child{padding-left:50px}.chat-message-flag-container{align-items:center;display:flex;gap:4px}.chat-message-flag-container img{border-radius:50%;height:16px;object-fit:cover;width:16px}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}.chat-message-intermediate-steps[open]::details-content{height:auto}}');const p={$schema:"https://vega.github.io/schema/vega-lite/v6.json",width:"container",height:"container",mark:{cornerRadius:5,tooltip:!0},params:[{name:"hover",select:{type:"point",on:"pointerover",clear:"pointerout"}}]};function g(e,t=navigator.language){const i="number"==typeof e?e:e.getTime(),a=Math.round((i-Date.now())/1e3),n=[60,3600,86400,604800,2592e3,31536e3,1/0],o=n.findIndex((e=>e>Math.abs(a))),s=o?n[o-1]:1;return new Intl.RelativeTimeFormat(t,{numeric:"auto"}).format(Math.floor(a/s),["second","minute","hour","day","week","month","year"][o])}function m(e,t,i){e.style.height="auto";const a=e.scrollHeight-t;e.style.height=`${Math.min(a,i)}px`}function u(e){return e.split("\n").map((e=>e.trimStart())).join("\n").replaceAll("\\n\\n","\n").replaceAll("Photo/Documents","")}const f="chats_history",w=4718592;class v{constructor(){this.storage=window.localStorage}static getInstance(){return v.instance||(v.instance=new v),v.instance}getStorageSize(){let e=0;for(let t=0;t<this.storage.length;t++){const i=this.storage.key(t);if(i){const t=this.storage.getItem(i);t&&(e+=2*(i.length+t.length))}}return e}getItemSize(e,t){return 2*(e.length+t.length)}cleanupOldData(){const e=this.getChats();if(!e.length)return;e.sort(((e,t)=>e.updatedAt-t.updatedAt));let t=this.getStorageSize();for(;t>w&&e.length>0;){const i=e.shift();if(i){t-=this.getItemSize(f,JSON.stringify([i]))}}this.storage.setItem(f,JSON.stringify(e))}getChats(){const e=this.storage.getItem(f);if(!e)return[];try{return JSON.parse(e).filter((e=>e.userId===v.userId))}catch(e){return console.error("Failed to parse chats from storage:",e),[]}}addChat(e){const t=[e,...this.getChats()],i=JSON.stringify(t);this.getItemSize(f,i)>w&&this.cleanupOldData(),this.storage.setItem(f,i)}updateChat(e){const t=this.getChats(),i=t.findIndex((t=>t.sessionId===e.sessionId));if(-1!==i){t[i]=e;const a=JSON.stringify(t);this.getItemSize(f,a)>w&&this.cleanupOldData(),this.storage.setItem(f,a)}}removeChat(e){const t=this.getChats().filter((t=>t.sessionId!==e));this.storage.setItem(f,JSON.stringify(t))}clear(){this.storage.removeItem(f)}}class x{constructor(e,t){this.chats=[],this.activeChat=null,this.storage=v.getInstance(),this.chats=this.storage.getChats(),this.onChatItemClick=e,this.onChatItemDelete=t}render(){const e=document.createElement("div");e.className="chat-widget-history";const t=document.createElement("h4");t.className="chat-widget-history-title",t.innerHTML="History",e.appendChild(t);const i=document.createElement("div");return i.className="chat-widget-history-chats-container",e.appendChild(i),this.renderGroupedChats(i),0===this.chats.length&&i.appendChild(this.renderEmptyState()),this.chatsContainer=i,e}renderGroupedChats(e){const t=[...this.chats].sort(((e,t)=>t.updatedAt-e.updatedAt)),i=this.groupChatsByDate(t);Object.entries(i).forEach((([t,i])=>{const a=document.createElement("div");a.className="chat-widget-history-date-header",a.textContent=t,e.appendChild(a),i.forEach((t=>{e.appendChild(this.renderChat(t))}))}))}groupChatsByDate(e){const t={},i=new Date,a=new Date(i);return a.setDate(a.getDate()-1),e.forEach((e=>{const n=new Date(e.updatedAt);let o;o=this.isSameDay(n,i)?"Today":this.isSameDay(n,a)?"Yesterday":n.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"}),t[o]||(t[o]=[]),t[o].push(e)})),t}isSameDay(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}addChat(e){this.hideEmpty(),this.chats.push(e),this.storage.addChat(e),this.chatsContainer.innerHTML="",this.renderGroupedChats(this.chatsContainer),this.setActiveChat(e)}hideEmpty(){const e=this.chatsContainer.querySelector(".chat-widget-history-empty");e&&e.remove()}setActiveChat(e){this.activeChat=e,this.chatsContainer.querySelectorAll(".chat-widget-history-chat").forEach((e=>{e.classList.remove("active")}));const t=this.chatsContainer.querySelector(`.chat-widget-history-chat[data-session-id="${e.sessionId}"]`);t&&t.classList.add("active")}renderChat(e){const t=document.createElement("div");t.className="chat-widget-history-chat",t.setAttribute("data-session-id",e.sessionId);const i=document.createElement("div");i.className="chat-widget-history-chat-title",i.textContent=e.title,t.appendChild(i);const a=document.createElement("button");return a.className="chat-widget-history-chat-delete",a.title="Delete chat",a.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6"></path><path d="M14 11v6"></path><path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"></path></svg>',a.addEventListener("click",(t=>{t.stopPropagation(),this.deleteChat(e.sessionId)})),t.appendChild(a),t.addEventListener("click",(()=>this.onChatItemClick(e.sessionId))),t}renderEmptyState(){const e=document.createElement("div");e.className="chat-widget-history-empty";const t=document.createElement("div");t.innerHTML='<svg width="68" height="68" viewBox="0 0 68 68" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M63.0062 40.3405C62.8288 39.8453 62.6203 39.3618 62.382 38.8929L51.3347 13.7594C51.2302 13.5174 51.0805 13.2974 50.8938 13.1113C50.1044 12.3218 49.1673 11.6955 48.1359 11.2682C47.1045 10.841 45.9991 10.621 44.8827 10.621C43.7663 10.621 42.6608 10.841 41.6294 11.2682C40.598 11.6955 39.6609 12.3218 38.8716 13.1113C38.4744 13.5089 38.251 14.0475 38.25 14.6094V21.2501H29.75V14.6094C29.7502 14.3303 29.6954 14.0538 29.5888 13.7959C29.4821 13.5379 29.3257 13.3035 29.1284 13.106C28.3391 12.3165 27.402 11.6902 26.3706 11.2629C25.3392 10.8356 24.2337 10.6157 23.1173 10.6157C22.0009 10.6157 20.8955 10.8356 19.8641 11.2629C18.8327 11.6902 17.8956 12.3165 17.1063 13.106C16.9195 13.2921 16.7698 13.5121 16.6653 13.7541L5.61797 38.8876C5.37967 39.3565 5.17118 39.84 4.99375 40.3352C4.3682 42.0855 4.13291 43.9514 4.30435 45.8022C4.4758 47.653 5.04983 49.444 5.98624 51.0496C6.92266 52.6552 8.1988 54.0366 9.72528 55.0971C11.2518 56.1577 12.9917 56.8716 14.8231 57.189C16.6545 57.5063 18.5332 57.4194 20.3275 56.9343C22.1218 56.4492 23.7883 55.5777 25.2104 54.3808C26.6324 53.1839 27.7756 51.6905 28.5598 50.0053C29.3439 48.3201 29.7502 46.4838 29.75 44.6251V25.5001H38.25V44.6251C38.2491 46.484 38.6546 48.3207 39.4383 50.0064C40.2219 51.6921 41.3647 53.186 42.7866 54.3835C44.2084 55.581 45.8749 56.4532 47.6693 56.9388C49.4637 57.4244 51.3426 57.5118 53.1743 57.1947C55.006 56.8777 56.7463 56.164 58.2731 55.1036C59.7999 54.0432 61.0764 52.6617 62.0131 51.056C62.9498 49.4503 63.524 47.6592 63.6956 45.8082C63.8671 43.9572 63.6319 42.091 63.0062 40.3405ZM20.3761 15.8712C21.0846 15.2746 21.9685 14.9258 22.8934 14.8779C23.8184 14.83 24.7336 15.0855 25.5 15.6055V35.1316C23.8409 33.6419 21.8194 32.6143 19.6381 32.1518C17.4568 31.6894 15.1923 31.8083 13.0714 32.4966L20.3761 15.8712ZM17 53.1251C15.3189 53.1251 13.6755 52.6265 12.2777 51.6926C10.8798 50.7586 9.79037 49.431 9.14703 47.8779C8.50368 46.3247 8.33535 44.6156 8.66333 42.9668C8.9913 41.318 9.80085 39.8034 10.9896 38.6147C12.1783 37.4259 13.6929 36.6164 15.3417 36.2884C16.9906 35.9604 18.6996 36.1287 20.2528 36.7721C21.806 37.4154 23.1335 38.5049 24.0675 39.9027C25.0015 41.3005 25.5 42.9439 25.5 44.6251C25.5 46.8794 24.6045 49.0414 23.0104 50.6355C21.4164 52.2295 19.2543 53.1251 17 53.1251ZM42.5 15.6029C43.2664 15.0828 44.1816 14.8273 45.1066 14.8752C46.0315 14.9232 46.9154 15.272 47.6239 15.8685L54.9286 32.4913C52.8075 31.8033 50.5428 31.6848 48.3615 32.1478C46.1802 32.6107 44.1588 33.6388 42.5 35.129V15.6029ZM51 53.1251C49.3189 53.1251 47.6755 52.6265 46.2777 51.6926C44.8798 50.7586 43.7904 49.431 43.147 47.8779C42.5037 46.3247 42.3354 44.6156 42.6633 42.9668C42.9913 41.318 43.8008 39.8034 44.9896 38.6147C46.1783 37.4259 47.6929 36.6164 49.3417 36.2884C50.9906 35.9604 52.6996 36.1287 54.2528 36.7721C55.806 37.4154 57.1335 38.5049 58.0675 39.9027C59.0015 41.3005 59.5 42.9439 59.5 44.6251C59.5 46.8794 58.6045 49.0414 57.0104 50.6355C55.4163 52.2295 53.2543 53.1251 51 53.1251Z" fill="#BDBDBD"/></svg>',e.appendChild(t);const i=document.createElement("h4");i.innerHTML="No chats yet",e.appendChild(i);const a=document.createElement("span");return a.innerHTML="Your chat history will be shown here",e.appendChild(a),e}deleteChat(e){var t,i;this.storage.removeChat(e);const a=this.chats.findIndex((t=>t.sessionId===e));if(-1!==a){const i=(null===(t=this.activeChat)||void 0===t?void 0:t.sessionId)===e;this.chats.splice(a,1),i&&(this.activeChat=null)}this.chatsContainer.innerHTML="",0===this.chats.length?this.chatsContainer.appendChild(this.renderEmptyState()):(this.renderGroupedChats(this.chatsContainer),this.activeChat&&this.setActiveChat(this.activeChat)),null===(i=this.onChatItemDelete)||void 0===i||i.call(this,e)}}class y{static createWidget(e){const t=document.createElement("div");return t.className=`chat-widget chat-widget-${e.position}`,e.theme&&(t.style.setProperty("--primary-color",e.theme.primaryColor||"#6c5ce7"),t.style.setProperty("--secondary-color",e.theme.secondaryColor||"#f5f5f5"),t.style.setProperty("--font-family",e.theme.fontFamily||"Inter, sans-serif")),t}static createToggleButton(){const e=document.createElement("button");return e.className="chat-widget-toggle",e.type="button",e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>',e}static createChatContainer(){const e=document.createElement("div");return e.className="chat-widget-container",e.style.display="none",e}static createHeader(e){const t=document.createElement("div");t.className="chat-widget-header";const i=document.createElement("h3");i.innerHTML=e.title||"Chat Assistant";const a=document.createElement("div");a.className="chat-widget-header-actions";const n=document.createElement("button");n.className="chat-widget-new-chat",n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg> New Chat';const o=document.createElement("button");o.className="chat-widget-close",o.type="button",o.innerHTML="&times;";const s=document.createElement("button");return s.className="chat-widget-full-screen",s.type="button",s.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path></svg>',a.appendChild(n),e.allowFullScreen&&a.appendChild(s),e.hideCloseButton||a.appendChild(o),t.appendChild(i),t.appendChild(a),t}static createContentContainer(){const e=document.createElement("div");e.className="chat-widget-content";const t=document.createElement("div");return t.className="chat-widget-messages",t.style.display="none",e.appendChild(t),e}static createInputContainer(e){const t=document.createElement("div");t.className="chat-widget-input";const i=document.createElement("textarea");i.rows=1,i.placeholder=e.placeholder||"Type your message...";const a=document.createElement("button");a.className="chat-widget-send",a.type="button",a.innerHTML='<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M21.7499 11.9895C21.7506 12.2567 21.6798 12.5193 21.545 12.7501C21.4102 12.9808 21.2162 13.1714 20.983 13.302L5.24144 22.3029C5.01527 22.4312 4.75987 22.499 4.49988 22.4998C4.26011 22.4993 4.02395 22.4413 3.8112 22.3308C3.59845 22.2202 3.4153 22.0602 3.27711 21.8643C3.13892 21.6684 3.04972 21.4421 3.01698 21.2046C2.98424 20.9671 3.00892 20.7252 3.08894 20.4992L5.653 13.0039C5.67827 12.9297 5.72612 12.8653 5.78985 12.8198C5.85357 12.7742 5.92997 12.7497 6.00831 12.7498H12.7499C12.8527 12.75 12.9545 12.7291 13.0488 12.6883C13.1432 12.6476 13.2282 12.5879 13.2986 12.5129C13.3689 12.4379 13.4231 12.3492 13.4577 12.2524C13.4923 12.1556 13.5067 12.0527 13.4999 11.9501C13.4829 11.7572 13.3936 11.5779 13.25 11.4481C13.1064 11.3182 12.9191 11.2474 12.7255 11.2498H6.01488C5.93665 11.2499 5.86034 11.2256 5.79662 11.1802C5.73291 11.1348 5.68499 11.0706 5.65956 10.9967L3.08706 3.49667C2.98688 3.20928 2.9765 2.89821 3.05728 2.60478C3.13807 2.31135 3.3062 2.04943 3.53936 1.85381C3.77251 1.65819 4.05966 1.53812 4.36267 1.50955C4.66567 1.48098 4.9702 1.54526 5.23581 1.69385L20.9858 10.6835C21.2175 10.814 21.4103 11.0036 21.5446 11.2331C21.6788 11.4626 21.7497 11.7236 21.7499 11.9895Z" fill="#783F8E"/></svg>';const n=document.createElement("button");if(n.className="chat-widget-abort",n.type="button",n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="6" width="12" height="12" rx="2" fill="currentColor" stroke="currentColor"/></svg>',n.title="Stop generating",e.allowFileUpload){const i=document.createElement("div");i.className="chat-widget-file-input-container";const a=document.createElement("input");a.type="file",a.id="chat-widget-file-input",a.className="chat-widget-file-input",a.multiple=!0,a.accept=e.acceptedFileTypes||"*";const n=document.createElement("button");n.className="chat-widget-file-button",n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>',n.title="Attach files",i.appendChild(a),i.appendChild(n),t.appendChild(i)}return t.appendChild(i),t.appendChild(a),t.appendChild(n),t}static createWelcomeScreen(e){const t=document.createElement("div");t.className="chat-widget-welcome-screen";const i=document.createElement("h3");i.className="chat-widget-welcome-title",i.textContent=e.welcomeTitle;const a=document.createElement("p");if(a.className="chat-widget-welcome-subtitle",a.textContent=e.welcomeSubtitle,t.appendChild(i),t.appendChild(a),e.prompts){const i=document.createElement("div");i.className="chat-widget-prompts",e.prompts.forEach((e=>{const t=document.createElement("button");t.type="button",t.className="chat-widget-prompt",t.innerHTML=`${e.icon} ${e.text}`,t.dataset.prompt=e.text,i.appendChild(t)})),t.appendChild(i)}return t}static createFooter(e){const t=document.createElement("div");return t.className="chat-widget-footer",t.innerHTML=e.footerText||"",t}static createPoweredBy(e){const t=document.createElement("div");return t.className="chat-widget-powered-by",t.innerHTML=e.poweredBy||"",t}static createHumanSupport(e){var t;const i=document.createElement("div");return i.className="chat-widget-human-support",i.innerHTML=null!==(t=e.humanSupport)&&void 0!==t?t:"",i}static createIntermediateSteps(e){const t=document.createElement("details");if(t.className="chat-message-intermediate-steps",e.length>0){const i=document.createElement("summary");t.appendChild(i),e.forEach((e=>{const i=y.createIntermediateStep(e);t.appendChild(i)}))}return t}static createIntermediateStep(e){const t=document.createElement("div");return t.className="chat-message-intermediate-step",t.textContent=e,t}static createFeedbackButtons(e){const t=document.createElement("div");t.className="chat-message-feedback";const i=document.createElement("button");i.className="chat-message-feedback-button",i.innerHTML='<svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.625 4.0075C13.4842 3.84795 13.3111 3.72019 13.1171 3.63269C12.9231 3.54519 12.7128 3.49996 12.5 3.5H9V2.5C9 1.83696 8.73661 1.20107 8.26777 0.732233C7.79893 0.263392 7.16304 1.28189e-07 6.5 1.28189e-07C6.40711 -6.63752e-05 6.31604 0.0257445 6.237 0.0745385C6.15795 0.123333 6.09407 0.19318 6.0525 0.27625L3.69125 5H1C0.734784 5 0.48043 5.10536 0.292893 5.29289C0.105357 5.48043 0 5.73478 0 6V11.5C0 11.7652 0.105357 12.0196 0.292893 12.2071C0.48043 12.3946 0.734784 12.5 1 12.5H11.75C12.1154 12.5001 12.4684 12.3668 12.7425 12.1252C13.0166 11.8835 13.1931 11.5501 13.2388 11.1875L13.9888 5.1875C14.0153 4.97626 13.9966 4.76179 13.9339 4.55833C13.8712 4.35488 13.7659 4.16711 13.625 4.0075ZM1 6H3.5V11.5H1V6ZM12.9963 5.0625L12.2463 11.0625C12.231 11.1834 12.1722 11.2945 12.0808 11.3751C11.9895 11.4556 11.8718 11.5 11.75 11.5H4.5V5.61812L6.79437 1.02875C7.13443 1.09681 7.4404 1.2806 7.66021 1.54884C7.88002 1.81708 8.0001 2.1532 8 2.5V4C8 4.13261 8.05268 4.25979 8.14645 4.35355C8.24021 4.44732 8.36739 4.5 8.5 4.5H12.5C12.571 4.49998 12.6411 4.51505 12.7058 4.54423C12.7704 4.5734 12.8282 4.61601 12.8751 4.66922C12.9221 4.72242 12.9571 4.78501 12.978 4.85282C12.9989 4.92063 13.0051 4.9921 12.9963 5.0625Z" fill="currentColor" /></svg>',i.title="Helpful",i.setAttribute("aria-label","Helpful"),i.type="button",i.dataset.feedback="positive",i.dataset.messageId=e;const a=document.createElement("button");return a.className="chat-message-feedback-button",a.innerHTML='<svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.9888 7.8125L13.2388 1.8125C13.1931 1.44993 13.0166 1.1165 12.7425 0.87483C12.4684 0.633161 12.1154 0.499875 11.75 0.5H1C0.734784 0.5 0.48043 0.605357 0.292893 0.792893C0.105357 0.98043 0 1.23478 0 1.5V7C0 7.26522 0.105357 7.51957 0.292893 7.70711C0.48043 7.89464 0.734784 8 1 8H3.69125L6.0525 12.7238C6.09407 12.8068 6.15795 12.8767 6.237 12.9255C6.31604 12.9743 6.40711 13.0001 6.5 13C7.16304 13 7.79893 12.7366 8.26777 12.2678C8.73661 11.7989 9 11.163 9 10.5V9.5H12.5C12.7129 9.50007 12.9233 9.45484 13.1173 9.36732C13.3113 9.27979 13.4845 9.15197 13.6253 8.99235C13.7662 8.83273 13.8714 8.64497 13.9341 8.44154C13.9967 8.23812 14.0154 8.02369 13.9888 7.8125ZM3.5 7H1V1.5H3.5V7ZM12.875 8.33062C12.8284 8.38423 12.7708 8.42712 12.706 8.45635C12.6413 8.48559 12.571 8.50048 12.5 8.5H8.5C8.36739 8.5 8.24021 8.55268 8.14645 8.64645C8.05268 8.74021 8 8.86739 8 9V10.5C8.0001 10.8468 7.88002 11.1829 7.66021 11.4512C7.4404 11.7194 7.13443 11.9032 6.79437 11.9712L4.5 7.38188V1.5H11.75C11.8718 1.49996 11.9895 1.54439 12.0808 1.62494C12.1722 1.7055 12.231 1.81664 12.2463 1.9375L12.9963 7.9375C13.0056 8.0079 12.9996 8.07949 12.9787 8.14735C12.9578 8.21521 12.9224 8.27773 12.875 8.33062Z" fill="currentColor"/></svg>',a.title="Not helpful",a.setAttribute("aria-label","Not helpful"),a.type="button",a.dataset.feedback="negative",a.dataset.messageId=e,t.appendChild(i),t.appendChild(a),t}static createContractLinkIcon(){return'<svg width="20" height="20" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.4569 7.7975C15.435 7.74813 14.9056 6.57375 13.7287 5.39687C12.1606 3.82875 10.18 3 7.99999 3C5.81999 3 3.83937 3.82875 2.27124 5.39687C1.09437 6.57375 0.562494 7.75 0.543119 7.7975C0.51469 7.86144 0.5 7.93064 0.5 8.00062C0.5 8.0706 0.51469 8.1398 0.543119 8.20375C0.564994 8.25312 1.09437 9.42688 2.27124 10.6038C3.83937 12.1713 5.81999 13 7.99999 13C10.18 13 12.1606 12.1713 13.7287 10.6038C14.9056 9.42688 15.435 8.25312 15.4569 8.20375C15.4853 8.1398 15.5 8.0706 15.5 8.00062C15.5 7.93064 15.4853 7.86144 15.4569 7.7975ZM7.99999 12C6.07624 12 4.39562 11.3006 3.00437 9.92188C2.43352 9.35418 1.94786 8.70685 1.56249 8C1.94776 7.29309 2.43343 6.64574 3.00437 6.07812C4.39562 4.69938 6.07624 4 7.99999 4C9.92374 4 11.6044 4.69938 12.9956 6.07812C13.5676 6.6456 14.0543 7.29295 14.4406 8C13.99 8.84125 12.0269 12 7.99999 12ZM7.99999 5C7.40665 5 6.82663 5.17595 6.33328 5.50559C5.83994 5.83524 5.45542 6.30377 5.22836 6.85195C5.00129 7.40013 4.94188 8.00333 5.05764 8.58527C5.17339 9.16721 5.45912 9.70176 5.87867 10.1213C6.29823 10.5409 6.83278 10.8266 7.41472 10.9424C7.99667 11.0581 8.59987 10.9987 9.14804 10.7716C9.69622 10.5446 10.1648 10.1601 10.4944 9.66671C10.824 9.17336 11 8.59334 11 8C10.9992 7.2046 10.6828 6.44202 10.1204 5.87959C9.55797 5.31716 8.79539 5.00083 7.99999 5ZM7.99999 10C7.60443 10 7.21775 9.8827 6.88885 9.66294C6.55996 9.44318 6.30361 9.13082 6.15224 8.76537C6.00086 8.39991 5.96125 7.99778 6.03842 7.60982C6.11559 7.22186 6.30608 6.86549 6.58578 6.58579C6.86549 6.30608 7.22185 6.1156 7.60981 6.03843C7.99778 5.96126 8.39991 6.00087 8.76536 6.15224C9.13081 6.30362 9.44317 6.55996 9.66293 6.88886C9.8827 7.21776 9.99999 7.60444 9.99999 8C9.99999 8.53043 9.78928 9.03914 9.41421 9.41421C9.03913 9.78929 8.53043 10 7.99999 10Z" fill="#783F8E"/></svg>'}}o.setOptions({gfm:!0,breaks:!0});class C{constructor(e,t={}){this.messages=[],this.isOpen=!1,this.widgetElement=null,this.selectedFiles=[],this.isLoading=!1,this.relativeTimeInterval=null,this.abortController=null,this.pendingContracts=new Set,this.container=e,this.storage=v.getInstance(),this.options=Object.assign({title:"Dynamiq Assistant",placeholder:"Type a message...",welcomeTitle:"Welcome to Dynamiq",welcomeSubtitle:"How can I help you today?",position:"bottom-right",theme:{primaryColor:"#6c5ce7",secondaryColor:"#f5f5f5",fontFamily:"Inter, -apple-system, BlinkMacSystemFont, sans-serif"},allowFileUpload:!1,maxFileSize:5242880,acceptedFileTypes:"*",intermediateStreaming:!0},t),this.params=Object.assign({userId:crypto.randomUUID(),sessionId:crypto.randomUUID()},t.params),v.userId=this.params.userId,this.apiConfig=this.options.api,this.selectedFiles=[],this.historyPanel=new x(this.loadChatHistory.bind(this),this.handleChatDeleted.bind(this)),this.setupMarkedRenderer(),this.init(),this.options.fullScreen&&this.toggleFullScreen(),this.options.open&&this.open()}setupMarkedRenderer(){const e=new s,t=e.code.bind(e),i=e.codespan.bind(e),a=s.prototype.table;e.code=({text:e,lang:i,escaped:a})=>{var n,o,s,r,c;if("chart"===i)try{const t=JSON.parse(e),i=((e,t)=>{var i;const a=Object.assign(Object.assign(Object.assign({},p.mark),"object"==typeof e.mark?e.mark:"string"==typeof e.mark?{type:e.mark}:{}),{color:t});return Object.assign(Object.assign(Object.assign(Object.assign({},p),e),{width:"container",mark:a}),!!(null==e?void 0:e.encoding)&&{encoding:Object.assign(Object.assign({},e.encoding),!!(null===(i=e.encoding)||void 0===i?void 0:i.color)&&{color:Object.assign(Object.assign({},e.encoding.color),{value:t})})})})(t,(null===(n=this.options.theme)||void 0===n?void 0:n.primaryColor)||"#6c5ce7"),a=`vega-chart-${Math.random().toString(36).substring(7)}`;return`<div class="chat-message-chart-container">\n <div id="${a}" class="chat-message-chart" data-chart-spec="${JSON.stringify(i).replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}"></div>\n </div>`}catch(e){return"Building chart..."}if("image"===i){const t=y.createContractLinkIcon();try{const i=JSON.parse(e),a=crypto.randomUUID();return this.storeContractInfo(i),this.options.onImageBlock||this.options.onLink?`<div class="chat-message-image-link-container" data-contract-id="${a}" data-contract="${i.contract}">\n ${this.options.onImageBlock?'<img src="" class="chat-contract-image" style="display: none;" data-loading="true" />':""}\n ${(null===(s=(o=this.options).onLink)||void 0===s?void 0:s.call(o,i))?`<a href="${null===(c=(r=this.options).onLink)||void 0===c?void 0:c.call(r,i)}" target="_blank">${t}</a>`:""}\n </div>`:""}catch(e){return"Loading image..."}}return t({text:e,lang:i,escaped:a})},e.codespan=e=>{var t,a,n,o;const{text:s}=e;if(s.startsWith("image"))try{const e=s.slice(5).trim(),i=JSON.parse(e),r=y.createContractLinkIcon(),c=crypto.randomUUID();return this.storeContractInfo(i),this.options.onImageBlock||this.options.onLink?`<div class="chat-message-image-link-container" data-contract-id="${c}" data-contract="${i.contract}">\n ${this.options.onImageBlock?'<img src="" class="chat-contract-image" style="display: none;" data-loading="true" />':""}\n ${(null===(a=(t=this.options).onLink)||void 0===a?void 0:a.call(t,i))?`<a href="${null===(o=(n=this.options).onLink)||void 0===o?void 0:o.call(n,i)}" target="_blank">${r}</a>`:""}\n </div>`:""}catch(e){return"Loading image..."}if(s.startsWith("flag"))try{const e=s.slice(4).trim(),t=JSON.parse(e),{code:i,country:a}=t;return`<div class="chat-message-flag-container">\n <img src="https://public-assets-rp.s3.eu-central-1.amazonaws.com/flags/${i.toLowerCase()}.svg" alt="${a}" />\n <span>${a}</span>\n </div>`}catch(e){return""}return i(e)};e.table=function(e,t){return'<div style="overflow-x: auto;">'+a.call(this,e,t)+"</div>"},o.use({renderer:e})}storeContractInfo(e){this.pendingContracts.add(e.contract)}processContractImages(e){var t,i;return c(this,void 0,void 0,(function*(){if(0===this.pendingContracts.size||!this.options.onImageBlock)return;const a=Array.from(this.pendingContracts);try{const i=yield this.options.onImageBlock(a),n=Array.isArray(i)?i:[i],o=this.messages.find((t=>t.id===e));if(o&&n.length>0&&(o.processedImages||(o.processedImages={}),a.forEach(((e,t)=>{t<n.length&&n[t]&&(o.processedImages[e]=n[t])}))),n.length>0){const i=null===(t=this.widgetElement)||void 0===t?void 0:t.querySelectorAll(`#chat-message-${e} .chat-message-image-link-container[data-contract-id]`);null==i||i.forEach(((e,t)=>{if(t<n.length){const i=null==e?void 0:e.querySelector('.chat-contract-image[data-loading="true"]');i&&n[t]&&(i.src=n[t],i.style.display="",i.removeAttribute("data-loading"))}}))}}catch(t){console.error("Error processing contract images:",t);const a=null===(i=this.widgetElement)||void 0===i?void 0:i.querySelectorAll(`#chat-message-${e} .chat-message-image-link-container[data-contract-id]`);null==a||a.forEach((e=>{const t=null==e?void 0:e.querySelector('.chat-contract-image[data-loading="true"]');t&&(t.style.display="none",t.removeAttribute("data-loading"))}))}this.pendingContracts.clear()}))}init(){this.createWidget(),this.attachEventListeners(),this.setTimers()}setTimers(){this.relativeTimeInterval=setInterval((()=>{this.messages.forEach((e=>{var t;const i=g(e.timestamp),a=null===(t=this.widgetElement)||void 0===t?void 0:t.querySelector(`#chat-message-${e.id}`),n=null==a?void 0:a.querySelector(".chat-message-timestamp");n&&(n.textContent=i)}))}),6e4)}createWidget(){const e=y.createWidget(this.options),t=this.options.toggleButton?document.getElementById(this.options.toggleButton):y.createToggleButton(),i=y.createChatContainer(),a=y.createHeader(this.options),n=y.createContentContainer(),o=y.createInputContainer(this.options),s=this.options.humanSupport?y.createHumanSupport(this.options):null,r=this.options.footerText?y.createFooter(this.options):null,c=this.options.poweredBy?y.createPoweredBy(this.options):null,l=y.createWelcomeScreen(this.options);n.appendChild(l);const d=document.createElement("div");d.className="chat-widget-panel",d.appendChild(this.historyPanel.render());const h=document.createElement("div");h.className="chat-widget-main",h.appendChild(n),h.appendChild(o),d.appendChild(h),i.appendChild(a),i.appendChild(d),s&&h.appendChild(s),r&&h.appendChild(r),c&&h.appendChild(c),!this.options.toggleButton&&t&&e.appendChild(t),e.appendChild(i),this.container.appendChild(e),this.widgetElement=e}attachEventListeners(){if(!this.widgetElement)return;const e=this.options.toggleButton?document.getElementById(this.options.toggleButton):this.widgetElement.querySelector(".chat-widget-toggle");e?e.addEventListener("click",(()=>this.toggle())):console.warn("Toggle button not found");const t=this.widgetElement.querySelector(".chat-widget-close");t&&t.addEventListener("click",(()=>this.close()));const i=this.widgetElement.querySelector(".chat-widget-full-screen");i&&i.addEventListener("click",(()=>this.toggleFullScreen()));this.widgetElement.querySelectorAll(".chat-widget-prompt").forEach((e=>{e.addEventListener("click",(()=>this.sendMessage(e.dataset.prompt)))}));const a=this.widgetElement.querySelector(".chat-widget-messages");a&&a.addEventListener("click",(e=>{var t,i;const a=e.target;if(!a.matches(".chat-message-feedback-button"))return;const n=this.messages.findIndex((e=>e.id===a.dataset.messageId));if(-1===n)return;const o=this.messages.at(n),s=this.messages.at(n-1);null===(i=(t=this.options).onFeedback)||void 0===i||i.call(t,e,a.dataset.feedback,[s,o],this.params)}));const n=this.widgetElement.querySelector(".chat-widget-send");n&&n.addEventListener("click",(()=>{var e;const t=null===(e=this.widgetElement)||void 0===e?void 0:e.querySelector(".chat-widget-input textarea");t&&t.value.trim()&&(this.sendMessage(t.value),m(t,36,80))}));const o=this.widgetElement.querySelector(".chat-widget-abort");o&&o.addEventListener("click",(()=>{var e,t,i;null===(e=this.abortController)||void 0===e||e.abort(),this.hideLoadingSpinner();const a=this.messages.at(-1);""!==(null==a?void 0:a.text)?this.finalizeLastMessage().catch(console.error):(this.messages=this.messages.slice(0,-1),null===(i=null===(t=this.widgetElement)||void 0===t?void 0:t.querySelector(`#chat-message-${a.id}`))||void 0===i||i.remove())}));const s=this.widgetElement.querySelector(".chat-widget-input textarea");s&&(s.addEventListener("keypress",(e=>{"Enter"===e.key&&s.value.trim()&&(e.preventDefault(),this.sendMessage(s.value),m(s,36,80))})),s.addEventListener("input",(()=>m(s,36,80))));const r=this.widgetElement.querySelector(".chat-widget-file-input"),c=this.widgetElement.querySelector(".chat-widget-file-button");r&&c&&(c.addEventListener("click",(()=>{r.click()})),r.addEventListener("change",(()=>{r.files&&r.files.length>0&&this.handleFileSelection(r.files)})));const l=this.widgetElement.querySelector(".chat-widget-new-chat");l&&l.addEventListener("click",(()=>this.startNewChat()))}toggleFullScreen(){var e;const t=null===(e=this.widgetElement)||void 0===e?void