@bangdb/web-sdk 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var qe=Object.create;var $=Object.defineProperty;var He=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,$e=Object.prototype.hasOwnProperty;var Re=(r,e)=>{for(var t in e)$(r,t,{get:e[t],enumerable:!0})},K=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ie(e))!$e.call(r,n)&&n!==t&&$(r,n,{get:()=>e[n],enumerable:!(o=He(e,n))||o.enumerable});return r};var R=(r,e,t)=>(t=r!=null?qe(Oe(r)):{},K(e||!r||!r.__esModule?$(t,"default",{value:r,enumerable:!0}):t,r)),De=r=>K($({},"__esModule",{value:!0}),r);var gt={};Re(gt,{ChatWidget:()=>O,init:()=>Ae});module.exports=De(gt);var G=`
1
+ "use strict";var Re=Object.create;var _=Object.defineProperty;var Be=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Fe=Object.prototype.hasOwnProperty;var Ue=(n,e)=>{for(var t in e)_(n,t,{get:e[t],enumerable:!0})},Q=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Pe(e))!Fe.call(n,r)&&r!==t&&_(n,r,{get:()=>e[r],enumerable:!(o=Be(e,r))||o.enumerable});return n};var A=(n,e,t)=>(t=n!=null?Re(_e(n)):{},Q(e||!n||!n.__esModule?_(t,"default",{value:n,enumerable:!0}):t,n)),Ke=n=>Q(_({},"__esModule",{value:!0}),n);var St={};Ue(St,{ChatWidget:()=>P,init:()=>Ne});module.exports=Ke(St);var Z=`
2
2
  :root {
3
3
  --thread-content-max-width: 32rem;
4
4
  }
@@ -583,7 +583,7 @@ code.hljs {
583
583
  .hljs-strong {
584
584
  font-weight: bold
585
585
  }
586
- }`;var V=`
586
+ }`;var ee=`
587
587
  :root {
588
588
  --border-xheavy: var(--border);
589
589
  }
@@ -1046,10 +1046,10 @@ code.hljs {
1046
1046
  .prose > :last-child:not(.not-prose *) {
1047
1047
  margin-bottom: 0;
1048
1048
  }
1049
- `;var se=require("@reduxjs/toolkit");var W=require("@reduxjs/toolkit"),Ne={activeIndex:"",activeSession:"",sessions:[],useGenAi:!1,mode:0,tools:[]},J=(0,W.createSlice)({name:"chat",initialState:Ne,reducers:{changeMode:(r,e)=>{r.mode=e.payload},setActiveIndex:(r,e)=>{r.activeIndex=e.payload},setActiveSession:(r,e)=>{r.activeSession=e.payload},setSessions:(r,e)=>{r.sessions=e.payload},setUseGenAi:(r,e)=>{r.useGenAi=e.payload},addTool:(r,e)=>{r.tools.some(t=>t.id===e.payload.id)||r.tools.push(e.payload)},removeTool:(r,e)=>{r.tools=r.tools.filter(t=>t.id!==e.payload)}}}),{setActiveIndex:Y,setActiveSession:Q,setSessions:xt,setUseGenAi:kt,changeMode:M,addTool:X,removeTool:B}=J.actions,Z=J.reducer;var q=require("@reduxjs/toolkit");var C=class{constructor(e){this.rawResponse=e}detectModelVersion(){let e=this.extractOutput();return!e||e.length===0||!Array.isArray(e)?"unknown":e?.[0]?.content||e?.[1]?.content?"gpt5":e[0]?.message?"gpt4":e?.some(t=>t?.text)?"file-chat":"unknown"}extractOutput(){let e=this.rawResponse;return e?.choices||e?.a?.choices||e?.output||e?.a?.output||e?.content||e?.a?.content||[]}normalizeGPT4Choice(e){return{output:e?.message?.content||""}}normalizeFileChatResponse(e){return{output:e?.text?.value}}normalizeGPT5Output(e){return{output:e.content.map(t=>t.text).join(`
1049
+ `;var ge=require("@reduxjs/toolkit");var te=require("@reduxjs/toolkit"),Ge={activeIndex:"",activeSession:"",sessions:[],useGenAi:!1,mode:0,tools:[]},oe=(0,te.createSlice)({name:"chat",initialState:Ge,reducers:{changeMode:(n,e)=>{n.mode=e.payload},setActiveIndex:(n,e)=>{n.activeIndex=e.payload},setActiveSession:(n,e)=>{n.activeSession=e.payload},setSessions:(n,e)=>{n.sessions=e.payload},setUseGenAi:(n,e)=>{n.useGenAi=e.payload},addTool:(n,e)=>{n.tools.some(t=>t.id===e.payload.id)||n.tools.push(e.payload)},removeTool:(n,e)=>{n.tools=n.tools.filter(t=>t.id!==e.payload)}}}),{setActiveIndex:re,setActiveSession:ne,setSessions:It,setUseGenAi:qt,changeMode:I,addTool:ae,removeTool:K}=oe.actions,ie=oe.reducer;var D=require("@reduxjs/toolkit");var S=class{constructor(e){this.rawResponse=e}detectModelVersion(){let e=this.extractOutput();return!e||e.length===0||!Array.isArray(e)?"unknown":e?.[0]?.content||e?.[1]?.content?"gpt5":e[0]?.message?"gpt4":e?.some(t=>t?.text)?"file-chat":"unknown"}extractOutput(){let e=this.rawResponse;return e?.choices||e?.a?.choices||e?.output||e?.a?.output||e?.content||e?.a?.content||[]}normalizeGPT4Choice(e){return{output:e?.message?.content||""}}normalizeFileChatResponse(e){return{output:e?.text?.value}}normalizeGPT5Output(e){return{output:e.content.map(t=>t.text).join(`
1050
1050
 
1051
- `)}}parse(){let e=this.extractOutput(),t=this.detectModelVersion(),o=[];return t==="gpt4"?o=e?.filter(({message:n})=>n?.content).map(n=>this.normalizeGPT4Choice(n)):t==="gpt5"?o=e?.filter(n=>n?.content?.length>0).map(n=>this.normalizeGPT5Output(n)):t==="file-chat"&&(o=e?.filter(({text:n})=>n)?.map(n=>this.normalizeFileChatResponse(n))),{messages:o,model:t,raw:this.rawResponse}}};var ee=async({baseURL:r,payload:e,apikey:t})=>{try{return await(await fetch("https://"+r+"/ai/vector/chat",{method:"POST",body:JSON.stringify(e),headers:{"x-bang-api-key":t,"x-bang-api-src":"chat-applet"}})).json()}catch{return{error:"Failed to get the response"}}},P=async({baseURL:r,payload:e,apikey:t})=>{try{return await(await fetch("https://"+r+"/ai/vector/metadata",{method:"POST",body:JSON.stringify(e),headers:{"x-bang-api-key":t,"x-bang-api-src":"chat-applet"}})).json()}catch(o){console.error(o)}};var Be={},z={query:"",chatData:[],streamingMessage:null,isLoading:!1},re=(0,q.createSlice)({name:"chatSession",initialState:Be,reducers:{initSession:(r,e)=>{let t=e.payload;r[t]||(r[t]=z)},setLoading:(r,e)=>{let{sessionId:t,loading:o}=e.payload;r[t]||(r[t]=z),r[t].isLoading=o},setQuery:(r,e)=>{let{sessionId:t,query:o}=e.payload;r[t]||(r[t]=z),r[t].query=o},appendChatData:(r,e)=>{let{sessionId:t,chatData:o}=e.payload;r[t]||(r[t]=z),r[t].chatData=[...r[t].chatData||[],...o]},setChatData:(r,e)=>{let{sessionId:t,chatData:o}=e.payload;r[t]||(r[t]=z),r[t].chatData=o},setStreamingMessage:(r,e)=>{let{sessionId:t,message:o}=e.payload;r[t]&&(r[t].streamingMessage=o)}}}),{initSession:Pe,setQuery:D,setChatData:qt,appendChatData:te,setStreamingMessage:_,setLoading:oe}=re.actions,ne=(0,q.createAsyncThunk)("chatSession/streamResponse",async({sessionId:r,query:e,indexName:t,config:{backendURL:o,apikey:n,userid:a}},{getState:s,dispatch:i})=>{let c=s(),{chatData:d,isLoading:l}=c.chatSessions[r];if(!e?.trim()||l)return;i(oe({sessionId:r,loading:!0}));let p={query:e,a:{choices:[]}};i(_({sessionId:r,message:p})),i(D({sessionId:r,query:""}));let m=d?.filter(g=>g&&g?.op!=="ADD_FILES"&&!g?.source_file&&!g?.source)?.length,h=Array.isArray(d)?d?.map(g=>{let{messages:L}=new C(g).parse(),k=L?.map(j=>j?.output)?.filter(Boolean)?.join(`
1052
- `);return!g?.query||!k||k.startsWith("Error: ")?null:{q:g?.query,a:k}})?.filter(g=>g!==null):[],{tools:b}=c.chat,u=b?.[0],f=u?.id==="feeling-lucky"?"GenAI":void 0,v=u?.id==="kpi",w=await ee({baseURL:o,apikey:n,payload:{name:t,qnum:m?m+1:1,fall_back:f,type:v?"kpi":void 0,sessionid:r,userid:a,prev_qa:v?void 0:h,query:p?.query}}),S=new C(w),{raw:x,messages:E}=S.parse();if(i(oe({sessionId:r,loading:!1})),E?.length>0){for(let g=0;g<E.length;g++){let k=(E[g]?.output||"")?.split(" "),j="";for(let A=0;A<k.length;A++)await new Promise(ze=>setTimeout(ze,20)),j=j+(j?" ":"")+k[A],i(_({sessionId:r,message:{...p,a:{choices:[{message:{content:j}}]}}}))}i(te({sessionId:r,chatData:[{...x,query:p?.query}]})),i(_({sessionId:r,message:null}))}else i(te({sessionId:r,chatData:[{query:p?.query,a:{choices:[{message:{content:x?.a?.choices?.[0]?.message?.content||x?.error||"There is no context in the vector index and fall back option is null"}}]}}]}))}),ae=(0,q.createAsyncThunk)("chatSession/initializeState",async({indexName:r},{dispatch:e})=>{let t="GUEST_SESSION";e(Y(r)),e(Q(t)),e(Pe(t))});var ie=re.reducer;var le=(0,se.configureStore)({reducer:{chat:Z,chatSessions:ie}});var F=R(require("highlight.js")),pe=R(require("markdown-it")),he=R(require("@vscode/markdown-it-katex"));var _e=function(r,e,t){let o=t,n=0,a=r.length;for(;o<e.length;){let s=e[o];if(n<=0&&e.slice(o,o+a)===r)return o;s==="\\"?o++:s==="{"?n++:s==="}"&&n--,o++}return-1},Fe=function(r){return r.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},Ue=/^\\begin{/,Ke=function(r,e){let t,o=[],n=new RegExp("("+e.map(a=>Fe(a.left)).join("|")+")");for(;t=r.search(n),t!==-1;){t>0&&(o.push({type:"text",data:r.slice(0,t)}),r=r.slice(t));let a=e.findIndex(c=>r.startsWith(c.left));if(t=_e(e[a].right,r,e[a].left.length),t===-1)break;let s=r.slice(0,t+e[a].right.length),i=Ue.test(s)?s:r.slice(e[a].left.length,t);o.push({type:"math",data:i,rawData:s,display:e[a].display}),r=r.slice(t+e[a].right.length)}return r!==""&&o.push({type:"text",data:r}),o},de=Ke;var Ut=require("katex/dist/contrib/mhchem.min.js");function ce(r){return new Promise(e=>{setTimeout(e,r)})}var me=require("lodash"),be=new pe.default({html:!0,breaks:!0,linkify:!0,highlight:function(r,e){let t=e??"auto";if(e&&F.default.getLanguage(e))try{return`<pre class="language-${e}"><div class="ai-chat-code-title">${e}<a class="ai-chat-code-copy cursor-pointer">Copy</a></div><code class="hljs">`+F.default.highlight(r,{language:t,ignoreIllegals:!0}).value+"</code></pre>"}catch{}return'<pre><code class="hljs">'+r+"</code></pre>"}}).enable(["table","code","fence","blockquote","heading","lheading","paragraph"]).enable(["autolink","linkify","backticks","image","link","newline"]).enable(["emphasis","html_inline"]).use(he.default);typeof window<"u"&&window.document.addEventListener("click",r=>{if(r.target?.classList?.contains("ai-chat-code-copy")){let e=r.target.parentNode?.nextSibling?.innerText;navigator.clipboard.writeText(e).then(async()=>{r.target.innerHTML='<span style="margin-right:3px">Copied</span>\u2705',await ce(3e3),r.target.innerText="Copy"}).catch(t=>{alert(`Error copying code: ${t.message}`)})}});var Ge={fn:r=>{r()}},Gt=(0,me.debounce)((r=()=>{})=>{Ge.fn(r)},10);var Ve=r=>r.replace(/(```mermaid)(?![^]*?```)/g,"```"),We=r=>de(r,[{left:"\\[",right:"\\]",display:!0},{left:"\\(",right:"\\)",display:!1}]).reduce((t,o)=>{if(o.type==="text")return t+o.data;let n=o.display?`$$${o.data}$$`:`$${o.data}$`;return t+n},""),Je=r=>{let e="",t="",o=!1,n="think-wrapper",a=s=>{let i=s.replace(/<script([^>]*)>/gi,"&lt;script$1&gt;");return i=i.replace(/<\/script>/gi,"&lt;/script&gt;"),i=i.replace(/<script([^>]*)\s*\/>/gi,"&lt;script$1 /&gt;"),i};for(let s=0;s<r.length;s++){let i=r[s],c=r.slice(s,s+7),d=r.slice(s,s+8);if(!o&&c==="<think>"){o=!0,e+=`<div class="${n}">`,s+=6;continue}if(o&&d==="</think>"){o=!1,e+="</div>",s+=7;continue}o?t+=i:e+=i}if(t){let s=a(t),i=be.render(s);e=e.replace(`<div class="${n}">`,`<div class="${n}">${i}`)}return e},Ye=r=>r.replace(/\[source_id:\s*([^\]|]+)(?:\s*\|\s*category:\s*([^\]]+))?\]\.?/g,(e,t,o)=>o?`<source-tag data-source-id="${t.trim()}" data-category="${o.trim()}"></source-tag>`:`<source-tag data-source-id="${t.trim()}"></source-tag>`),H=r=>{let e=Je(r),t=We(e),o=Ve(t),n=Ye(o);return be.render(n)};var fe=R(require("echarts")),Qt=require("echarts/theme/dark-bold.js"),T=require("ag-grid-community");function ge(r,e="",t={}){if(typeof r!="object"||r===null||Array.isArray(r))return t;for(let[o,n]of Object.entries(r)){let a=e?`${e}.${o}`:o;typeof n=="object"&&n!==null&&!Array.isArray(n)?ge(n,a,t):t[a]=n}return t}var Qe=["#5470c6","#c5e542","#9d9ec1","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],Xe={color:Qe,backgroundColor:"transparent",tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},legend:{show:!0,type:"scroll",bottom:0,top:null},toolbox:{show:!0,feature:{saveAsImage:{}}}},N=class{constructor(e){this.data=e}parse(){let e=[];if(!this.data)return{charts:[],errors:["Invalid input: null or undefined"]};if(typeof this.data!="object")return{charts:[],errors:[`Invalid input type: expected object, got ${typeof this.data}`]};let t=this.extractArrays(this.data,[]),o=Object.entries(this.data).filter(([,a])=>typeof a=="number"&&!Number.isNaN(a)).map(([a,s])=>({title:a,type:"card",options:{title:a,value:s}}));if(t.length===0&&o.length===0)return{charts:[],errors:["No valid categorical data found"]};let n=[...o];for(let{title:a,items:s}of t){if(s.length===0){e.push(`"${a}": Array is empty \u2014 skipped`);continue}let i=s.map(d=>ge(d)).filter(d=>typeof d=="object"&&d!==null&&!Array.isArray(d)),c=this.detectChartStructure(i);if(c){let d=this.convertToChartData(i,c);if(d.length===0){e.push(`"${a}": No valid rows after conversion \u2014 skipped`);continue}let l=this.isSimpleCategoricalPie(d)?"pie":"bar";n.push({title:a,type:l,options:{...Xe,...this.toChartSeries(d,l)}})}else n.push({title:a,type:"table",options:{columns:Array.from(new Set(i.flatMap(d=>Object.keys(d)))),rows:i}})}return e.length>0?{charts:n,errors:e}:{charts:n}}extractArrays(e,t){if(Array.isArray(e)){let o=e.flatMap((a,s)=>Array.isArray(a)?[]:[a]),n=e.flatMap((a,s)=>Array.isArray(a)?this.extractArrays(a,[...t,`[${s}]`]):[]);return[...o.length?[{title:t.length?t.join("."):"Root Data",items:o}]:[],...n]}return e&&typeof e=="object"?Object.entries(e).flatMap(([o,n])=>this.extractArrays(n,[...t,o])):[]}detectChartStructure(e){if(e.length===0)return null;let t=new Set;for(let s of e)for(let i of Object.keys(s))t.add(i);let o=Array.from(t),n=o.filter(s=>typeof e[0]?.[s]=="string"),a=o.filter(s=>typeof e[0]?.[s]=="number");return a.length===0||n.length>1?null:{labelKey:n[0]??"__auto__",valueKeys:a}}isSimpleCategoricalPie(e){return e.length?e.every(t=>t.values.length===1):!1}convertToChartData(e,t){return e.map((o,n)=>{let a=t.labelKey==="__auto__"?null:o[t.labelKey];return{labelValue:a!=null?String(a):`Item ${n+1}`,labelKey:t.labelKey,values:t.valueKeys.map(i=>({[i]:Number(o[i])||0}))}})}toChartSeries(e,t){if(t==="bar"){let n={};return e.forEach((a,s)=>{a.values.forEach(i=>{let[c,d]=Object.entries(i)[0];n[c]||(n[c]=new Array(e.length).fill(0)),n[c][s]=d})}),{xAxis:{type:"category",data:e.map(a=>a.labelValue).filter(Boolean)},yAxis:{type:"value"},series:Object.entries(n).map(([a,s])=>({name:a,type:"bar",stack:"total",data:s}))}}let o=Object.keys(e[0]?.values?.[0]??{})[0]??"value";return{tooltip:{trigger:"item"},series:[{name:"Data",type:"pie",radius:["40%","70%"],label:{show:!1},labelLine:{show:!1},avoidLabelOverlap:!1,data:e.map(n=>({name:n.labelValue,value:n.values[0]?.[o]??0}))}]}}};var ue=!1;function Ze(){ue||(T.ModuleRegistry.registerModules([T.AllCommunityModule]),ue=!0)}var et=T.themeQuartz.withPart(T.colorSchemeVariable).withParams({fontFamily:"var(--font-body)",headerFontFamily:"var(--font-body)",borderColor:"var(--border)",backgroundColor:"var(--background)",foregroundColor:"var(--foreground)",headerTextColor:"var(--foreground)",headerBackgroundColor:"var(--card)",rowVerticalPaddingScale:1.4,headerColumnResizeHandleColor:"var(--secondary)",wrapperBorderRadius:2});function tt(r){if(typeof r!="string")return!1;try{return JSON.parse(r),!0}catch{return!1}}function ot(r,e){return r<=1||e==="table"?1:e==="card"?Math.min(r,4):2}function rt(r,e){return e===1||r==="table"?"1 / -1":"span 1"}function nt(r){let e=document.createElement("div");e.style.cssText=`
1051
+ `)}}parse(){let e=this.extractOutput(),t=this.detectModelVersion(),o=[];return t==="gpt4"?o=e?.filter(({message:r})=>r?.content).map(r=>this.normalizeGPT4Choice(r)):t==="gpt5"?o=e?.filter(r=>r?.content?.length>0).map(r=>this.normalizeGPT5Output(r)):t==="file-chat"&&(o=e?.filter(({text:r})=>r)?.map(r=>this.normalizeFileChatResponse(r))),{messages:o,model:t,raw:this.rawResponse}}};var se=async({baseURL:n,payload:e,apikey:t})=>{try{return await(await fetch("https://"+n+"/ai/vector/chat",{method:"POST",body:JSON.stringify(e),headers:{"x-bang-api-key":t,"x-bang-api-src":"chat-applet"}})).json()}catch{return{error:"Failed to get the response"}}},G=async({baseURL:n,payload:e,apikey:t})=>{try{return await(await fetch("https://"+n+"/ai/vector/metadata",{method:"POST",body:JSON.stringify(e),headers:{"x-bang-api-key":t,"x-bang-api-src":"chat-applet"}})).json()}catch(o){console.error(o)}};var Ye={},O={query:"",chatData:[],streamingMessage:null,isLoading:!1},ce=(0,D.createSlice)({name:"chatSession",initialState:Ye,reducers:{initSession:(n,e)=>{let t=e.payload;n[t]||(n[t]=O)},setLoading:(n,e)=>{let{sessionId:t,loading:o}=e.payload;n[t]||(n[t]=O),n[t].isLoading=o},setQuery:(n,e)=>{let{sessionId:t,query:o}=e.payload;n[t]||(n[t]=O),n[t].query=o},appendChatData:(n,e)=>{let{sessionId:t,chatData:o}=e.payload;n[t]||(n[t]=O),n[t].chatData=[...n[t].chatData||[],...o]},setChatData:(n,e)=>{let{sessionId:t,chatData:o}=e.payload;n[t]||(n[t]=O),n[t].chatData=o},setStreamingMessage:(n,e)=>{let{sessionId:t,message:o}=e.payload;n[t]&&(n[t].streamingMessage=o)}}}),{initSession:We,setQuery:F,setChatData:Ft,appendChatData:le,setStreamingMessage:Y,setLoading:de}=ce.actions,pe=(0,D.createAsyncThunk)("chatSession/streamResponse",async({sessionId:n,query:e,indexName:t,config:{backendURL:o,apikey:r,userid:a}},{getState:s,dispatch:i})=>{let c=s(),{chatData:p,isLoading:d}=c.chatSessions[n];if(!e?.trim()||d)return;i(de({sessionId:n,loading:!0}));let l={query:e,a:{choices:[]}};i(Y({sessionId:n,message:l})),i(F({sessionId:n,query:""}));let g=p?.filter(x=>x&&x?.op!=="ADD_FILES"&&!x?.source_file&&!x?.source)?.length,h=Array.isArray(p)?p?.map(x=>{let{messages:E}=new S(x).parse(),L=E?.map(j=>j?.output)?.filter(Boolean)?.join(`
1052
+ `);return!x?.query||!L||L.startsWith("Error: ")?null:{q:x?.query,a:L}})?.filter(x=>x!==null):[],{tools:b}=c.chat,m=b?.[0],u=m?.id==="feeling-lucky"?"GenAI":void 0,y=m?.id==="kpi",w=Date.now(),k=await se({baseURL:o,apikey:r,payload:{name:t,qnum:g?g+1:1,fall_back:u,type:y?"kpi":void 0,sessionid:n,userid:a,prev_qa:y?void 0:h,query:l?.query}}),v=new S(k),{raw:C,messages:f}=v.parse();if(i(de({sessionId:n,loading:!1})),f?.length>0){for(let x=0;x<f.length;x++){let L=(f[x]?.output||"")?.split(" "),j="";for(let z=0;z<L.length;z++)await new Promise(H=>setTimeout(H,20)),j=j+(j?" ":"")+L[z],i(Y({sessionId:n,message:{...l,a:{choices:[{message:{content:j}}]}}}))}i(le({sessionId:n,chatData:[{...C,query:l?.query,queryTime:Date.now()-w}]})),i(Y({sessionId:n,message:null}))}else i(le({sessionId:n,chatData:[{query:l?.query,queryTime:Date.now()-w,a:{choices:[{message:{content:C?.a?.choices?.[0]?.message?.content||C?.error||"There is no context in the vector index and fall back option is null"}}]}}]}))}),he=(0,D.createAsyncThunk)("chatSession/initializeState",async({indexName:n},{dispatch:e})=>{let t="GUEST_SESSION";e(re(n)),e(ne(t)),e(We(t))});var be=ce.reducer;var me=(0,ge.configureStore)({reducer:{chat:ie,chatSessions:be}});var W=A(require("highlight.js")),ye=A(require("markdown-it")),ve=A(require("@vscode/markdown-it-katex"));var Je=function(n,e,t){let o=t,r=0,a=n.length;for(;o<e.length;){let s=e[o];if(r<=0&&e.slice(o,o+a)===n)return o;s==="\\"?o++:s==="{"?r++:s==="}"&&r--,o++}return-1},Ve=function(n){return n.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},Xe=/^\\begin{/,Qe=function(n,e){let t,o=[],r=new RegExp("("+e.map(a=>Ve(a.left)).join("|")+")");for(;t=n.search(r),t!==-1;){t>0&&(o.push({type:"text",data:n.slice(0,t)}),n=n.slice(t));let a=e.findIndex(c=>n.startsWith(c.left));if(t=Je(e[a].right,n,e[a].left.length),t===-1)break;let s=n.slice(0,t+e[a].right.length),i=Xe.test(s)?s:n.slice(e[a].left.length,t);o.push({type:"math",data:i,rawData:s,display:e[a].display}),n=n.slice(t+e[a].right.length)}return n!==""&&o.push({type:"text",data:n}),o},ue=Qe;var to=require("katex/dist/contrib/mhchem.min.js");function fe(n){return new Promise(e=>{setTimeout(e,n)})}var xe=require("lodash"),we=new ye.default({html:!0,breaks:!0,linkify:!0,highlight:function(n,e){let t=e??"auto";if(e&&W.default.getLanguage(e))try{return`<pre class="language-${e}"><div class="ai-chat-code-title">${e}<a class="ai-chat-code-copy cursor-pointer">Copy</a></div><code class="hljs">`+W.default.highlight(n,{language:t,ignoreIllegals:!0}).value+"</code></pre>"}catch{}return'<pre><code class="hljs">'+n+"</code></pre>"}}).enable(["table","code","fence","blockquote","heading","lheading","paragraph"]).enable(["autolink","linkify","backticks","image","link","newline"]).enable(["emphasis","html_inline"]).use(ve.default);typeof window<"u"&&window.document.addEventListener("click",n=>{if(n.target?.classList?.contains("ai-chat-code-copy")){let e=n.target.parentNode?.nextSibling?.innerText;navigator.clipboard.writeText(e).then(async()=>{n.target.innerHTML='<span style="margin-right:3px">Copied</span>\u2705',await fe(3e3),n.target.innerText="Copy"}).catch(t=>{alert(`Error copying code: ${t.message}`)})}});var Ze={fn:n=>{n()}},ro=(0,xe.debounce)((n=()=>{})=>{Ze.fn(n)},10);var et=n=>n.replace(/(```mermaid)(?![^]*?```)/g,"```"),tt=n=>ue(n,[{left:"\\[",right:"\\]",display:!0},{left:"\\(",right:"\\)",display:!1}]).reduce((t,o)=>{if(o.type==="text")return t+o.data;let r=o.display?`$$${o.data}$$`:`$${o.data}$`;return t+r},""),ot=n=>{let e="",t="",o=!1,r="think-wrapper",a=s=>{let i=s.replace(/<script([^>]*)>/gi,"&lt;script$1&gt;");return i=i.replace(/<\/script>/gi,"&lt;/script&gt;"),i=i.replace(/<script([^>]*)\s*\/>/gi,"&lt;script$1 /&gt;"),i};for(let s=0;s<n.length;s++){let i=n[s],c=n.slice(s,s+7),p=n.slice(s,s+8);if(!o&&c==="<think>"){o=!0,e+=`<div class="${r}">`,s+=6;continue}if(o&&p==="</think>"){o=!1,e+="</div>",s+=7;continue}o?t+=i:e+=i}if(t){let s=a(t),i=we.render(s);e=e.replace(`<div class="${r}">`,`<div class="${r}">${i}`)}return e},rt=n=>n.replace(/\[source_id:\s*([^\]|]+)(?:\s*\|\s*category:\s*([^\]]+))?\]\.?/g,(e,t,o)=>o?`<source-tag data-source-id="${t.trim()}" data-category="${o.trim()}"></source-tag>`:`<source-tag data-source-id="${t.trim()}"></source-tag>`),$=n=>{let e=ot(n),t=tt(e),o=et(t),r=rt(o);return we.render(r)};var Te=A(require("echarts")),lo=require("echarts/theme/dark-bold.js"),M=require("ag-grid-community");function ke(n,e="",t={}){if(typeof n!="object"||n===null||Array.isArray(n))return t;for(let[o,r]of Object.entries(n)){let a=e?`${e}.${o}`:o;typeof r=="object"&&r!==null&&!Array.isArray(r)?ke(r,a,t):t[a]=r}return t}var nt=["#5470c6","#c5e542","#9d9ec1","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],at={color:nt,backgroundColor:"transparent",tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},legend:{show:!0,type:"scroll",bottom:0,top:null},toolbox:{show:!0,feature:{saveAsImage:{}}}},q=class{constructor(e){this.data=e}parse(){let e=[];if(!this.data)return{charts:[],errors:["Invalid input: null or undefined"]};if(typeof this.data!="object")return{charts:[],errors:[`Invalid input type: expected object, got ${typeof this.data}`]};let t=this.extractArrays(this.data,[]),o=Object.entries(this.data).filter(([,a])=>typeof a=="number"&&!Number.isNaN(a)).map(([a,s])=>({title:a,type:"card",options:{title:a,value:s}}));if(t.length===0&&o.length===0)return{charts:[],errors:["No valid categorical data found"]};let r=[...o];for(let{title:a,items:s}of t){if(s.length===0){e.push(`"${a}": Array is empty \u2014 skipped`);continue}let i=s.map(p=>ke(p)).filter(p=>typeof p=="object"&&p!==null&&!Array.isArray(p)),c=this.detectChartStructure(i);if(c){let p=this.convertToChartData(i,c);if(p.length===0){e.push(`"${a}": No valid rows after conversion \u2014 skipped`);continue}let d=this.isSimpleCategoricalPie(p)?"pie":"bar";r.push({title:a,type:d,options:{...at,...this.toChartSeries(p,d)}})}else r.push({title:a,type:"table",options:{columns:Array.from(new Set(i.flatMap(p=>Object.keys(p)))),rows:i}})}return e.length>0?{charts:r,errors:e}:{charts:r}}extractArrays(e,t){if(Array.isArray(e)){let o=e.flatMap((a,s)=>Array.isArray(a)?[]:[a]),r=e.flatMap((a,s)=>Array.isArray(a)?this.extractArrays(a,[...t,`[${s}]`]):[]);return[...o.length?[{title:t.length?t.join("."):"Root Data",items:o}]:[],...r]}return e&&typeof e=="object"?Object.entries(e).flatMap(([o,r])=>this.extractArrays(r,[...t,o])):[]}detectChartStructure(e){if(e.length===0)return null;let t=new Set;for(let s of e)for(let i of Object.keys(s))t.add(i);let o=Array.from(t),r=o.filter(s=>typeof e[0]?.[s]=="string"),a=o.filter(s=>typeof e[0]?.[s]=="number");return a.length===0||r.length>1?null:{labelKey:r[0]??"__auto__",valueKeys:a}}isSimpleCategoricalPie(e){return e.length?e.every(t=>t.values.length===1):!1}convertToChartData(e,t){return e.map((o,r)=>{let a=t.labelKey==="__auto__"?null:o[t.labelKey];return{labelValue:a!=null?String(a):`Item ${r+1}`,labelKey:t.labelKey,values:t.valueKeys.map(i=>({[i]:Number(o[i])||0}))}})}toChartSeries(e,t){if(t==="bar"){let r={};return e.forEach((a,s)=>{a.values.forEach(i=>{let[c,p]=Object.entries(i)[0];r[c]||(r[c]=new Array(e.length).fill(0)),r[c][s]=p})}),{xAxis:{type:"category",data:e.map(a=>a.labelValue).filter(Boolean)},yAxis:{type:"value"},series:Object.entries(r).map(([a,s])=>({name:a,type:"bar",stack:"total",data:s}))}}let o=Object.keys(e[0]?.values?.[0]??{})[0]??"value";return{tooltip:{trigger:"item"},series:[{name:"Data",type:"pie",radius:["40%","70%"],label:{show:!1},labelLine:{show:!1},avoidLabelOverlap:!1,data:e.map(r=>({name:r.labelValue,value:r.values[0]?.[o]??0}))}]}}};var Ce=!1;function it(){Ce||(M.ModuleRegistry.registerModules([M.AllCommunityModule]),Ce=!0)}var st=M.themeQuartz.withPart(M.colorSchemeVariable).withParams({fontFamily:"var(--font-body)",headerFontFamily:"var(--font-body)",borderColor:"var(--border)",backgroundColor:"var(--background)",foregroundColor:"var(--foreground)",headerTextColor:"var(--foreground)",headerBackgroundColor:"var(--card)",rowVerticalPaddingScale:1.4,headerColumnResizeHandleColor:"var(--secondary)",wrapperBorderRadius:2});function lt(n){if(typeof n!="string")return!1;try{return JSON.parse(n),!0}catch{return!1}}function dt(n,e){return n<=1||e==="table"?1:e==="card"?Math.min(n,4):2}function ct(n,e){return e===1||n==="table"?"1 / -1":"span 1"}function pt(n){let e=document.createElement("div");e.style.cssText=`
1053
1053
  background: var(--card);
1054
1054
  border-radius: var(--radius-md);
1055
1055
  padding: 1rem 1.25rem;
@@ -1058,39 +1058,39 @@ code.hljs {
1058
1058
  gap: 0.5rem;
1059
1059
  height: 6rem;
1060
1060
  justify-content: center;
1061
- `;let t=document.createElement("span");t.style.cssText="font-size: 0.875rem; font-weight: 500; color: var(--foreground); text-transform: capitalize;",t.textContent=String(r.title??"").replace(/_/g," ").replace(/\./g," ");let o=document.createElement("span");o.style.cssText="font-size: 1.25rem; font-weight: 700; color: var(--foreground); line-height: 1.2;";let n=r.value;return typeof n=="number"&&Number.isFinite(n)&&!Number.isInteger(n)?o.textContent=String(Number.parseFloat(n.toFixed(4))):o.textContent=String(n??"\u2014"),e.appendChild(t),e.appendChild(o),e}function at(r){Ze();let e=document.createElement("div");e.style.cssText="width: 100%; height: 400px;";let t={theme:et,rowData:r.rows,columnDefs:(r.columns??[]).map(n=>({headerName:n,field:n})),pagination:!0,paginationPageSize:50,animateRows:!0},o=()=>{e.__bdbGridInitialized||(e.__bdbGridInitialized=!0,(0,T.createGrid)(e,t))};return requestAnimationFrame(()=>{if(e.isConnected)o();else{let n=new MutationObserver(()=>{e.isConnected&&(n.disconnect(),o())});n.observe(document.body,{childList:!0,subtree:!0})}}),e}function it(r,e){let t=document.createElement("div");t.style.cssText=`
1061
+ `;let t=document.createElement("span");t.style.cssText="font-size: 0.875rem; font-weight: 500; color: var(--foreground); text-transform: capitalize;",t.textContent=String(n.title??"").replace(/_/g," ").replace(/\./g," ");let o=document.createElement("span");o.style.cssText="font-size: 1.25rem; font-weight: 700; color: var(--foreground); line-height: 1.2;";let r=n.value;return typeof r=="number"&&Number.isFinite(r)&&!Number.isInteger(r)?o.textContent=String(Number.parseFloat(r.toFixed(4))):o.textContent=String(r??"\u2014"),e.appendChild(t),e.appendChild(o),e}function ht(n){it();let e=document.createElement("div");e.style.cssText="width: 100%; height: 400px;";let t={theme:st,rowData:n.rows,columnDefs:(n.columns??[]).map(r=>({headerName:r,field:r})),pagination:!0,paginationPageSize:50,animateRows:!0},o=()=>{e.__bdbGridInitialized||(e.__bdbGridInitialized=!0,(0,M.createGrid)(e,t))};return requestAnimationFrame(()=>{if(e.isConnected)o();else{let r=new MutationObserver(()=>{e.isConnected&&(r.disconnect(),o())});r.observe(document.body,{childList:!0,subtree:!0})}}),e}function bt(n,e){let t=document.createElement("div");t.style.cssText=`
1062
1062
  width: 100%;
1063
1063
  height: 360px;
1064
- `;let o=null,n=()=>{if(o)return;o=fe.init(t,"dark-bold",{renderer:"canvas"}),o.setOption(r,!0),new ResizeObserver(()=>o?.resize()).observe(t)};return requestAnimationFrame(()=>{if(document.contains(t)||t.isConnected)n();else{let a=new MutationObserver(()=>{t.isConnected&&(a.disconnect(),n())});a.observe(document.body,{childList:!0,subtree:!0})}}),t}function ye(r){let e=document.createElement("div");e.style.cssText="margin-top: 1rem; display: flex; flex-direction: column; gap: 1.25rem;";let t=r;if(tt(r))try{t=JSON.parse(r)}catch{return e}let o=t?.tool_results??[];if(!o.length)return e;let n=o.length;for(let a=0;a<o.length;a++){let s=o[a],i=s?.data;if(!i)continue;let{charts:c}=new N(i).parse();if(!c.length)continue;let d=document.createElement("div");if(d.style.cssText="width: 100%;",s?.tool){let h=document.createElement("h4");h.style.cssText=`
1064
+ `;let o=null,r=()=>{if(o)return;o=Te.init(t,"dark-bold",{renderer:"canvas"}),o.setOption(n,!0),new ResizeObserver(()=>o?.resize()).observe(t)};return requestAnimationFrame(()=>{if(document.contains(t)||t.isConnected)r();else{let a=new MutationObserver(()=>{t.isConnected&&(a.disconnect(),r())});a.observe(document.body,{childList:!0,subtree:!0})}}),t}function Ee(n){let e=document.createElement("div");e.style.cssText="margin-top: 1rem; display: flex; flex-direction: column; gap: 1.25rem;";let t=n;if(lt(n))try{t=JSON.parse(n)}catch{return e}let o=t?.tool_results??[];if(!o.length)return e;let r=o.length;for(let a=0;a<o.length;a++){let s=o[a],i=s?.data;if(!i)continue;let{charts:c}=new q(i).parse();if(!c.length)continue;let p=document.createElement("div");if(p.style.cssText="width: 100%;",s?.tool){let h=document.createElement("h4");h.style.cssText=`
1065
1065
  font-size: 13px;
1066
1066
  font-weight: 600;
1067
1067
  color: var(--foreground);
1068
1068
  margin: 0 0 0.25rem 0;
1069
1069
  font-family: var(--font-body);
1070
1070
  text-transform: capitalize;
1071
- `,h.textContent=String(s.tool).replace(/_/g," "),d.appendChild(h)}if(s?.description){let h=document.createElement("p");h.style.cssText=`
1071
+ `,h.textContent=String(s.tool).replace(/_/g," "),p.appendChild(h)}if(s?.description){let h=document.createElement("p");h.style.cssText=`
1072
1072
  font-size: 12px;
1073
1073
  color: var(--muted-foreground);
1074
1074
  margin: 0 0 0.75rem 0;
1075
1075
  font-family: var(--font-body);
1076
1076
  line-height: 1.5;
1077
- `,h.textContent=s.description,d.appendChild(h)}let l=document.createElement("hr");l.style.cssText="border: none; border-top: 1px solid var(--border); margin-bottom: 0.75rem;",d.appendChild(l);let p=ot(n,c[0]?.type),m=document.createElement("div");m.style.cssText=`
1077
+ `,h.textContent=s.description,p.appendChild(h)}let d=document.createElement("hr");d.style.cssText="border: none; border-top: 1px solid var(--border); margin-bottom: 0.75rem;",p.appendChild(d);let l=dt(r,c[0]?.type),g=document.createElement("div");g.style.cssText=`
1078
1078
  display: grid;
1079
- grid-template-columns: repeat(${p}, minmax(0, 1fr));
1079
+ grid-template-columns: repeat(${l}, minmax(0, 1fr));
1080
1080
  gap: 0.5rem;
1081
1081
  width: 100%;
1082
1082
  padding: 1rem 0;
1083
- `;for(let h=0;h<c.length;h++){let b=c[h],u=document.createElement("div");u.style.gridColumn=rt(b.type,n);let f;switch(b.type){case"card":f=nt(b.options);break;case"table":f=at(b.options);break;case"bar":case"pie":f=it(b.options,b.type);break;default:f=document.createElement("div")}u.appendChild(f),m.appendChild(u)}d.appendChild(m),e.appendChild(d)}return e}function we(r,e="",t={}){for(let o in r){let n=r[o],a=e?`${e}.${o}`:o;typeof n=="object"&&n!==null&&!Array.isArray(n)?we(n,a,t):(typeof n=="number"||typeof n=="string")&&(t[a]=n)}return t}var ve=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1083
+ `;for(let h=0;h<c.length;h++){let b=c[h],m=document.createElement("div");m.style.gridColumn=ct(b.type,r);let u;switch(b.type){case"card":u=pt(b.options);break;case"table":u=ht(b.options);break;case"bar":case"pie":u=bt(b.options,b.type);break;default:u=document.createElement("div")}m.appendChild(u),g.appendChild(m)}p.appendChild(g),e.appendChild(p)}return e}function Se(n,e="",t={}){for(let o in n){let r=n[o],a=e?`${e}.${o}`:o;typeof r=="object"&&r!==null&&!Array.isArray(r)?Se(r,a,t):(typeof r=="number"||typeof r=="string")&&(t[a]=r)}return t}var R=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1084
1084
  <rect width="14" height="14" x="8" y="8" rx="2" ry="2"/>
1085
1085
  <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>
1086
- </svg>`,st=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1086
+ </svg>`,gt=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1087
1087
  <circle cx="12" cy="12" r="10"/>
1088
1088
  <path d="M12 16v-4M12 8h.01"/>
1089
- </svg>`,lt=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1089
+ </svg>`,mt=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1090
1090
  <circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/>
1091
- </svg>`,dt=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1091
+ </svg>`,ut=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1092
1092
  <path d="M20 6 9 17l-5-5"/>
1093
- </svg>`,ct=`
1093
+ </svg>`,ft=`
1094
1094
  display: inline-flex;
1095
1095
  align-items: center;
1096
1096
  justify-content: center;
@@ -1103,7 +1103,7 @@ code.hljs {
1103
1103
  cursor: pointer;
1104
1104
  transition: background 0.15s, color 0.15s, border-color 0.15s;
1105
1105
  flex-shrink: 0;
1106
- `;function U(r,e){let t=document.createElement("button");return t.setAttribute("aria-label",e),t.style.cssText=ct,t.innerHTML=r,t.addEventListener("mouseenter",()=>{t.style.background="color-mix(in oklab, var(--foreground) 7%, transparent)",t.style.color="var(--foreground)",t.style.borderColor="var(--ring)"}),t.addEventListener("mouseleave",()=>{t.style.background="var(--card)",t.style.color="var(--muted-foreground)",t.style.borderColor="var(--border)"}),t}function pt(r,e){let t=document.querySelector(".bdb-usage-dropdown");if(t){t.remove();return}let o=document.createElement("div");o.className="bdb-usage-dropdown",o.style.cssText=`
1106
+ `;function N(n,e){let t=document.createElement("button");return t.setAttribute("aria-label",e),t.style.cssText=ft,t.innerHTML=n,t.addEventListener("mouseenter",()=>{t.style.background="color-mix(in oklab, var(--foreground) 7%, transparent)",t.style.color="var(--foreground)",t.style.borderColor="var(--ring)"}),t.addEventListener("mouseleave",()=>{t.style.background="var(--card)",t.style.color="var(--muted-foreground)",t.style.borderColor="var(--border)"}),t}function yt(n,e){let t=document.querySelector(".bdb-usage-dropdown");if(t){t.remove();return}let o=document.createElement("div");o.className="bdb-usage-dropdown",o.style.cssText=`
1107
1107
  position: absolute;
1108
1108
  bottom: calc(100% + 6px);
1109
1109
  right: 0;
@@ -1115,7 +1115,7 @@ code.hljs {
1115
1115
  z-index: 100;
1116
1116
  overflow: hidden;
1117
1117
  animation: bdb-fade-in 0.12s ease;
1118
- `;let n=document.createElement("div");n.style.cssText=`
1118
+ `;let r=document.createElement("div");r.style.cssText=`
1119
1119
  font-size: 11px;
1120
1120
  font-weight: 600;
1121
1121
  color: var(--muted-foreground);
@@ -1123,7 +1123,7 @@ code.hljs {
1123
1123
  letter-spacing: 0.05em;
1124
1124
  text-transform: uppercase;
1125
1125
  border-bottom: 1px solid var(--border);
1126
- `,n.textContent="Usage Stats",o.appendChild(n);let a=document.createElement("div");a.style.cssText="padding: 0.25rem 0;";for(let[c,d]of Object.entries(e)){let l=document.createElement("div");l.style.cssText=`
1126
+ `,r.textContent="Usage Stats",o.appendChild(r);let a=document.createElement("div");a.style.cssText="padding: 0.25rem 0;";for(let[c,p]of Object.entries(e)){let d=document.createElement("div");d.style.cssText=`
1127
1127
  display: flex;
1128
1128
  align-items: center;
1129
1129
  justify-content: space-between;
@@ -1131,14 +1131,17 @@ code.hljs {
1131
1131
  padding: 0.3rem 0.75rem;
1132
1132
  font-size: 12px;
1133
1133
  color: var(--foreground);
1134
- `,l.addEventListener("mouseenter",()=>{l.style.background="color-mix(in oklab, var(--foreground) 5%, transparent)"}),l.addEventListener("mouseleave",()=>{l.style.background="transparent"});let p=document.createElement("span");p.style.cssText="color: var(--muted-foreground); text-transform: capitalize;",p.textContent=c.split(".").pop()?.replace(/_/g," ")??c;let m=document.createElement("span");m.style.cssText="font-weight: 500; font-variant-numeric: tabular-nums;",m.textContent=String(d),l.appendChild(p),l.appendChild(m),a.appendChild(l)}o.appendChild(a);let s=r.parentElement;s.style.position="relative",s.appendChild(o);let i=c=>{!o.contains(c.target)&&c.target!==r&&(o.remove(),document.removeEventListener("click",i,!0))};setTimeout(()=>document.addEventListener("click",i,!0),0)}function xe(r){let{textToCopy:e,usageData:t,onInfo:o}=r,n=document.createElement("div");n.style.cssText=`
1134
+ `,d.addEventListener("mouseenter",()=>{d.style.background="color-mix(in oklab, var(--foreground) 5%, transparent)"}),d.addEventListener("mouseleave",()=>{d.style.background="transparent"});let l=document.createElement("span");l.style.cssText="color: var(--muted-foreground); text-transform: capitalize;",l.textContent=c.split(".").pop()?.replace(/_/g," ")??c;let g=document.createElement("span");g.style.cssText="font-weight: 500; font-variant-numeric: tabular-nums;",g.textContent=String(p),d.appendChild(l),d.appendChild(g),a.appendChild(d)}o.appendChild(a);let s=n.parentElement;s.style.position="relative",s.appendChild(o);let i=c=>{!o.contains(c.target)&&c.target!==n&&(o.remove(),document.removeEventListener("click",i,!0))};setTimeout(()=>document.addEventListener("click",i,!0),0)}function vt(n){return n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`}var xt=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1135
+ <circle cx="12" cy="12" r="10"/>
1136
+ <path d="M12 6v6l4 2"/>
1137
+ </svg>`;function Le(n){let{textToCopy:e,queryTimeMs:t,usageData:o,onInfo:r}=n,a=document.createElement("div");a.style.cssText=`
1135
1138
  display: flex;
1136
1139
  align-items: center;
1137
1140
  justify-content: space-between;
1138
1141
  gap: 0.5rem;
1139
1142
  padding: 0.375rem 0;
1140
1143
  min-height: 38px;
1141
- `;let a=document.createElement("div");a.style.cssText="display: flex; align-items: center; gap: 6px;";let s=U(ve,"Copy to clipboard");if(s.addEventListener("click",async()=>{try{await navigator.clipboard.writeText(e),s.innerHTML=dt,s.style.color="var(--primary)",s.style.borderColor="var(--primary)",setTimeout(()=>{s.innerHTML=ve,s.style.color="",s.style.borderColor=""},2e3)}catch{}}),a.appendChild(s),o){let i=U(st,"View response context");i.addEventListener("click",()=>o()),a.appendChild(i)}if(n.appendChild(a),t&&typeof t=="object"){let i=we(t);if(Object.keys(i).length>0){let c=document.createElement("div");c.style.cssText="display: flex; align-items: center; position: relative;";let d=U(lt,"Show usage stats");d.addEventListener("click",l=>{l.stopPropagation(),pt(d,i)}),c.appendChild(d),n.appendChild(c)}}return n}var ke=!1;function ht(r){if(ke)return;ke=!0;let e=document.createElement("style");e.textContent=`
1144
+ `;let s=document.createElement("div");s.style.cssText="display: flex; align-items: center; gap: 6px;";let i=N(R,"Copy to clipboard");if(i.addEventListener("click",async()=>{try{await navigator.clipboard.writeText(e),i.innerHTML=ut,i.style.color="var(--primary)",i.style.borderColor="var(--primary)",setTimeout(()=>{i.innerHTML=R,i.style.color="",i.style.borderColor=""},2e3)}catch{}}),s.appendChild(i),r){let c=N(gt,"View response context");c.addEventListener("click",()=>r()),s.appendChild(c)}if(typeof t=="number"&&Number.isFinite(t)){let c=document.createElement("span");c.style.cssText="display: inline-flex; align-items: center; gap: 4px; padding-inline: 4px; font-size: 11px; color: var(--muted-foreground); user-select: none;";let p=document.createElement("span");p.innerHTML=xt,p.style.display="inline-flex";let d=document.createElement("span");d.textContent=`Thought for ${vt(t)}`,c.appendChild(p),c.appendChild(d),s.appendChild(c)}if(a.appendChild(s),o&&typeof o=="object"){let c=Se(o);if(Object.keys(c).length>0){let p=document.createElement("div");p.style.cssText="display: flex; align-items: center; position: relative;";let d=N(mt,"Show usage stats");d.addEventListener("click",l=>{l.stopPropagation(),yt(d,c)}),p.appendChild(d),a.appendChild(p)}}return a}var je=!1;function wt(n){if(je)return;je=!0;let e=document.createElement("style");e.textContent=`
1142
1145
  @keyframes bdb-drawer-in {
1143
1146
  from { transform: translateX(100%); opacity: 0; }
1144
1147
  to { transform: translateX(0); opacity: 1; }
@@ -1284,13 +1287,13 @@ code.hljs {
1284
1287
  .bdb-json-pre .json-num { color: #f08d49; }
1285
1288
  .bdb-json-pre .json-bool { color: #c59bc1; }
1286
1289
  .bdb-json-pre .json-null { color: #de7176; }
1287
- `,r.appendChild?r.appendChild(e):document.head.appendChild(e)}function mt(r){return JSON.stringify(r,null,2).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,t=>{let o="json-num";return/^"/.test(t)?o=/:$/.test(t)?"json-key":"json-str":/true|false/.test(t)?o="json-bool":/null/.test(t)&&(o="json-null"),`<span class="${o}">${t}</span>`})}function bt(r,e,t){r.forEach(o=>o.classList.toggle("active",o.dataset.tab===t)),e.forEach(o=>o.classList.toggle("active",o.dataset.content===t))}function Ce(r){let{item:e,indexName:t,shadowRoot:o,onClose:n}=r;ht(o);let a=document.createElement("div");a.style.cssText="position: fixed; inset: 0; z-index: 1000000;";let s=document.createElement("div");s.className="bdb-drawer-overlay",s.addEventListener("click",x),a.appendChild(s);let i=document.createElement("div");i.className="bdb-drawer-panel",a.appendChild(i);let c=document.createElement("div");c.className="bdb-drawer-header";let d=document.createElement("h3");d.className="bdb-drawer-title",d.textContent="Response Details";let l=document.createElement("button");l.className="bdb-drawer-close",l.setAttribute("aria-label","Close drawer"),l.innerHTML=`<svg width="14" height="14" viewBox="0 0 14 14" fill="none">
1290
+ `,n.appendChild?n.appendChild(e):document.head.appendChild(e)}function kt(n){return JSON.stringify(n,null,2).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,t=>{let o="json-num";return/^"/.test(t)?o=/:$/.test(t)?"json-key":"json-str":/true|false/.test(t)?o="json-bool":/null/.test(t)&&(o="json-null"),`<span class="${o}">${t}</span>`})}function Ct(n,e,t){n.forEach(o=>o.classList.toggle("active",o.dataset.tab===t)),e.forEach(o=>o.classList.toggle("active",o.dataset.content===t))}function Me(n){let{item:e,indexName:t,shadowRoot:o,onClose:r}=n;wt(o);let a=document.createElement("div");a.style.cssText="position: fixed; inset: 0; z-index: 1000000;";let s=document.createElement("div");s.className="bdb-drawer-overlay",s.addEventListener("click",v),a.appendChild(s);let i=document.createElement("div");i.className="bdb-drawer-panel",a.appendChild(i);let c=document.createElement("div");c.className="bdb-drawer-header";let p=document.createElement("h3");p.className="bdb-drawer-title",p.textContent="Response Details";let d=document.createElement("button");d.className="bdb-drawer-close",d.setAttribute("aria-label","Close drawer"),d.innerHTML=`<svg width="14" height="14" viewBox="0 0 14 14" fill="none">
1288
1291
  <path d="M1 1l12 12M13 1L1 13" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"/>
1289
- </svg>`,l.addEventListener("click",x),c.appendChild(d),c.appendChild(l),i.appendChild(c);let p=document.createElement("div");p.className="bdb-drawer-tabs",[{id:"response",label:"Response"},{id:"json",label:"Response JSON"}].forEach(({id:g,label:L})=>{let k=document.createElement("button");k.className="bdb-drawer-tab"+(g==="response"?" active":""),k.dataset.tab=g,k.textContent=L,k.addEventListener("click",()=>{let j=i.querySelectorAll(".bdb-drawer-tab"),A=i.querySelectorAll(".bdb-drawer-tab-content");bt(j,A,g)}),p.appendChild(k)}),i.appendChild(p);let h=document.createElement("div");h.className="bdb-drawer-body",i.appendChild(h);let b=document.createElement("div");if(b.className="bdb-drawer-tab-content active",b.dataset.content="response",e?.query){let g=document.createElement("div");g.style.cssText=`
1292
+ </svg>`,d.addEventListener("click",v),c.appendChild(p),c.appendChild(d),i.appendChild(c);let l=document.createElement("div");l.className="bdb-drawer-tabs",[{id:"response",label:"Response"},{id:"json",label:"Response JSON"}].forEach(({id:f,label:x})=>{let E=document.createElement("button");E.className="bdb-drawer-tab"+(f==="response"?" active":""),E.dataset.tab=f,E.textContent=x,E.addEventListener("click",()=>{let L=i.querySelectorAll(".bdb-drawer-tab"),j=i.querySelectorAll(".bdb-drawer-tab-content");Ct(L,j,f)}),l.appendChild(E)}),i.appendChild(l);let h=document.createElement("div");h.className="bdb-drawer-body",i.appendChild(h);let b=document.createElement("div");if(b.className="bdb-drawer-tab-content active",b.dataset.content="response",e?.query){let f=document.createElement("div");f.style.cssText=`
1290
1293
  display: flex;
1291
1294
  justify-content: flex-end;
1292
1295
  margin-bottom: 1rem;
1293
- `;let L=document.createElement("div");L.style.cssText=`
1296
+ `;let x=document.createElement("div");x.style.cssText=`
1294
1297
  max-width: 80%;
1295
1298
  background: var(--secondary);
1296
1299
  color: var(--secondary-foreground);
@@ -1299,25 +1302,25 @@ code.hljs {
1299
1302
  font-size: 13px;
1300
1303
  line-height: 1.55;
1301
1304
  word-break: break-word;
1302
- `,L.textContent=e.query,g.appendChild(L),b.appendChild(g)}let u=new C(e),{messages:f}=u.parse(),v=f.map(g=>g.output??"").join(`
1305
+ `,x.textContent=e.query,f.appendChild(x),b.appendChild(f)}let m=new S(e),{messages:u}=m.parse(),y=u.map(f=>f.output??"").join(`
1303
1306
 
1304
- `);if(v){let g=document.createElement("div");g.className="bdb-ai-bubble ai-md prose",g.style.cssText="font-size: 13px; line-height: 1.65; color: var(--foreground);",g.innerHTML=H(v),b.appendChild(g)}h.appendChild(b);let w=document.createElement("div");w.className="bdb-drawer-tab-content",w.dataset.content="json";let S=document.createElement("pre");S.className="bdb-json-pre",S.innerHTML=mt(e),w.appendChild(S),h.appendChild(w);function x(){i.style.animation="bdb-drawer-out 0.18s ease-in both",s.style.opacity="0",s.style.transition="opacity 0.18s",setTimeout(()=>{a.remove(),n()},180)}let E=g=>{g.key==="Escape"&&(x(),document.removeEventListener("keydown",E))};return document.addEventListener("keydown",E),a}var Te=require("jspdf");function Ee(r,e){let t=URL.createObjectURL(r),o=document.createElement("a");o.href=t,o.download=e,document.body.appendChild(o),o.click(),setTimeout(()=>{document.body.removeChild(o),URL.revokeObjectURL(t)},100)}function Se(r){let{messages:e}=new C(r).parse();return e.map(t=>t.output).filter(Boolean).join(`
1307
+ `);if(y){let f=document.createElement("div");f.className="bdb-ai-bubble ai-md prose",f.style.cssText="font-size: 13px; line-height: 1.65; color: var(--foreground);",f.innerHTML=$(y),b.appendChild(f)}h.appendChild(b);let w=document.createElement("div");w.className="bdb-drawer-tab-content",w.dataset.content="json";let k=document.createElement("pre");k.className="bdb-json-pre",k.innerHTML=kt(e),w.appendChild(k),h.appendChild(w);function v(){i.style.animation="bdb-drawer-out 0.18s ease-in both",s.style.opacity="0",s.style.transition="opacity 0.18s",setTimeout(()=>{a.remove(),r()},180)}let C=f=>{f.key==="Escape"&&(v(),document.removeEventListener("keydown",C))};return document.addEventListener("keydown",C),a}var ze=require("jspdf"),Ae=A(require("jspdf-autotable")),Ie=A(require("echarts"));function J(n,e){let t=URL.createObjectURL(n),o=document.createElement("a");o.href=t,o.download=e,document.body.appendChild(o),o.click(),setTimeout(()=>{document.body.removeChild(o),URL.revokeObjectURL(t)},100)}function qe(n){let{messages:e}=new S(n).parse();return e.map(t=>t.output).filter(Boolean).join(`
1305
1308
 
1306
- `)}function Le(r,e){let t=`# ${e}
1309
+ `)}function He(n,e){let t=`# ${e}
1307
1310
 
1308
1311
  `;t+=`*Exported on ${new Date().toLocaleString()}*
1309
1312
 
1310
1313
  `,t+=`---
1311
1314
 
1312
- `;for(let n of r){n.query&&(t+=`**User:**
1313
- ${n.query}
1315
+ `;for(let r of n){r.query&&(t+=`**User:**
1316
+ ${r.query}
1314
1317
 
1315
- `);let a=Se(n);a&&(t+=`**AI:**
1318
+ `);let a=qe(r);a&&(t+=`**AI:**
1316
1319
  ${a}
1317
1320
 
1318
- `)}let o=new Blob([t],{type:"text/markdown"});Ee(o,`chat-${new Date().toISOString().split("T")[0]}.md`)}function je(r,e){try{let t=new Te.jsPDF,o=t.internal.pageSize.height,n=t.internal.pageSize.width,a=14,s=n-a*2,i=20,c=(l=10)=>{i>o-a-l&&(t.addPage(),i=a+10)};t.setFontSize(18),t.setFont("helvetica","bold"),t.setTextColor(0,0,0),t.text(e,a,i),i+=8,t.setFontSize(10),t.setFont("helvetica","normal"),t.setTextColor(100,100,100),t.text(`Exported on ${new Date().toLocaleString()}`,a,i),i+=8,t.setDrawColor(180,180,180),t.setLineWidth(.4),t.line(a,i,a+s,i),i+=8;for(let l of r){if(l.query){c(20),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(60,130,100),t.text("You:",a,i),i+=6,t.setFont("helvetica","normal"),t.setTextColor(30,30,30);let m=t.splitTextToSize(l.query,s-4);for(let h of m)c(),t.text(h,a+4,i),i+=5.5;i+=4}let p=Se(l);if(p){c(20),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(80,80,200),t.text("AI:",a,i),i+=6,t.setFont("helvetica","normal"),t.setTextColor(30,30,30);let m=p.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/#{1,6}\s/g,"").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
1321
+ `)}let o=new Blob([t],{type:"text/markdown"});J(o,`chat-${new Date().toISOString().split("T")[0]}.md`)}function Oe(n){let e=new Blob([JSON.stringify(n,null,2)],{type:"application/json"});J(e,`chat-${new Date().toISOString().split("T")[0]}.json`)}function Tt(n){let e=n?._data??n?.a?._data;if(!e)return[];let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return[]}let o=t?.tool_results??[];if(!o.length)return[];let r=[];for(let a of o){if(!a?.data)continue;let{charts:s}=new q(a.data).parse();for(let i of s)r.push({...i,title:a.tool?String(a.tool).replace(/_/g," "):i.title})}return r}function Et(n,e=800,t=480){let o=document.createElement("div");o.style.cssText=`position: fixed; left: -10000px; top: 0; width: ${e}px; height: ${t}px;`,document.body.appendChild(o);try{let r=Ie.init(o,null,{renderer:"canvas",width:e,height:t}),a={...n,backgroundColor:"#ffffff",animation:!1,toolbox:{show:!1}};r.setOption(a,!0);let s=r.getDataURL({type:"png",pixelRatio:2,backgroundColor:"#ffffff"});return r.dispose(),s}catch(r){return console.error("[BangDB] chart render failed:",r),null}finally{document.body.removeChild(o)}}function De(n,e){try{let t=new ze.jsPDF,o=t.internal.pageSize.height,r=t.internal.pageSize.width,a=14,s=r-a*2,i=20,c=(d=10)=>{i>o-a-d&&(t.addPage(),i=a+10)};t.setFontSize(18),t.setFont("helvetica","bold"),t.setTextColor(0,0,0),t.text(e,a,i),i+=8,t.setFontSize(10),t.setFont("helvetica","normal"),t.setTextColor(100,100,100),t.text(`Exported on ${new Date().toLocaleString()}`,a,i),i+=8,t.setDrawColor(180,180,180),t.setLineWidth(.4),t.line(a,i,a+s,i),i+=8;for(let d of n){if(d.query){c(20),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(60,130,100),t.text("You:",a,i),i+=6,t.setFont("helvetica","normal"),t.setTextColor(30,30,30);let h=t.splitTextToSize(d.query,s-4);for(let b of h)c(),t.text(b,a+4,i),i+=5.5;i+=4}let l=qe(d);if(l){c(20),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(80,80,200),t.text("AI:",a,i),i+=6,t.setFont("helvetica","normal"),t.setTextColor(30,30,30);let h=l.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/#{1,6}\s/g,"").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
1319
1322
 
1320
- `),h=t.splitTextToSize(m,s-4);for(let b of h)c(),t.text(b,a+4,i),i+=5.5;i+=8,c(5),t.setDrawColor(220,220,220),t.setLineWidth(.2),t.line(a,i-4,a+s,i-4),i+=2}}let d=t.output("blob");Ee(d,`chat-${new Date().toISOString().split("T")[0]}.pdf`)}catch(t){console.error("[BangDB] PDF export failed:",t)}}var I=class I{constructor(e){this.font={body:'"Inter", sans-serif',mono:'"JetBrains Mono", monospace'};this.tools=[];this.TOKENS={background:"oklch(0.2223 0.0060 271.1393)",foreground:"oklch(0.9551 0 0)",card:"oklch(0.2568 0.0076 274.6528)",cardForeground:"oklch(0.9551 0 0)",primary:"oklch(0.611 0.1217 157.75)",primaryForeground:"oklch(0.9491 0 0)",secondary:"oklch(0.2940 0.0130 272.9312)",secondaryForeground:"oklch(0.9551 0 0)",muted:"oklch(0.2940 0.0130 272.9312)",mutedForeground:"oklch(0.7058 0 0)",accent:"oklch(0.2795 0.0368 260.0310)",accentForeground:"oklch(0.7857 0.1153 246.6596)",border:"oklch(0.3289 0.0092 268.3843)",input:"oklch(0.3289 0.0092 268.3843)",ring:"oklch(0.611 0.1217 157.75)",radius:"0.5rem",shadowPanel:"0 32px 80px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.06)",shadowBubble:"0 8px 32px color-mix(in oklab, oklch(0.611 0.1217 157.75) 40%, transparent)",shadowInput:"0 0 0 2px color-mix(in oklab, oklch(0.611 0.1217 157.75) 50%, transparent)"};this.store=le;this.apiConfig=null;this.bubbleEl=null;this.chatUIEl=null;this.chatAreaEl=null;this.renderedMessageIds=new Set;this.chatTitle="Chat with AI";this.logoUrl="";e.colorTokens&&(this.TOKENS={...this.TOKENS,...e.colorTokens}),e.title&&(this.chatTitle=e.title),e.logo&&(this.logoUrl=e.logo);let t=e.tools||I.DEFAULT_TOOLS,o=new Set(I.DEFAULT_TOOLS.map(n=>n.id));this.tools=t.filter(n=>o.has(n.id)).map(n=>({id:n.id,name:n.name})),this.apiConfig=e.config,this.container=document.createElement("div"),this.container.id="ai-chat-widget-root",document.body.appendChild(this.container),this.root=this.container.attachShadow({mode:"open"}),this.injectGlobalFonts(),this.injectThemeVars(),this.root,this.init().then(()=>{this.mount(),this.store.subscribe(()=>{let n=this.store.getState(),a=n?.chat?.mode,{chatData:s,streamingMessage:i,isLoading:c}=n?.chatSessions?.[n?.chat?.activeSession]??{};this.handleModeChange(a),this.handleChatDataChange({streamingMessage:i,chatData:s,isLoading:c})})})}injectThemeVars(){let e=this.TOKENS,t=document.createElement("style");t.textContent=`
1323
+ `),b=t.splitTextToSize(h,s-4);for(let m of b)c(),t.text(m,a+4,i),i+=5.5;i+=4}let g=Tt(d);if(g.length>0){i+=2;for(let h of g)if(c(30),h.title&&(t.setFontSize(10),t.setFont("helvetica","bold"),t.setTextColor(60,60,60),t.text(String(h.title).replace(/_/g," ").replace(/\./g," "),a+4,i),i+=5),h.type==="card"){let b=h.options;t.setFontSize(10),t.setFont("helvetica","normal"),t.setTextColor(80,80,80);let m=String(b.title??"").replace(/_/g," "),u,y=b.value;typeof y=="number"&&Number.isFinite(y)&&!Number.isInteger(y)?u=String(Number.parseFloat(y.toFixed(4))):u=String(y??"\u2014"),t.text(`${m}: `,a+4,i),t.setFont("helvetica","bold"),t.setTextColor(30,30,30);let w=t.getTextWidth(`${m}: `);t.text(u,a+4+w,i),i+=7}else if(h.type==="table"){let b=h.options,m=b.columns??[],u=(b.rows??[]).map(w=>m.map(k=>{let v=w[k];return v==null?"":typeof v=="object"?JSON.stringify(v):String(v)}));(0,Ae.default)(t,{startY:i,head:[m],body:u,margin:{left:a+4,right:a},styles:{fontSize:8,cellPadding:2},headStyles:{fillColor:[240,240,240],textColor:[40,40,40],fontStyle:"bold"},theme:"grid"}),i=(t.lastAutoTable?.finalY??i)+6}else if(h.type==="bar"||h.type==="pie"){let b=s-4,m=b*.6;c(m+10);let u=Et(h.options,800,480);if(u)try{t.addImage(u,"PNG",a+4,i,b,m),i+=m+6}catch(y){console.error("[BangDB] addImage failed:",y)}}}c(5),t.setDrawColor(220,220,220),t.setLineWidth(.2),t.line(a,i,a+s,i),i+=6}let p=t.output("blob");J(p,`chat-${new Date().toISOString().split("T")[0]}.pdf`)}catch(t){console.error("[BangDB] PDF export failed:",t)}}var B=class B{constructor(e){this.font={body:'"Inter", sans-serif',mono:'"JetBrains Mono", monospace'};this.tools=[];this.TOKENS={background:"oklch(0.2223 0.0060 271.1393)",foreground:"oklch(0.9551 0 0)",card:"oklch(0.2568 0.0076 274.6528)",cardForeground:"oklch(0.9551 0 0)",primary:"oklch(0.611 0.1217 157.75)",primaryForeground:"oklch(0.9491 0 0)",secondary:"oklch(0.2940 0.0130 272.9312)",secondaryForeground:"oklch(0.9551 0 0)",muted:"oklch(0.2940 0.0130 272.9312)",mutedForeground:"oklch(0.7058 0 0)",accent:"oklch(0.2795 0.0368 260.0310)",accentForeground:"oklch(0.7857 0.1153 246.6596)",border:"oklch(0.3289 0.0092 268.3843)",input:"oklch(0.3289 0.0092 268.3843)",ring:"oklch(0.611 0.1217 157.75)",radius:"0.5rem",shadowPanel:"0 32px 80px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.06)",shadowBubble:"0 8px 32px color-mix(in oklab, oklch(0.611 0.1217 157.75) 40%, transparent)",shadowInput:"0 0 0 2px color-mix(in oklab, oklch(0.611 0.1217 157.75) 50%, transparent)"};this.store=me;this.apiConfig=null;this.bubbleEl=null;this.chatUIEl=null;this.chatAreaEl=null;this.renderedMessageIds=new Set;this.chatTitle="Chat with AI";this.logoUrl="";e.colorTokens&&(this.TOKENS={...this.TOKENS,...e.colorTokens}),e.title&&(this.chatTitle=e.title),e.logo&&(this.logoUrl=e.logo);let t=e.tools||B.DEFAULT_TOOLS,o=new Set(B.DEFAULT_TOOLS.map(r=>r.id));this.tools=t.filter(r=>o.has(r.id)).map(r=>({id:r.id,name:r.name})),this.apiConfig=e.config,this.container=document.createElement("div"),this.container.id="ai-chat-widget-root",document.body.appendChild(this.container),this.root=this.container.attachShadow({mode:"open"}),this.injectGlobalFonts(),this.injectThemeVars(),this.root,this.init().then(()=>{this.mount(),this.store.subscribe(()=>{let r=this.store.getState(),a=r?.chat?.mode,{chatData:s,streamingMessage:i,isLoading:c}=r?.chatSessions?.[r?.chat?.activeSession]??{};this.handleModeChange(a),this.handleChatDataChange({streamingMessage:i,chatData:s,isLoading:c})})})}injectThemeVars(){let e=this.TOKENS,t=document.createElement("style");t.textContent=`
1321
1324
  :host {
1322
1325
  --background: ${e.background};
1323
1326
  --foreground: ${e.foreground};
@@ -1346,7 +1349,7 @@ ${a}
1346
1349
  --font-body: ${this.font.body};
1347
1350
  --font-mono: ${this.font.mono};
1348
1351
  }
1349
- `,this.root.appendChild(t)}injectGlobalFonts(){let e="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800",t=document.createElement("link");t.rel="preconnect",t.href="https://fonts.googleapis.com";let o=document.createElement("link");o.rel="preconnect",o.href="https://fonts.gstatic.com",o.crossOrigin="";let n=document.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=e,this.root.appendChild(t),this.root.appendChild(o),this.root.appendChild(n),document.head.appendChild(t),document.head.appendChild(o),document.head.appendChild(n)}mount(){let e=this.createChatBubble();this.root.appendChild(e),this.bubbleEl=e}async init(){await this.store.dispatch(ae({indexName:this.apiConfig?.indexName}))}handleChatDataChange({chatData:e,streamingMessage:t,isLoading:o}){if(!this.chatAreaEl)return;e||(e=[]);let n=this.chatAreaEl.querySelector(".chat-data-container"),a=this.chatAreaEl.querySelector("#bangdb-chat-area"),s=this.chatAreaEl.querySelector("#bdb-empty-state"),i=()=>{requestAnimationFrame(()=>{a.scrollTo({top:a.scrollHeight,behavior:"smooth"})})},c=e.length>0||!!t?.query;s.style.display=c?"none":"flex";for(let b=0;b<e.length;b++){let u=e[b],f=`msg-${b}`;if(u?.query&&!this.renderedMessageIds.has(f)){this.renderedMessageIds.add(f),n.insertBefore(this.userRequestMessage(u.query),n.querySelector("#chat-window-anchor"));let v=new C(u),{messages:w}=v.parse();w?.length>0&&n.insertBefore(this.aiResponseMessage(u),n.querySelector("#chat-window-anchor")),i()}}let d="bdb-streaming-msg",l=this.root.querySelector(`#${d}`);if(t?.query){l||(l=document.createElement("div"),l.id=d,n.insertBefore(l,n.querySelector("#chat-window-anchor")),l.appendChild(this.userRequestMessage(t.query)),l.style.minHeight=`${a.clientHeight*.8}px`);let b=l.querySelector(".bdb-streaming-ai-area"),u=t.output?.output??"";if(o&&!u&&!b)b=document.createElement("div"),b.className="bdb-streaming-ai-area",b.appendChild(this.loadingIndicator()),l.appendChild(b);else if(u){b||(b=document.createElement("div"),b.className="bdb-streaming-ai-area",l.appendChild(b));let f=b.querySelector(".ai-md");f?f.innerHTML=H(u):(b.innerHTML="",b.appendChild(this.aiResponseMessage(t)))}s.style.display="none",i()}else l&&(l.style.minHeight="0",l.remove());let p=this.chatAreaEl.querySelector(".bdb-textarea"),m=this.chatAreaEl.querySelector(".bdb-send-btn"),h=this.chatAreaEl.querySelector(".bdb-tools-trigger");p&&(p.style.opacity="1"),m&&(m.disabled=!!o||!p?.value.trim()),h&&(h.disabled=!!o,h.style.opacity=o?"0.5":"1",h.style.pointerEvents=o?"none":"auto")}handleModeChange(e){let t=this.bubbleEl?.querySelector(".chat-bubble");if(t)switch(e){case 0:if(t.classList.remove("is-open"),t.setAttribute("aria-label","Open chat"),this.chatUIEl){let n=this.chatUIEl.querySelector(".bdb-chat-panel");n&&(n.style.animation="bdb-panel-out 0.18s ease-in both",n&&(n.style.animation="bdb-panel-out 0.18s ease-in both"),setTimeout(()=>{this.chatUIEl&&(this.chatUIEl.style.display="none")},180))}break;case 1:if(t.setAttribute("aria-label","Close chat"),!this.chatUIEl)this.chatUIEl=this.createChatUI(),this.bubbleEl?.appendChild(this.chatUIEl);else{this.chatUIEl.style.display="";let n=this.chatUIEl.querySelector(".bdb-chat-panel");n&&(n.style.animation="bdb-panel-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1) both")}t.classList.add("is-open"),this.chatUIEl?.querySelector(".bdb-chat-panel")?.classList.remove("is-fullscreen"),requestAnimationFrame(()=>this.updatePanelPosition());break;case 2:if(t.setAttribute("aria-label","Close chat"),!this.chatUIEl)this.chatUIEl=this.createChatUI(),this.bubbleEl?.appendChild(this.chatUIEl);else{this.chatUIEl.style.display="";let n=this.chatUIEl.querySelector(".bdb-chat-panel");n&&(n.style.animation="bdb-panel-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1) both")}t.classList.add("is-open");let o=this.chatUIEl?.querySelector(".bdb-chat-panel");o&&(o.classList.add("is-fullscreen"),o.style.top="",o.style.bottom="",o.style.left="",o.style.right="");break}}updatePanelPosition(){if(!this.chatUIEl||!this.bubbleEl)return;let e=this.chatUIEl.querySelector(".bdb-chat-panel");if(!e||e.classList.contains("is-fullscreen"))return;let t=parseInt(this.bubbleEl.style.left)||0,o=parseInt(this.bubbleEl.style.top)||0,n=52,a=52,s=750,i=window.innerWidth,c=window.innerHeight,d=12,l=o+a/2;if(l<c/3)e.style.top=a+d+"px",e.style.bottom="auto";else if(l>2*c/3)e.style.bottom=a+d+"px",e.style.top="auto";else{let p=l-s/2,m=Math.max(8,Math.min(p,c-s-8));e.style.top=m-o+"px",e.style.bottom="auto"}t+n/2<i/2?(e.style.left="0",e.style.right="auto"):(e.style.right="0",e.style.left="auto")}createChatBubble(){let e=document.createElement("div");e.classList.add("bdb-bubble-container"),e.innerHTML=`
1352
+ `,this.root.appendChild(t)}injectGlobalFonts(){let e="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=JetBrains+Mono:ital,wght@0,100..800;1,100..800",t=document.createElement("link");t.rel="preconnect",t.href="https://fonts.googleapis.com";let o=document.createElement("link");o.rel="preconnect",o.href="https://fonts.gstatic.com",o.crossOrigin="";let r=document.createElement("link");r.type="text/css",r.rel="stylesheet",r.href=e,this.root.appendChild(t),this.root.appendChild(o),this.root.appendChild(r),document.head.appendChild(t),document.head.appendChild(o),document.head.appendChild(r)}mount(){let e=this.createChatBubble();this.root.appendChild(e),this.bubbleEl=e}async init(){await this.store.dispatch(he({indexName:this.apiConfig?.indexName}))}handleChatDataChange({chatData:e,streamingMessage:t,isLoading:o}){if(!this.chatAreaEl)return;e||(e=[]);let r=this.chatAreaEl.querySelector(".chat-data-container"),a=this.chatAreaEl.querySelector("#bangdb-chat-area"),s=this.chatAreaEl.querySelector("#bdb-empty-state"),i=()=>{requestAnimationFrame(()=>{a.scrollTo({top:a.scrollHeight,behavior:"smooth"})})},c=e.length>0||!!t?.query;s.style.display=c?"none":"flex";for(let b=0;b<e.length;b++){let m=e[b],u=`msg-${b}`;if(m?.query&&!this.renderedMessageIds.has(u)){this.renderedMessageIds.add(u),r.insertBefore(this.userRequestMessage(m.query),r.querySelector("#chat-window-anchor"));let y=new S(m),{messages:w}=y.parse();w?.length>0&&r.insertBefore(this.aiResponseMessage(m),r.querySelector("#chat-window-anchor")),i()}}let p="bdb-streaming-msg",d=this.root.querySelector(`#${p}`);if(t?.query){d||(d=document.createElement("div"),d.id=p,r.insertBefore(d,r.querySelector("#chat-window-anchor")),d.appendChild(this.userRequestMessage(t.query)),d.style.minHeight=`${a.clientHeight*.8}px`);let b=d.querySelector(".bdb-streaming-ai-area"),m=t.output?.output??"";if(o&&!m&&!b)b=document.createElement("div"),b.className="bdb-streaming-ai-area",b.appendChild(this.loadingIndicator()),d.appendChild(b);else if(m){b||(b=document.createElement("div"),b.className="bdb-streaming-ai-area",d.appendChild(b));let u=b.querySelector(".ai-md");u?u.innerHTML=$(m):(b.innerHTML="",b.appendChild(this.aiResponseMessage(t)))}s.style.display="none",i()}else d&&(d.style.minHeight="0",d.remove());let l=this.chatAreaEl.querySelector(".bdb-textarea"),g=this.chatAreaEl.querySelector(".bdb-send-btn"),h=this.chatAreaEl.querySelector(".bdb-tools-trigger");l&&(l.style.opacity="1"),g&&(g.disabled=!!o||!l?.value.trim()),h&&(h.disabled=!!o,h.style.opacity=o?"0.5":"1",h.style.pointerEvents=o?"none":"auto")}handleModeChange(e){let t=this.bubbleEl?.querySelector(".chat-bubble");if(t)switch(e){case 0:if(t.classList.remove("is-open"),t.setAttribute("aria-label","Open chat"),this.chatUIEl){let r=this.chatUIEl.querySelector(".bdb-chat-panel");r&&(r.style.animation="bdb-panel-out 0.18s ease-in both",r&&(r.style.animation="bdb-panel-out 0.18s ease-in both"),setTimeout(()=>{this.chatUIEl&&(this.chatUIEl.style.display="none")},180))}break;case 1:if(t.setAttribute("aria-label","Close chat"),!this.chatUIEl)this.chatUIEl=this.createChatUI(),this.bubbleEl?.appendChild(this.chatUIEl);else{this.chatUIEl.style.display="";let r=this.chatUIEl.querySelector(".bdb-chat-panel");r&&(r.style.animation="bdb-panel-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1) both")}t.classList.add("is-open"),this.chatUIEl?.querySelector(".bdb-chat-panel")?.classList.remove("is-fullscreen"),requestAnimationFrame(()=>this.updatePanelPosition());break;case 2:if(t.setAttribute("aria-label","Close chat"),!this.chatUIEl)this.chatUIEl=this.createChatUI(),this.bubbleEl?.appendChild(this.chatUIEl);else{this.chatUIEl.style.display="";let r=this.chatUIEl.querySelector(".bdb-chat-panel");r&&(r.style.animation="bdb-panel-in 0.25s cubic-bezier(0.34, 1.56, 0.64, 1) both")}t.classList.add("is-open");let o=this.chatUIEl?.querySelector(".bdb-chat-panel");o&&(o.classList.add("is-fullscreen"),o.style.top="",o.style.bottom="",o.style.left="",o.style.right="");break}}updatePanelPosition(){if(!this.chatUIEl||!this.bubbleEl)return;let e=this.chatUIEl.querySelector(".bdb-chat-panel");if(!e||e.classList.contains("is-fullscreen"))return;let t=parseInt(this.bubbleEl.style.left)||0,o=parseInt(this.bubbleEl.style.top)||0,r=52,a=52,s=750,i=window.innerWidth,c=window.innerHeight,p=12,d=o+a/2;if(d<c/3)e.style.top=a+p+"px",e.style.bottom="auto";else if(d>2*c/3)e.style.bottom=a+p+"px",e.style.top="auto";else{let l=d-s/2,g=Math.max(8,Math.min(l,c-s-8));e.style.top=g-o+"px",e.style.bottom="auto"}t+r/2<i/2?(e.style.left="0",e.style.right="auto"):(e.style.right="0",e.style.left="auto")}createChatBubble(){let e=document.createElement("div");e.classList.add("bdb-bubble-container"),e.innerHTML=`
1350
1353
  <style>
1351
1354
  .bdb-bubble-container {
1352
1355
  position: fixed;
@@ -1393,24 +1396,15 @@ ${a}
1393
1396
  box-shadow: 0 12px 40px color-mix(in oklab, var(--primary) 50%, transparent);
1394
1397
  }
1395
1398
 
1396
- .chat-bubble .icon-chat,
1397
- .chat-bubble .icon-close {
1399
+ .chat-bubble .icon-chat {
1398
1400
  position: absolute;
1399
1401
  transition: transform 0.2s ease, opacity 0.15s ease;
1400
1402
  color: var(--primary-foreground);
1401
1403
  }
1402
- .chat-bubble .icon-close {
1403
- opacity: 0;
1404
- transform: rotate(-90deg) scale(0.6);
1405
- }
1406
1404
  .chat-bubble.is-open .icon-chat {
1407
1405
  opacity: 0;
1408
1406
  transform: rotate(90deg) scale(0.6);
1409
1407
  }
1410
- .chat-bubble.is-open .icon-close {
1411
- opacity: 1;
1412
- transform: rotate(0deg) scale(1);
1413
- }
1414
1408
  </style>
1415
1409
 
1416
1410
 
@@ -1420,14 +1414,10 @@ ${a}
1420
1414
  <path d="M28,32 C28,32 23.2863266,30.1450667 19.4727818,28.6592 L3.43749107,28.6592 C1.53921989,28.6592 0,27.0272 0,25.0144 L0,3.6448 C0,1.632 1.53921989,0 3.43749107,0 L24.5615088,0 C26.45978,0 27.9989999,1.632 27.9989999,3.6448 L27.9989999,22.0490667 L28,22.0490667 L28,32 Z M23.8614088,20.0181333 C23.5309223,19.6105242 22.9540812,19.5633836 22.5692242,19.9125333 C22.5392199,19.9392 19.5537934,22.5941333 13.9989999,22.5941333 C8.51321617,22.5941333 5.48178311,19.9584 5.4277754,19.9104 C5.04295119,19.5629428 4.46760991,19.6105095 4.13759108,20.0170667 C3.97913051,20.2124916 3.9004494,20.4673395 3.91904357,20.7249415 C3.93763774,20.9825435 4.05196575,21.2215447 4.23660523,21.3888 C4.37862552,21.5168 7.77411059,24.5386667 13.9989999,24.5386667 C20.2248893,24.5386667 23.6203743,21.5168 23.7623946,21.3888 C23.9467342,21.2215726 24.0608642,20.9827905 24.0794539,20.7254507 C24.0980436,20.4681109 24.0195551,20.2135019 23.8614088,20.0181333 Z"/>
1421
1415
  </svg>
1422
1416
  </span>
1423
- <span class="icon-close">
1424
- <svg width="18" height="18" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
1425
- <path d="M1 1l12 12M13 1L1 13" stroke="white" stroke-width="2" stroke-linecap="round"/>
1426
- </svg>
1427
- </span>
1417
+
1428
1418
  </button>
1429
- `,e.addEventListener("click",()=>{if(e._didDrag)return;let{chat:t}=this.store.getState();t?.mode===0?this.store.dispatch(M(1)):this.store.dispatch(M(0))});{let t=!1,o=0,n=0,a=0,s=0,i=window.innerWidth-24-52,c=window.innerHeight-24-52;try{let d=localStorage.getItem("bdb-bubble-position");if(d){let{left:l,top:p}=JSON.parse(d);i=l,c=p}}catch{}e.style.bottom="auto",e.style.right="auto",e.style.left=i+"px",e.style.top=c+"px",e.addEventListener("pointerdown",d=>{t=!0,e._didDrag=!1,o=d.clientX,n=d.clientY,a=i,s=c,e.style.transition="none",e.setPointerCapture(d.pointerId)}),e.addEventListener("pointermove",d=>{if(!t)return;let l=d.clientX-o,p=d.clientY-n;Math.hypot(l,p)>4&&(e._didDrag=!0),i=a+l,c=s+p,e.style.left=i+"px",e.style.top=c+"px"}),e.addEventListener("pointerup",d=>{if(!t||(t=!1,e.releasePointerCapture(d.pointerId),!e._didDrag))return;let l=52,p=52,m=24,h=window.innerWidth,b=window.innerHeight,u=i+l/2,f=c+p/2,v=[{left:m,top:m},{left:(h-l)/2,top:m},{left:h-m-l,top:m},{left:m,top:(b-p)/2},{left:h-m-l,top:(b-p)/2},{left:m,top:b-m-p},{left:(h-l)/2,top:b-m-p},{left:h-m-l,top:b-m-p}],w=v[0],S=1/0;for(let x of v){let E=Math.hypot(x.left+l/2-u,x.top+p/2-f);E<S&&(S=E,w=x)}i=w.left,c=w.top,e.style.transition="left 0.4s cubic-bezier(0.2,0.8,0.2,1), top 0.4s cubic-bezier(0.2,0.8,0.2,1)",e.style.left=i+"px",e.style.top=c+"px";try{localStorage.setItem("bdb-bubble-position",JSON.stringify({left:i,top:c}))}catch{}this.updatePanelPosition()})}return e}createChatUI(){let e=document.createElement("div");e.addEventListener("click",d=>d.stopPropagation()),e.addEventListener("pointerdown",d=>d.stopPropagation()),e.innerHTML=`
1430
- <style>
1419
+ `,e.addEventListener("click",()=>{if(e._didDrag)return;let{chat:t}=this.store.getState();t?.mode===0&&this.store.dispatch(I(1))});{let t=!1,o=0,r=0,a=0,s=0,i=window.innerWidth-24-52,c=window.innerHeight-24-52;try{let p=localStorage.getItem("bdb-bubble-position");if(p){let{left:d,top:l}=JSON.parse(p);i=d,c=l}}catch{}e.style.bottom="auto",e.style.right="auto",e.style.left=i+"px",e.style.top=c+"px",e.addEventListener("pointerdown",p=>{t=!0,e._didDrag=!1,o=p.clientX,r=p.clientY,a=i,s=c,e.style.transition="none",e.setPointerCapture(p.pointerId)}),e.addEventListener("pointermove",p=>{if(!t)return;let d=p.clientX-o,l=p.clientY-r;Math.hypot(d,l)>4&&(e._didDrag=!0),i=a+d,c=s+l,e.style.left=i+"px",e.style.top=c+"px"}),e.addEventListener("pointerup",p=>{if(!t||(t=!1,e.releasePointerCapture(p.pointerId),!e._didDrag))return;let d=52,l=52,g=24,h=window.innerWidth,b=window.innerHeight,m=i+d/2,u=c+l/2,y=[{left:g,top:g},{left:(h-d)/2,top:g},{left:h-g-d,top:g},{left:g,top:(b-l)/2},{left:h-g-d,top:(b-l)/2},{left:g,top:b-g-l},{left:(h-d)/2,top:b-g-l},{left:h-g-d,top:b-g-l}],w=y[0],k=1/0;for(let v of y){let C=Math.hypot(v.left+d/2-m,v.top+l/2-u);C<k&&(k=C,w=v)}i=w.left,c=w.top,e.style.transition="left 0.4s cubic-bezier(0.2,0.8,0.2,1), top 0.4s cubic-bezier(0.2,0.8,0.2,1)",e.style.left=i+"px",e.style.top=c+"px";try{localStorage.setItem("bdb-bubble-position",JSON.stringify({left:i,top:c}))}catch{}this.updatePanelPosition()})}return e}createChatUI(){let e=document.createElement("div");e.addEventListener("click",l=>l.stopPropagation()),e.addEventListener("pointerdown",l=>l.stopPropagation()),e.innerHTML=`
1420
+ <style>
1431
1421
  .bdb-chat-widget {
1432
1422
  display: flex;
1433
1423
  flex-direction: column;
@@ -1444,27 +1434,55 @@ ${a}
1444
1434
  display: flex;
1445
1435
  align-items: center;
1446
1436
  justify-content: space-between;
1437
+ position: relative;
1438
+ z-index: 20;
1447
1439
  padding: 0 1.25rem;
1448
1440
  height: 3.25rem;
1449
1441
  flex-shrink: 0;
1450
1442
  background: var(--card);
1451
1443
  border-bottom: 1px solid var(--border);
1444
+ cursor: grab;
1445
+ user-select: none;
1446
+ -webkit-user-select: none;
1447
+ overflow: visible;
1448
+ min-width: 0;
1449
+ box-sizing: border-box;
1452
1450
  }
1453
-
1454
- .bdb-chat-panel.is-fullscreen .bdb-chat-header {
1455
- max-width: 56rem;
1456
- margin: 0 auto;
1457
- width: 100%;
1458
- background: transparent;
1459
- border-bottom: 1px solid var(--border);
1451
+
1452
+ .bdb-chat-header:active {
1453
+ cursor: grabbing;
1454
+ }
1455
+
1456
+ /* Don't show grab cursor over interactive controls */
1457
+ .bdb-chat-header button,
1458
+ .bdb-chat-header a,
1459
+ .bdb-chat-header input,
1460
+ .bdb-chat-header select,
1461
+ .bdb-chat-header textarea {
1462
+ cursor: pointer;
1460
1463
  }
1461
1464
 
1465
+ .bdb-chat-panel.is-fullscreen .bdb-chat-header {
1466
+ width: 100%;
1467
+ max-width: 100%;
1468
+ margin: 0;
1469
+ background: transparent;
1470
+ border-bottom: 1px solid var(--border);
1471
+ flex-shrink: 0;
1472
+ box-sizing: border-box;
1473
+ padding: 0 1.25rem;
1474
+ }
1475
+
1462
1476
  .bdb-chat-title-container {
1463
1477
  display: flex;
1464
1478
  align-items: center;
1465
1479
  gap: 0.25rem;
1480
+ overflow: hidden;
1481
+ min-width: 0;
1482
+ flex: 1;
1483
+ max-width: calc(100% - 150px);
1466
1484
  }
1467
-
1485
+
1468
1486
  .bdb-chat-title {
1469
1487
  font-size: 15px;
1470
1488
  font-weight: 600;
@@ -1472,6 +1490,120 @@ ${a}
1472
1490
  letter-spacing: -0.01em;
1473
1491
  color: var(--foreground);
1474
1492
  margin: 0;
1493
+ overflow: hidden;
1494
+ text-overflow: ellipsis;
1495
+ white-space: nowrap;
1496
+ }
1497
+
1498
+ .bdb-info-tooltip {
1499
+ position: relative;
1500
+ display: inline-flex;
1501
+ align-items: center;
1502
+ flex-shrink: 0;
1503
+ }
1504
+
1505
+ .bdb-info-trigger {
1506
+ display: inline-flex;
1507
+ align-items: center;
1508
+ justify-content: center;
1509
+ width: 20px;
1510
+ height: 20px;
1511
+ border-radius: 9999px;
1512
+ color: var(--muted-foreground);
1513
+ border: none;
1514
+ background: transparent;
1515
+ cursor: pointer;
1516
+ padding: 0;
1517
+ transition: background 0.15s, color 0.15s;
1518
+ }
1519
+
1520
+ .bdb-info-trigger:hover {
1521
+ background: color-mix(in oklab, var(--foreground) 7%, transparent);
1522
+ color: var(--foreground);
1523
+ }
1524
+
1525
+ .bdb-info-trigger:focus-visible {
1526
+ outline: 2px solid color-mix(in oklab, var(--foreground) 30%, transparent);
1527
+ outline-offset: 2px;
1528
+ }
1529
+
1530
+ .bdb-info-popover {
1531
+ position: absolute;
1532
+ top: 100%;
1533
+ left: 50%;
1534
+ transform: translateX(-50%);
1535
+ margin-top: 8px;
1536
+ min-width: 220px;
1537
+ max-width: 280px;
1538
+ padding: 10px 12px;
1539
+ border-radius: 12px;
1540
+ background: color-mix(in oklab, var(--card) 92%, black);
1541
+ color: var(--foreground);
1542
+ border: 1px solid color-mix(in oklab, var(--border) 85%, transparent);
1543
+ box-shadow: 0 10px 26px rgba(0,0,0,0.32);
1544
+ z-index: 1001;
1545
+
1546
+ opacity: 0;
1547
+ visibility: hidden;
1548
+ pointer-events: none;
1549
+ transition: opacity 0.14s ease, transform 0.14s ease, visibility 0.14s;
1550
+ }
1551
+
1552
+ .bdb-info-popover::before {
1553
+ content: "";
1554
+ position: absolute;
1555
+ top: -6px;
1556
+ left: 50%;
1557
+ transform: translateX(-50%) rotate(45deg);
1558
+ width: 12px;
1559
+ height: 12px;
1560
+ background: inherit;
1561
+ border-left: 1px solid color-mix(in oklab, var(--border) 85%, transparent);
1562
+ border-top: 1px solid color-mix(in oklab, var(--border) 85%, transparent);
1563
+ }
1564
+
1565
+ /* Hover bridge so you can move cursor from icon to popover without it closing */
1566
+ .bdb-info-popover::after {
1567
+ content: "";
1568
+ position: absolute;
1569
+ left: 0;
1570
+ right: 0;
1571
+ top: -12px;
1572
+ height: 12px;
1573
+ background: transparent;
1574
+ }
1575
+
1576
+ .bdb-info-tooltip:hover .bdb-info-popover,
1577
+ .bdb-info-tooltip:focus-within .bdb-info-popover {
1578
+ opacity: 1;
1579
+ visibility: visible;
1580
+ pointer-events: auto;
1581
+ transform: translateX(-50%) translateY(2px);
1582
+ }
1583
+
1584
+ .bdb-info-popover-title {
1585
+ font-size: 13px;
1586
+ font-weight: 600;
1587
+ margin: 0 0 6px 0;
1588
+ letter-spacing: -0.01em;
1589
+ }
1590
+
1591
+ .bdb-info-popover a {
1592
+ color: var(--primary);
1593
+ text-decoration: none;
1594
+ font-size: 13px;
1595
+ line-height: 1.2;
1596
+ word-break: break-word;
1597
+ }
1598
+
1599
+ .bdb-info-popover a:hover {
1600
+ text-decoration: underline;
1601
+ }
1602
+
1603
+ .bdb-info-popover-desc {
1604
+ margin: 0;
1605
+ font-size: 12px;
1606
+ color: var(--muted-foreground);
1475
1607
  }
1476
1608
 
1477
1609
  .bdb-header-status {
@@ -1499,6 +1631,8 @@ ${a}
1499
1631
  display: flex;
1500
1632
  align-items: center;
1501
1633
  gap: 4px;
1634
+ flex-shrink: 0;
1635
+ flex-wrap: nowrap;
1502
1636
  }
1503
1637
 
1504
1638
  .bdb-icon-btn {
@@ -1589,24 +1723,29 @@ ${a}
1589
1723
  left: 0 !important;
1590
1724
  right: 0 !important;
1591
1725
  bottom: 0 !important;
1592
- width: 100vw !important;
1593
- height: 100vh !important;
1726
+ width: 100% !important;
1727
+ height: 100% !important;
1594
1728
  border-radius: 0 !important;
1595
- display: flex;
1596
- align-items: center;
1597
- justify-content: center;
1729
+ display: flex !important;
1730
+ align-items: center !important;
1731
+ justify-content: center !important;
1598
1732
  background: color-mix(in oklab, var(--card) 55%, transparent) !important;
1599
1733
  backdrop-filter: blur(2px) !important;
1600
1734
  transform: none !important;
1601
1735
  margin: 0 !important;
1736
+ overflow: hidden !important;
1737
+ z-index: 999998 !important;
1602
1738
  }
1603
-
1739
+
1604
1740
  .bdb-chat-panel.is-fullscreen .bdb-chat-widget {
1605
- width: 90vw;
1606
- height: 90vh;
1741
+ width: 90%;
1742
+ height: 90%;
1607
1743
  border-radius: var(--radius-lg);
1608
1744
  box-shadow: var(--shadow-panel);
1609
1745
  border: 1px solid var(--border);
1746
+ display: flex !important;
1747
+ flex-direction: column !important;
1748
+ overflow: hidden !important;
1610
1749
  }
1611
1750
  </style>
1612
1751
 
@@ -1620,7 +1759,33 @@ ${a}
1620
1759
 
1621
1760
  <div class="bdb-chat-title-container">
1622
1761
  <h3 class="bdb-chat-title">${this.chatTitle}</h3>
1623
- </div>
1762
+ <span class="bdb-info-tooltip">
1763
+ <button
1764
+ type="button"
1765
+ class="bdb-info-trigger"
1766
+ aria-label="Integration settings"
1767
+ aria-haspopup="dialog"
1768
+ >
1769
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
1770
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z" stroke="currentColor" stroke-width="1.8"/>
1771
+ <path d="M12 10.5v6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>
1772
+ <path d="M12 7.5h.01" stroke="currentColor" stroke-width="2.6" stroke-linecap="round"/>
1773
+ </svg>
1774
+ </button>
1775
+
1776
+ <span class="bdb-info-popover" role="tooltip">
1777
+ <div class="bdb-info-popover-title">Chat documentation</div>
1778
+ <p class="bdb-info-popover-desc" style="margin: 0 0 8px 0;">Learn how to integrate and configure chat.</p>
1779
+ <a
1780
+ href="https://bvector.bangdb.com/settings/integration"
1781
+ target="_blank"
1782
+ rel="noopener noreferrer"
1783
+ >
1784
+ Open chat docs
1785
+ </a>
1786
+ </span>
1787
+ </span>
1788
+ </div>
1624
1789
 
1625
1790
  <div class="bdb-header-actions" style="position: relative;">
1626
1791
  <button class="bdb-icon-btn js-fullscreen-btn" aria-label="Toggle fullscreen" title="Fullscreen">
@@ -1634,7 +1799,7 @@ ${a}
1634
1799
  <path d="M7.5 10.5l-4-4h2.5v-5h3v5h2.5l-4 4zm-5 2h10v1.5h-10v-1.5z" fill="currentColor"/>
1635
1800
  </svg>
1636
1801
  </button>
1637
-
1802
+
1638
1803
  <div class="bdb-download-dropdown" id="bdb-download-dropdown">
1639
1804
  <button class="bdb-dropdown-item" id="js-download-md">
1640
1805
  <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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
@@ -1644,6 +1809,10 @@ ${a}
1644
1809
  <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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M9 15v-6h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-2"></path></svg>
1645
1810
  PDF (.pdf)
1646
1811
  </button>
1812
+ <button class="bdb-dropdown-item" id="js-download-json">
1813
+ <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="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M8 13h2m0 0v4m0-4v-2a2 2 0 0 1 4 0v2m0 0h2"></path></svg>
1814
+ JSON (.json)
1815
+ </button>
1647
1816
  </div>
1648
1817
 
1649
1818
  <button class="bdb-icon-btn js-close-btn" aria-label="Close chat" title="Close">
@@ -1657,14 +1826,14 @@ ${a}
1657
1826
  <div class="bdb-chat-body" style="display: flex; flex-direction: column; flex: 1; overflow: hidden;"></div>
1658
1827
  </div>
1659
1828
  </div>
1660
- `;let t=e.querySelector(".bdb-chat-panel"),o=e.querySelector(".bdb-chat-body"),n=e.querySelector(".bdb-chat-title-container");if(t.querySelector(".js-fullscreen-btn")?.addEventListener("click",()=>{this.store.getState().chat.mode===2?this.store.dispatch(M(1)):this.store.dispatch(M(2))}),t.querySelector(".js-close-btn")?.addEventListener("click",()=>{let d=this.store.getState().chat.mode;d===2?this.store.dispatch(M(1)):d===1&&this.store.dispatch(M(0))}),this.logoUrl){let d=document.createElement("div"),l=document.createElement("img");l.src=this.logoUrl,l.style.cssText="width: 24px; height: 24px; margin-right: 0.5rem;",d.appendChild(l),n.prepend(d)}let a=t.querySelector(".js-download-btn"),s=t.querySelector("#bdb-download-dropdown"),i=t.querySelector("#js-download-md"),c=t.querySelector("#js-download-pdf");if(a&&s){a.addEventListener("click",l=>{l.stopPropagation(),s.classList.toggle("show")}),document.addEventListener("click",l=>{!s.contains(l.target)&&l.target!==a&&s.classList.remove("show")});let d=()=>{let l=this.store.getState(),p=l.chat.activeSession;return l.chatSessions[p]?.chatData||[]};i?.addEventListener("click",()=>{Le(d(),this.chatTitle),s.classList.remove("show")}),c?.addEventListener("click",()=>{je(d(),this.chatTitle),s.classList.remove("show")})}return o.appendChild(this.chatArea()),e}chatArea(){let e=document.createElement("div");e.style.cssText="display: flex; flex-direction: column; flex: 1; overflow: hidden; position: relative;",e.innerHTML=`
1829
+ `;let t=e.querySelector(".bdb-chat-panel"),o=e.querySelector(".bdb-chat-body"),r=e.querySelector(".bdb-chat-title-container"),a=e.querySelector(".bdb-chat-header");if(a&&this.bubbleEl){let l=!1,g=0,h=0,b=0,m=0,u=parseInt(this.bubbleEl.style.left)||0,y=parseInt(this.bubbleEl.style.top)||0;a.addEventListener("pointerdown",k=>{k.target?.closest("button, a, input, textarea, select, [role='button']")||(l=!0,this.bubbleEl._didDrag=!1,g=k.clientX,h=k.clientY,u=parseInt(this.bubbleEl.style.left)||0,y=parseInt(this.bubbleEl.style.top)||0,b=u,m=y,this.bubbleEl.style.transition="none",a.setPointerCapture(k.pointerId))}),a.addEventListener("pointermove",k=>{if(!l)return;let v=k.clientX-g,C=k.clientY-h;Math.hypot(v,C)>4&&(this.bubbleEl._didDrag=!0),u=b+v,y=m+C,this.bubbleEl.style.left=u+"px",this.bubbleEl.style.top=y+"px",this.updatePanelPosition()});let w=k=>{if(!l)return;l=!1;try{a.releasePointerCapture(k.pointerId)}catch{}if(!this.bubbleEl._didDrag)return;let v=52,C=52,f=24,x=window.innerWidth,E=window.innerHeight,L=u+v/2,j=y+C/2,z=[{left:f,top:f},{left:(x-v)/2,top:f},{left:x-f-v,top:f},{left:f,top:(E-C)/2},{left:x-f-v,top:(E-C)/2},{left:f,top:E-f-C},{left:(x-v)/2,top:E-f-C},{left:x-f-v,top:E-f-C}],H=z[0],V=1/0;for(let U of z){let X=Math.hypot(U.left+v/2-L,U.top+C/2-j);X<V&&(V=X,H=U)}u=H.left,y=H.top,this.bubbleEl.style.transition="left 0.4s cubic-bezier(0.2,0.8,0.2,1), top 0.4s cubic-bezier(0.2,0.8,0.2,1)",this.bubbleEl.style.left=u+"px",this.bubbleEl.style.top=y+"px";try{localStorage.setItem("bdb-bubble-position",JSON.stringify({left:u,top:y}))}catch{}this.updatePanelPosition()};a.addEventListener("pointerup",w),a.addEventListener("pointercancel",w)}if(t.querySelector(".js-fullscreen-btn")?.addEventListener("click",()=>{this.store.getState().chat.mode===2?this.store.dispatch(I(1)):this.store.dispatch(I(2))}),t.querySelector(".js-close-btn")?.addEventListener("click",()=>{let l=this.store.getState().chat.mode;l===2?this.store.dispatch(I(1)):l===1&&this.store.dispatch(I(0))}),this.logoUrl){let l=document.createElement("div"),g=document.createElement("img");g.src=this.logoUrl,g.style.cssText="width: 24px; height: 24px; margin-right: 0.5rem;",l.appendChild(g),r.prepend(l)}let s=t.querySelector(".js-download-btn"),i=t.querySelector("#bdb-download-dropdown"),c=t.querySelector("#js-download-md"),p=t.querySelector("#js-download-pdf"),d=t.querySelector("#js-download-json");if(s&&i){s.addEventListener("click",h=>{h.stopPropagation(),i.classList.toggle("show")});let l=h=>{let b=h.composedPath();!b.includes(i)&&!b.includes(s)&&i.classList.remove("show")};this.root.addEventListener("click",l,!0),document.addEventListener("click",l,!0);let g=()=>{let h=this.store.getState(),b=h.chat.activeSession;return h.chatSessions[b]?.chatData||[]};c?.addEventListener("click",()=>{He(g(),this.chatTitle),i.classList.remove("show")}),p?.addEventListener("click",()=>{De(g(),this.chatTitle),i.classList.remove("show")}),d?.addEventListener("click",()=>{Oe(g()),i.classList.remove("show")})}return o.appendChild(this.chatArea()),e}chatArea(){let e=document.createElement("div");e.style.cssText="display: flex; flex-direction: column; flex: 1; overflow: hidden; position: relative;",e.innerHTML=`
1661
1830
  <style>
1662
1831
  .bdb-scroll {
1663
1832
  scrollbar-width: thin;
1664
1833
  scrollbar-color: color-mix(in oklab, var(--foreground) 10%, transparent) transparent;
1665
1834
  scroll-behavior: smooth;
1666
1835
  }
1667
-
1836
+
1668
1837
  .bdb-scroll:hover {
1669
1838
  scrollbar-color: color-mix(in oklab, var(--foreground) 18%, transparent) transparent;
1670
1839
  }
@@ -1680,7 +1849,7 @@ ${a}
1680
1849
  text-align: center;
1681
1850
  padding: 2rem;
1682
1851
  }
1683
-
1852
+
1684
1853
  .bdb-empty-icon {
1685
1854
  width: 48px;
1686
1855
  height: 48px;
@@ -1692,7 +1861,7 @@ ${a}
1692
1861
  color: var(--primary-foreground);
1693
1862
  margin-bottom: 0.25rem;
1694
1863
  }
1695
-
1864
+
1696
1865
  .bdb-empty-title {
1697
1866
  font-size: 15px;
1698
1867
  font-weight: 600;
@@ -1754,19 +1923,36 @@ ${a}
1754
1923
  opacity: 1;
1755
1924
  pointer-events: auto;
1756
1925
  }
1757
-
1926
+
1758
1927
  .bdb-chat-panel.is-fullscreen #chat-query-container {
1759
- max-width: 56rem;
1760
- margin: 0 auto;
1761
- width: 100%;
1928
+ width: 100%;
1929
+ flex-shrink: 0;
1930
+ box-sizing: border-box;
1931
+ }
1932
+
1933
+ .bdb-chat-panel.is-fullscreen #chat-query-container > * {
1934
+ max-width: 56rem;
1935
+ margin: 0 auto;
1936
+ width: 100%;
1937
+ box-sizing: border-box;
1938
+ }
1939
+
1940
+ /* Prevent message content from overflowing in fullscreen */
1941
+ #bangdb-chat-area pre,
1942
+ #bangdb-chat-area code,
1943
+ #bangdb-chat-area table,
1944
+ #bangdb-chat-area img {
1945
+ max-width: 100%;
1946
+ overflow-x: auto;
1947
+ box-sizing: border-box;
1762
1948
  }
1763
1949
  </style>
1764
1950
 
1765
- <div style="position: relative; flex: 1; overflow: hidden;">
1951
+ <div style="position: relative; flex: 1; overflow: hidden; width: 100%;">
1766
1952
  <div class="bdb-scroll" id="bangdb-chat-area"
1767
- style="height: 100%; overflow-y: auto; padding: 1rem 1.25rem; display: flex; flex-direction: column;">
1953
+ style="height: 100%; overflow-x: hidden; overflow-y: auto; padding: 1rem 1.25rem; display: flex; flex-direction: column; width: 100%; box-sizing: border-box;">
1768
1954
 
1769
- <div style="max-width: 56rem; margin: 0 auto; width: 100%; display: flex; flex-direction: column; gap: 0.25rem; flex: 1;">
1955
+ <div style="width: 100%; display: flex; flex-direction: column; gap: 0.25rem; flex: 1; box-sizing: border-box;">
1770
1956
  <div class="bdb-empty-state" id="bdb-empty-state">
1771
1957
  <div class="bdb-empty-icon">
1772
1958
  <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
@@ -1791,9 +1977,9 @@ ${a}
1791
1977
  </div>
1792
1978
 
1793
1979
  <div id="chat-query-container"
1794
- style="flex-shrink: 0; background: var(--background); padding: 0.75rem 1rem 1rem;">
1980
+ style="flex-shrink: 0; background: var(--background); padding: 0.75rem 1rem 1rem; width: 100%; box-sizing: border-box;">
1795
1981
  </div>
1796
- `;let t=e.querySelector("#bangdb-chat-area"),o=e.querySelector("#chat-query-container"),n=e.querySelector("#bdb-scroll-fab");return o.appendChild(this.chatQueryForm()),t.addEventListener("scroll",()=>{let a=t.scrollHeight-t.scrollTop-t.clientHeight;n.classList.toggle("visible",a>100)}),n.addEventListener("click",()=>{t.scrollTo({top:t.scrollHeight,behavior:"smooth"})}),this.chatAreaEl=e,e}loadingIndicator(){let e=document.createElement("div");return e.innerHTML=`
1982
+ `;let t=e.querySelector("#bangdb-chat-area"),o=e.querySelector("#chat-query-container"),r=e.querySelector("#bdb-scroll-fab");return o.appendChild(this.chatQueryForm()),t.addEventListener("scroll",()=>{let a=t.scrollHeight-t.scrollTop-t.clientHeight;r.classList.toggle("visible",a>100)}),r.addEventListener("click",()=>{t.scrollTo({top:t.scrollHeight,behavior:"smooth"})}),this.chatAreaEl=e,e}loadingIndicator(){let e=document.createElement("div");return e.innerHTML=`
1797
1983
  <style>
1798
1984
  .bdb-loading {
1799
1985
  display: flex;
@@ -1821,18 +2007,27 @@ ${a}
1821
2007
  40% { transform: translateY(-6px); opacity: 1; }
1822
2008
  }
1823
2009
  </style>
1824
-
2010
+
1825
2011
  <div class="bdb-loading">
1826
2012
  <div class="bdb-typing-dots">
1827
2013
  <span></span><span></span><span></span>
1828
2014
  </div>
1829
2015
  <span>Thinking\u2026</span>
1830
2016
  </div>
1831
- `,e}userRequestMessage(e){let t=document.createElement("div");return t.style.cssText="display: flex; justify-content: flex-end; margin-block: 0.375rem;",t.innerHTML=`
2017
+ `,e}userRequestMessage(e){let t=document.createElement("div");t.style.cssText="display: flex; justify-content: flex-end; margin-block: 0.375rem;",t.innerHTML=`
1832
2018
  <style>
2019
+ .bdb-user-stack {
2020
+ display: inline-flex;
2021
+ flex-direction: column;
2022
+ align-items: flex-end;
2023
+ gap: 6px;
2024
+ max-width: 75%;
2025
+ }
2026
+
1833
2027
  .bdb-user-bubble {
1834
- max-width: 75%;
1835
- background: var(--secondary);
2028
+ width: fit-content;
2029
+ max-width: 100%;
2030
+ background: var(--secondary);
1836
2031
  color: var(--secondary-foreground);
1837
2032
  border-radius: 18px 18px 4px 18px;
1838
2033
  padding: 0.6rem 1rem;
@@ -1841,11 +2036,29 @@ ${a}
1841
2036
  word-break: break-word;
1842
2037
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
1843
2038
  }
2039
+
2040
+ .bdb-user-actionbar {
2041
+ width: fit-content;
2042
+ max-width: 100%;
2043
+ display: flex;
2044
+ justify-content: flex-end;
2045
+ padding: 0.125rem 0;
2046
+ min-height: 32px;
2047
+ }
2048
+
2049
+ .bdb-user-actionbar button {
2050
+ /* mimic action bar button baseline spacing */
2051
+ transform: translateY(-2px);
2052
+ }
1844
2053
  </style>
1845
- <div class="bdb-user-bubble"></div>
1846
- `,t.querySelector(".bdb-user-bubble").textContent=e,t}aiResponseMessage(e){let t=document.createElement("div");t.style.cssText="display: flex; gap: 0.625rem; align-items: flex-start; margin-block: 0.375rem;";let o=document.createElement("style");o.textContent=`
1847
- ${V}
1848
- ${G}
2054
+
2055
+ <div class="bdb-user-stack">
2056
+ <div class="bdb-user-bubble"></div>
2057
+ <div class="bdb-user-actionbar"></div>
2058
+ </div>
2059
+ `,t.querySelector(".bdb-user-bubble").textContent=e;let o=t.querySelector(".bdb-user-actionbar"),r=N(R,"Copy to clipboard");return r.addEventListener("click",async()=>{try{await navigator.clipboard.writeText(e),r.innerHTML='<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="M20 6 9 17l-5-5"/></svg>',r.style.color="var(--primary)",r.style.borderColor="var(--primary)",setTimeout(()=>{r.innerHTML=R,r.style.color="",r.style.borderColor=""},2e3)}catch{}}),o.appendChild(r),t}aiResponseMessage(e){let t=document.createElement("div");t.style.cssText="display: flex; gap: 0.625rem; align-items: flex-start; margin-block: 0.375rem;";let o=document.createElement("style");o.textContent=`
2060
+ ${ee}
2061
+ ${Z}
1849
2062
 
1850
2063
  .ai-md pre {
1851
2064
  padding: 1rem;
@@ -1870,20 +2083,20 @@ ${a}
1870
2083
  from { opacity: 0; transform: translateY(4px); }
1871
2084
  to { opacity: 1; transform: translateY(0); }
1872
2085
  }
1873
- `,t.appendChild(o);let n=document.createElement("div");n.className="bdb-ai-bubble",t.appendChild(n);let a=document.createElement("div");a.className="ai-md prose",n.appendChild(a);let s=new C(e),{messages:i}=s.parse(),c=i.map(u=>u?.output??"").join("");a.innerHTML=H(c),this.renderSourceTags(a,e);let d=e?._data??e?.a?._data;if(d){let u=ye(String(d));u.children.length>0&&n.appendChild(u)}let l=i.map(u=>u?.output??"").join(`
2086
+ `,t.appendChild(o);let r=document.createElement("div");r.className="bdb-ai-bubble",t.appendChild(r);let a=document.createElement("div");a.className="ai-md prose",r.appendChild(a);let s=new S(e),{messages:i}=s.parse(),c=i.map(m=>m?.output??"").join("");a.innerHTML=$(c),this.renderSourceTags(a,e);let p=e?._data??e?.a?._data;if(p){let m=Ee(String(p));m.children.length>0&&r.appendChild(m)}let d=i.map(m=>m?.output??"").join(`
1874
2087
 
1875
- `),p=e?.a?.usage??null,m=this.apiConfig?.indexName??"",h=this.root,b=xe({textToCopy:l,usageData:p,onInfo:()=>{let u=h.querySelector(".bdb-context-drawer-host");if(u){u.remove();return}let f=document.createElement("div");f.className="bdb-context-drawer-host";let v=Ce({item:e,indexName:m,shadowRoot:h,onClose:()=>f.remove()});f.appendChild(v),h.appendChild(f)}});return n.appendChild(b),t}async renderSourceTags(e,t){let o=e.querySelectorAll("source-tag");if(!o.length)return;let n=t?.a?.metadata||t?.metadata||[];for(let a of o){let s=a.getAttribute("data-source-id"),i=a.getAttribute("data-category");if(!s||s.toLowerCase()==="na"){a.remove();continue}let c=document.createElement("span");c.style.cssText="display: block; padding: 0.75rem 0;";let d=s.split("##"),l=d[1]??s,p=d[2],m=document.createElement("span");if(m.style.cssText="display: block; font-size: 12px; color: var(--accent-foreground); padding-bottom: 0.5rem;",m.innerHTML=`
2088
+ `),l=e?.a?.usage??null,g=this.apiConfig?.indexName??"",h=this.root,b=Le({textToCopy:d,queryTimeMs:e?.queryTime,usageData:l,onInfo:()=>{let m=h.querySelector(".bdb-context-drawer-host");if(m){m.remove();return}let u=document.createElement("div");u.className="bdb-context-drawer-host";let y=Me({item:e,indexName:g,shadowRoot:h,onClose:()=>u.remove()});u.appendChild(y),h.appendChild(u)}});return r.appendChild(b),t}async renderSourceTags(e,t){let o=e.querySelectorAll("source-tag");if(!o.length)return;let r=t?.a?.metadata||t?.metadata||[];for(let a of o){let s=a.getAttribute("data-source-id"),i=a.getAttribute("data-category");if(!s||s.toLowerCase()==="na"){a.remove();continue}let c=document.createElement("span");c.style.cssText="display: block; padding: 0.75rem 0;";let p=s.split("##"),d=p[1]??s,l=p[2],g=document.createElement("span");if(g.style.cssText="display: block; font-size: 12px; color: var(--accent-foreground); padding-bottom: 0.5rem;",g.innerHTML=`
1876
2089
  <span style="text-decoration: underline; color: var(--accent-foreground);">
1877
- Source: ${decodeURIComponent(l)}
1878
- ${p?`<span style="padding: 0 0.5rem;">|</span>Page: ${p}`:""}
2090
+ Source: ${decodeURIComponent(d)}
2091
+ ${l?`<span style="padding: 0 0.5rem;">|</span>Page: ${l}`:""}
1879
2092
  </span>
1880
2093
  ${i?`<span style="padding: 0 0.5rem;">|</span>Category: ${i}`:""}
1881
- `,c.appendChild(m),n.length>0){let h=n.find(b=>b?.source_id===s);h?.table_ids?.length&&await this.renderTables(c,h.table_ids),h?.image_ids?.length&&await this.renderImages(c,h.image_ids)}a.replaceWith(c)}}async renderTables(e,t){for(let o of t){let n=document.createElement("div");n.innerHTML=`<div style="display:grid;grid-template-columns:repeat(9,1fr);gap:2px;">
2094
+ `,c.appendChild(g),r.length>0){let h=r.find(b=>b?.source_id===s);h?.table_ids?.length&&await this.renderTables(c,h.table_ids),h?.image_ids?.length&&await this.renderImages(c,h.image_ids)}a.replaceWith(c)}}async renderTables(e,t){for(let o of t){let r=document.createElement("div");r.innerHTML=`<div style="display:grid;grid-template-columns:repeat(9,1fr);gap:2px;">
1882
2095
  ${Array.from({length:36}).map(()=>'<div style="height:2rem;background:rgba(255,255,255,0.05);border-radius:2px;"></div>').join("")}
1883
- </div>`,e.appendChild(n);try{let a=await P({baseURL:this.apiConfig.backendURL,apikey:this.apiConfig.apikey,payload:{name:this.apiConfig.indexName,type:"table",id:o}});a?.metadata?.text_as_html&&(n.innerHTML=`<div style="overflow-x:auto;margin-bottom:1rem;">${a.metadata.text_as_html}</div>`)}catch{n.innerHTML='<div style="color:#f87171;font-size:12px;margin-bottom:0.5rem;">Failed to load table</div>'}}}async renderImages(e,t){let o=document.createElement("div");o.style.cssText="display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.75rem; margin-top: 0.5rem;",e.appendChild(o);let{backendURL:n,resourceURL:a,apikey:s,indexName:i}=this.apiConfig,c=`${i}_img_bucket`;for(let d of t){let l=document.createElement("div");l.style.cssText="border-radius: 8px; overflow: hidden; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03);",l.innerHTML='<div style="height: 8rem; background: rgba(255,255,255,0.05); display:flex; align-items:center; justify-content:center; color: #71717a; font-size:12px;">Loading\u2026</div>',o.appendChild(l);try{let p=await P({baseURL:n,apikey:s,payload:{name:i,type:"image",id:d}});if(!p?.file_name){l.remove();continue}let m=`https://${a}/brs/get/${s}/${c}/${d}_${p.file_name}`;l.innerHTML=`
1884
- <div style="height:8rem; background-image:url('${m}'); background-size:cover; background-position:center; cursor:pointer;"></div>
1885
- <div style="padding:0.375rem 0.5rem; font-size:11px; color:#a1a1aa; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">${p.file_name}</div>
1886
- `,l.querySelector("div")?.addEventListener("click",()=>{let h=document.createElement("div");h.style.cssText="position:fixed;inset:0;background:rgba(0,0,0,0.9);z-index:9999999;display:flex;align-items:center;justify-content:center;cursor:zoom-out;",h.innerHTML=`<img src="${m}" alt="image" style="max-width:90vw;max-height:90vh;border-radius:8px;object-fit:contain;" />`,h.addEventListener("click",()=>h.remove()),document.body.appendChild(h)})}catch{l.remove()}}}chatQueryForm(){let e=document.createElement("div");e.innerHTML=`
2096
+ </div>`,e.appendChild(r);try{let a=await G({baseURL:this.apiConfig.backendURL,apikey:this.apiConfig.apikey,payload:{name:this.apiConfig.indexName,type:"table",id:o}});a?.metadata?.text_as_html&&(r.innerHTML=`<div style="overflow-x:auto;margin-bottom:1rem;">${a.metadata.text_as_html}</div>`)}catch{r.innerHTML='<div style="color:#f87171;font-size:12px;margin-bottom:0.5rem;">Failed to load table</div>'}}}async renderImages(e,t){let o=document.createElement("div");o.style.cssText="display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.75rem; margin-top: 0.5rem;",e.appendChild(o);let{backendURL:r,resourceURL:a,apikey:s,indexName:i}=this.apiConfig,c=`${i}_img_bucket`;for(let p of t){let d=document.createElement("div");d.style.cssText="border-radius: 8px; overflow: hidden; border: 1px solid rgba(255,255,255,0.08); background: rgba(255,255,255,0.03);",d.innerHTML='<div style="height: 8rem; background: rgba(255,255,255,0.05); display:flex; align-items:center; justify-content:center; color: #71717a; font-size:12px;">Loading\u2026</div>',o.appendChild(d);try{let l=await G({baseURL:r,apikey:s,payload:{name:i,type:"image",id:p}});if(!l?.file_name){d.remove();continue}let g=`https://${a}/brs/get/${s}/${c}/${p}_${l.file_name}`;d.innerHTML=`
2097
+ <div style="height:8rem; background-image:url('${g}'); background-size:cover; background-position:center; cursor:pointer;"></div>
2098
+ <div style="padding:0.375rem 0.5rem; font-size:11px; color:#a1a1aa; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;">${l.file_name}</div>
2099
+ `,d.querySelector("div")?.addEventListener("click",()=>{let h=document.createElement("div");h.style.cssText="position:fixed;inset:0;background:rgba(0,0,0,0.9);z-index:9999999;display:flex;align-items:center;justify-content:center;cursor:zoom-out;",h.innerHTML=`<img src="${g}" alt="image" style="max-width:90vw;max-height:90vh;border-radius:8px;object-fit:contain;" />`,h.addEventListener("click",()=>h.remove()),document.body.appendChild(h)})}catch{d.remove()}}}chatQueryForm(){let e=document.createElement("div");e.innerHTML=`
1887
2100
  <style>
1888
2101
  .bdb-form-wrap {
1889
2102
  border-radius: var(--radius-lg);
@@ -2081,4 +2294,4 @@ ${a}
2081
2294
  </button>
2082
2295
  </div>
2083
2296
  </div>
2084
- `;let t=e.querySelector(".bdb-textarea"),o=e.querySelector(".bdb-send-btn"),n=e.querySelector("#bdb-tools-trigger"),a=e.querySelector("#bdb-tools-dropdown"),s=e.querySelector("#bdb-active-tool-badge"),i=e.querySelector("#bdb-active-tool-name"),c=e.querySelector(".bdb-tool-clear"),d=this.tools;d.length===0?n.style.display="none":(d.forEach(p=>{let m=document.createElement("button");m.className="bdb-tool-item",m.textContent=p.name,m.addEventListener("click",()=>{let h=this.store.getState().chat.tools;for(let b of h)b.id!==p.id&&this.store.dispatch(B(b.id));this.store.dispatch(X({id:p.id,name:p.name})),i.textContent=p.name,s.style.display="inline-flex",a.classList.remove("show")}),a.appendChild(m)}),n.addEventListener("click",p=>{p.stopPropagation(),a.classList.toggle("show")}),document.addEventListener("click",p=>{!a.contains(p.target)&&p.target!==n&&a.classList.remove("show")})),c.addEventListener("click",()=>{let p=this.store.getState().chat.tools;for(let m of p)this.store.dispatch(B(m.id));s.style.display="none"});let l=()=>{t.style.height="auto",t.style.height=Math.min(t.scrollHeight,180)+"px"};return this.store.subscribe(()=>{let{chatSessions:p,chat:m}=this.store.getState(),h=p[m.activeSession]?.query||"";t.value!==h&&(t.value=h,l(),o.disabled=!h.trim())}),t.addEventListener("input",()=>{l();let p=t.value;o.disabled=!p.trim();let{activeSession:m}=this.store.getState().chat;this.store.dispatch(D({sessionId:m,query:p}))}),t.addEventListener("keydown",async p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),o.disabled||await this.sendQuery())}),o.addEventListener("click",()=>this.sendQuery()),e}async sendQuery(){let{chatSessions:e,chat:t}=this.store.getState(),{activeSession:o,activeIndex:n}=t,{query:a,isLoading:s}=e[o];if(s||!a?.trim())return;let i={query:a,output:[]};this.store.dispatch(D({sessionId:o,query:""})),await this.store.dispatch(ne({query:i?.query,sessionId:o,indexName:n,config:this.apiConfig}))}downloadChat(){}};I.DEFAULT_TOOLS=[{id:"kpi",name:"KPI (MCP)"}];var O=I;var Me=null;function Ae(r){return Me=new O(r),Me}typeof window<"u"&&(window.BangdbChatWidget={init:Ae});0&&(module.exports={ChatWidget,init});
2297
+ `;let t=e.querySelector(".bdb-textarea"),o=e.querySelector(".bdb-send-btn"),r=e.querySelector("#bdb-tools-trigger"),a=e.querySelector("#bdb-tools-dropdown"),s=e.querySelector("#bdb-active-tool-badge"),i=e.querySelector("#bdb-active-tool-name"),c=e.querySelector(".bdb-tool-clear"),p=this.tools;p.length===0?r.style.display="none":(p.forEach(l=>{let g=document.createElement("button");g.className="bdb-tool-item",g.textContent=l.name,g.addEventListener("click",()=>{let h=this.store.getState().chat.tools;for(let b of h)b.id!==l.id&&this.store.dispatch(K(b.id));this.store.dispatch(ae({id:l.id,name:l.name})),i.textContent=l.name,s.style.display="inline-flex",a.classList.remove("show")}),a.appendChild(g)}),r.addEventListener("click",l=>{l.stopPropagation(),a.classList.toggle("show")}),document.addEventListener("click",l=>{!a.contains(l.target)&&l.target!==r&&a.classList.remove("show")})),c.addEventListener("click",()=>{let l=this.store.getState().chat.tools;for(let g of l)this.store.dispatch(K(g.id));s.style.display="none"});let d=()=>{t.style.height="auto",t.style.height=Math.min(t.scrollHeight,180)+"px"};return this.store.subscribe(()=>{let{chatSessions:l,chat:g}=this.store.getState(),h=l[g.activeSession]?.query||"";t.value!==h&&(t.value=h,d(),o.disabled=!h.trim())}),t.addEventListener("input",()=>{d();let l=t.value;o.disabled=!l.trim();let{activeSession:g}=this.store.getState().chat;this.store.dispatch(F({sessionId:g,query:l}))}),t.addEventListener("keydown",async l=>{l.key==="Enter"&&!l.shiftKey&&(l.preventDefault(),o.disabled||await this.sendQuery())}),o.addEventListener("click",()=>this.sendQuery()),e}async sendQuery(){let{chatSessions:e,chat:t}=this.store.getState(),{activeSession:o,activeIndex:r}=t,{query:a,isLoading:s}=e[o];if(s||!a?.trim())return;let i={query:a,output:[]};this.store.dispatch(F({sessionId:o,query:""})),await this.store.dispatch(pe({query:i?.query,sessionId:o,indexName:r,config:this.apiConfig}))}downloadChat(){}};B.DEFAULT_TOOLS=[{id:"kpi",name:"KPI (MCP)"}];var P=B;var $e=null;function Ne(n){return $e=new P(n),$e}typeof window<"u"&&(window.BangdbChatWidget={init:Ne});0&&(module.exports={ChatWidget,init});