PageSourceSearch

https://live.gasengineersoftware.co.uk/public/dist/pages/chunks/AssistantWidget-DlUh4dqr.js

js gasengineersoftware.co.uk collected 2026-09-24 13:25:07 UTC 28,442 bytes, 3 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["index.2117.js","chunks/vendor-1vIt8e1l.js","chunks/shared-config--KhTFZan.js","chunks/vendor-datepicker-BP712TSD.js","chunks/vendor-pdf-C11cpwyN.js","chunks/useAudioPlayback-CsVoBlZV.js"])))=>i.map(i=>d[i]);
2import{bi as we,r as m,c as S,w as z,n as j,d as F,o as ve,bb as _e,b as v,e as p,D as r,H as x,bF as Ie,bG as fe,bg as K,z as M,s as B,m as a,v as $,G as Te,X as Me,Y as Ae,bH as Oe,f as R,bI as Pe,F as J,h as Q,q as Re,Z as pe,E as me,a as De,i as ce,T as ue,y as Le}from"./vendor-1vIt8e1l.js";import{g as Fe,b as Ue,c as Ve,i as be,s as Be,d as Ne,e as We,f as ze,h as Ke,_ as ge,a as U,I as Z,j as He,k as Xe,F as Ge,C as Ce,l as de,m as Se,u as ke,n as qe,o as Ye,D as je,p as Je,q as Qe,r as Ze,t as et}from"../index.2117.js";import{L as tt}from"./Loader-Dhacxqdh.js";import"./shared-config--KhTFZan.js";import"./vendor-datepicker-BP712TSD.js";import"./vendor-pdf-C11cpwyN.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"2.117"}}catch{}})();try{(function(){var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="45780a34-a391-4a94-a4e3-ecbe630fee99",e._sentryDebugIdIdentifier="sentry-dbid-45780a34-a391-4a94-a4e3-ecbe630fee99")})()}catch{}const xe="ges_assistant_session",$e="ges_assistant_pref",st=()=>{try{const e=sessionStorage.getItem(xe);return e?JSON.parse(e):{}}catch{return{}}},at=e=>{try{sessionStorage.setItem(xe,JSON.stringify(e))}catch{}},nt=()=>{try{const e=localStorage.getItem($e);return e?JSON.parse(e):{}}catch{return{}}},it=e=>{try{localStorage.setItem($e,JSON.stringify(e))}catch{}},q=we("assistant",()=>{let e=null,t=null;const o=st(),s=nt(),f=Fe()??"business_assistant",l=m([]),n=m(o.currentConversationId??null),u=m(s.selectedBotContext??f),c=m([]),h=m(!1),y=m(!1),g=m(!1),w=m(o.isOpen??!1),b=m(null),C=m(null),k=m(null),T=m({}),P=()=>{at({isOpen:w.value,currentConversationId:n.value}),it({selectedBotContext:u.value})},L=S(()=>[...l.value].sort((i,d)=>new Date(d.createdAt).getTime()-new Date(i.createdAt).getTime())),A=async()=>{h.value=!0,b.value=null;try{const i=await Ue(u.value);l.value=i.map(d=>{const E=T.value[d.id];return E?{...d,title:E}:d})}catch(i){_(i)}finally{h.value=!1}},D=async i=>{t?.abort(),t=new AbortController,n.value=i,P(),g.value=!0,b.value=null,C.value=null;try{const d=await Ve(i,u.value,t.signal);if(n.value===i&&(c.value=d.messages||[],!T.value[i]&&d.messages?.length)){const E=d.messages.find(W=>W.isFromUser);E&&(T.value[i]=E.content,O(i,E.content))}}catch(d){if(be(d))return;_(d)}finally{g.value=!1}},O=(i,d)=>{const E=l.value.find(W=>W.id===i);E&&(E.title=d)},I=async(i,d)=>{e?.abort(),e=new AbortController,y.value=!0,b.value=null,C.value=null;const E=!n.value,W=c.value.length;c.value.push({content:i,isFromUser:!0,createdAt:new Date().toISOString()});try{const H=await Be(i,{conversationId:n.value,pageContext:d,signal:e.signal,context:u.value});E&&(n.value=H.conversationId,P(),T.value[H.conversationId]=i,await A()),c.value.push({content:H.content,isFromUser:!1,createdAt:new Date().toISOString()})}catch(H){if(be(H))return;c.value.splice(W,1),C.value=i,k.value=d??null,_(H)}finally{y.value=!1}},N=async()=>{if(!C.value)return;const i=C.value,d=k.value;C.value=null,k.value=null,await I(i,d)},Y=()=>{n.value=null,c.value=[],b.value=null,C.value=null,k.value=null,P()},te=async i=>{i!==u.value&&(u.value=i,l.value=[],c.value=[],n.value=null,b.value=null,C.value=null,k.value=null,T.value={},P(),await A())},X=async i=>{try{await Ne(i,u.value),l.value=l.value.filter(d=>d.id!==i),n.value===i&&Y()}catch(d){_(d)}},se=async i=>{try{return await We(i)}catch(d){return _(d),null}},ae=async i=>{try{return await ze(i)}catch(d){return _(d),null}},ne=async(i,d,E)=>{try{await Ke(i,d,E)}catch(W){_(W)}},ie=()=>{e?.abort(),e=null,t?.abort(),t=null},oe=()=>{w.value=!0,P()},le=()=>{w.value=!1,P()},re=()=>{b.value=null},_=i=>{if(i&&typeof i=="object"&&"code"in i&&i.code==="ECONNABORTED"){b.value="ai_assistant.error.timeout";return}if(i&&typeof i=="object"&&"response"in i){switch(i.response?.status){case 403:b.value="ai_assistant.error.forbidden";break;case 429:b.value="ai_assistant.error.rate_limit";break;case 500:case 503:b.value="ai_assistant.error.service_unavailable";break;default:b.value="ai_assistant.error.generic"}return}if(i&&typeof i=="object"&&"message"in i&&i.message.includes("Network Error")){b.value="ai_assistant.error.network";return}b.value="ai_assistant.error.generic"};return{conversations:l,currentConversationId:n,currentContext:u,messages:c,isLoadingConversations:h,isSendingMessage:y,isLoadingMessages:g,isWidgetOpen:w,error:b,failedMessage:C,sortedConversations:L,fetchConversations:A,selectConversation:D,sendMessage:I,retryMessage:N,startNewChat:Y,setContext:te,deleteConversation:X,getFormSuggestion:se,getCertificatePrefill:ae,submitFeedback:ne,clearError:re,cancelPendingRequests:ie,openWidget:oe,closeWidget:le}}),ee=we("voice",()=>{const e=m("idle"),t=m("idle"),o=m("prompt"),s=m(0),f=m(null);function l(){e.value="recording",f.value=null}function n(){e.value="processing"}function u(){e.value="idle"}function c(){t.value="playing"}function h(){t.value="idle"}function y(k){o.value=k}function g(k){s.value=k}function w(k){f.value=k,e.value="idle"}function b(){f.value=null}function C(){e.value="idle",t.value="idle",s.value=0,f.value=null}return{recordingState:e,playbackState:t,micPermission:o,elapsedSeconds:s,voiceError:f,startRecording:l,stopRecording:n,finishProcessing:u,setPlaying:c,stopPlaying:h,setMicPermission:y,setElapsedSeconds:g,setError:w,clearError:b,$reset:C}}),Ee=4e3,ot=e=>{const t=q(),o=m(""),s=m(null),f=S(()=>o.value.length),l=S(()=>f.value>Ee),n=S(()=>o.value.trim().length>0&&!l.value&&!t.isSendingMessage),u=()=>{j(()=>{s.value&&(s.value.scrollTop=s.value.scrollHeight)})},c=async()=>
2{if(!n.value)return;const g=o.value.trim();o.value="",await t.sendMessage(g,e?.value),u()},h=async g=>{await t.sendMessage(g,e?.value),u()},y=g=>{g.key==="Enter"&&!g.shiftKey&&(g.preventDefault(),c())};return z(()=>t.messages.length,()=>{u()}),{messageInput:o,messageContainerRef:s,characterCount:f,isOverLimit:l,canSend:n,handleSend:c,sendSuggestion:h,handleKeyDown:y,scrollToBottom:u}},lt={class:"audio-waveform"},rt=["aria-label"],ct={key:0},ut={key:1},dt={class:"audio-waveform__time"},vt=F({__name:"AudioWaveform",props:{audioUrl:{}},setup(e){const t=e,o=m(null),s=m(!1),f=m(0),l=m(0);let n=null;const u=y=>getComputedStyle(document.body).getPropertyValue(y).trim(),c=S(()=>{const y=s.value?f.value:l.value,g=Math.floor(y/60),w=Math.floor(y%60);return`${g}:${w.toString().padStart(2,"0")}`});ve(async()=>{if(!o.value)return;n=(await ge(async()=>{const{default:g}=await import("./vendor-1vIt8e1l.js").then(w=>w.bO);return{default:g}},[])).default.create({container:o.value,waveColor:"#4B5563",progressColor:u("--theme-colors-third"),cursorWidth:0,barWidth:2,barGap:2,barRadius:2,height:32,normalize:!0,interact:!0}),n.load(t.audioUrl),n.on("ready",()=>{l.value=n.getDuration()}),n.on("audioprocess",()=>{f.value=n.getCurrentTime()}),n.on("play",()=>{s.value=!0}),n.on("pause",()=>{s.value=!1}),n.on("finish",()=>{s.value=!1})}),_e(()=>{n?.destroy()});function h(){n?.playPause()}return(y,g)=>(v(),p("div",lt,[r("button",{class:"audio-waveform__btn","aria-label":s.value?"Pause":"Play",onClick:h},[s.value?(v(),p("span",ct,"▮▮")):(v(),p("span",ut,"▶"))],8,rt),r("div",{ref_key:"waveformRef",ref:o,class:"audio-waveform__wave"},null,512),r("span",dt,x(c.value),1)]))}}),_t=U(vt,[["__scopeId","data-v-91deb5ab"]]),gt={class:"assistant-message__avatar"},ft={key:1,class:"assistant-message__ai-icon"},pt={class:"assistant-message__content"},mt={key:0,class:"assistant-message__text"},bt=["innerHTML"],ht={key:3,class:"message-feedback"},yt=["aria-label","title"],wt=["aria-label","title"],Ct={key:0,class:"feedback-thanks"},St=F({__name:"AssistantMessage",props:{content:{},isFromUser:{type:Boolean,default:!1},audioUrl:{default:void 0}},setup(e){const t=new Ie({breaks:!0,gfm:!0});fe.addHook("afterSanitizeAttributes",u=>{u.tagName==="A"&&(u.setAttribute("target","_blank"),u.setAttribute("rel","noopener noreferrer"))});const o=e,{t:s}=K(),f=m(null),l=u=>{if(f.value===u){f.value=null;return}f.value=u},n=S(()=>o.isFromUser?o.content:fe.sanitize(t.parse(o.content)));return(u,c)=>(v(),p("div",{class:M(["assistant-message",{"_from-user":e.isFromUser}])},[r("div",gt,[e.isFromUser?(v(),B(a(Z),{key:0,icon:"user_solid"})):(v(),p("span",ft,"AI"))]),r("div",pt,[e.isFromUser?(v(),p("div",mt,x(e.content),1)):(v(),p("div",{key:1,class:"assistant-message__text _markdown",innerHTML:n.value},null,8,bt)),!e.isFromUser&&e.audioUrl?(v(),B(_t,{key:2,"audio-url":e.audioUrl},null,8,["audio-url"])):$("",!0),e.isFromUser?$("",!0):(v(),p("div",ht,[r("button",{class:M(["feedback-btn",{active:f.value==="positive"}]),"aria-label":a(s)("ai_assistant.feedback.helpful"),title:a(s)("ai_assistant.feedback.helpful"),onClick:c[0]||(c[0]=h=>l("positive"))}," 👍 ",10,yt),r("button",{class:M(["feedback-btn",{active:f.value==="negative"}]),"aria-label":a(s)("ai_assistant.feedback.not_helpful"),title:a(s)("ai_assistant.feedback.not_helpful"),onClick:c[1]||(c[1]=h=>l("negative"))}," 👎 ",10,wt),f.value?(v(),p("span",Ct,x(a(s)("ai_assistant.feedback.thanks")),1)):$("",!0)]))])],2))}}),kt=U(St,[["__scopeId","data-v-96a517c0"]]),xt=1e3;let V=null,G=null,he="",ye;async function $t(){const{useVoiceRecorder:e}=await ge(async()=>{const{useVoiceRecorder:t}=await import("../index.2117.js").then(o=>o.bw);return{useVoiceRecorder:t}},__vite__mapDeps([0,1,2,3,4]));return e()}async function Et(){const{useAudioPlayback:e}=await ge(async()=>{const{useAudioPlayback:t}=await import("./useAudioPlayback-CsVoBlZV.js");return{useAudioPlayback:t}},__vite__mapDeps([5,1,0,2,3,4]));return e()}function It(){const e=ee(),t=q();async function o(){V||(V=await $t(),z(V.elapsedSeconds,c=>{e.setElapsedSeconds(c)})),G||(G=await Et())}async function s(c,h){await o(),e.recordingState==="recording"?await l(c,h):(he=c,ye=h,await f())}async function f(){if(V)try{if(e.micPermission==="prompt"){const c=await V.requestPermission();if(e.setMicPermission(c),c==="denied"){e.setError("Microphone access denied. Enable it in your browser settings.");return}}if(e.micPermission==="denied"){e.setError("Microphone access denied. Enable it in your browser settings.");return}await V.start(()=>{l(he,ye)}),e.startRecording()}catch(c){const h=c instanceof Error?c.message:"Failed to start recording";e.setError(h)}}async function l(c,h){if(!(!V||!G))try{const y=await V.stop();if(e.stopRecording(),y.size<xt){e.setError("Recording too short. Hold longer.");return}const g=t.messages.length;t.messages.push({content:"Transcribing voice...",isFromUser:!0,createdAt:new Date().toISOString()}),t.isSendingMessage=!0;const w=await He(y,c,h);e.finishProcessing(),w.transcription?t.messages[g]={content:w.transcription,isFromUser:!0,createdAt:new Date().toISOString()}:t.messages.splice(g,1),w.agentResponse&&t.messages.push({content:w.agentResponse,isFromUser:!1,createdAt:new Date().toISOString()}),w.id&&!t.currentConversationId&&(t.currentConversationId=w.id),t.isSendingMessage=!1,w.audioUrl&&(e.setPlaying(),await G.playFromUrl(w.audioUrl),e.stopPlaying())}catch(y){t.isSendingMessage=!1;const g=y instanceof Error?y.message:"Voice processing failed. Try again.";e.setError(g)}}function n(){G?.stop(),e.stopPlaying()}function u(){return typeof MediaRecorder<"u"}return{toggleRecording:s,stopPlayback:n,isSupported:u}}const Tt=["width","height"],Mt={key:0,class:"voice-orb__inner"},At=F({__name:"VoiceOrb",props:{state:{},amplitude:{default:.5},size:{default:72}},setup(e){const t=e,o=m(null);let s=null;const f=()=>{o.value&&(s=new Oe({container:o.value.parentElement,width:t.size,height:t.size,style:"ios9",amplitude:t.amplitude,speed:.12,autostart:!1,canvas:o.value}))},l=()=>{s&&(t.state==="listening"?(s.setAmplitude(Math.max(.1,t.amplitude)),s.setSpeed(.12),s.start()):s.stop())};return z(()=>t.state,()=>{l()}),z(()=>t.amplitude,n=>{t.state==="listening"&&s&&s.setAmplitude(Math.max(.1,n))}),ve(()=>{f(),t.state==="listening"&&l()}),_e(()=>{s&&(s.stop(),s=null)}),(n,u)=>(v(),p("div",{class:M(["voice-orb",[`voice-orb--${e.state}`]]),style:Te({width:`${e.size}px`,height:`${e.size}px`})},[Me(r("canvas",{ref_key:"canvasRef",ref:o,width:e.size,height:e.size,class:"voice-orb__canvas"},null,8,Tt),[[Ae,e.state==="listening"]]),e.state!=="listening"?(v(),p("div",Mt)):$("",!0)],6))}}),Ot=U(At,[["__scopeId","data-v-dd6f8169"]]),Pt=["disabled","aria-label"],Rt={class:"voice-mic-button__orb-wrapper"},Dt={key:0,class:"voice-mic-button__icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"white"},Lt={key:1,class:"voice-mic-button__icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"white"},Ft={key:0,class:"voice-mic-button__timer"},Ut=F({__name:"VoiceMicButton",props:{agentType:{},conversationId:{default:void 0}},emits:["toggle"],setup(e,{emit:t}){const o=e,s=t,{t:f}=K(),l=ee(),n=q(),{toggleRecording:u}=It(),c=S(()=>l.recordingState==="recording"),h=S(()=>l.recordingState==="processing"),y=S(()=>n.isSendingMessage),g=S(()=>l.playbackState==="playing"),w=S(()=>l.micPermission==="denied"),b=S(()=>c.value?"listening":h.value?"thinking":g.value?"speaking":"idle"),C=S(()=>c.value?.6:.3),k=S(()=>h.value?f("ai_assistant.voice.aria_processing"):c.value?f("ai_assistant.voice.aria_stop"):f("ai_assistant.voice.aria_start")),T=S(()=>{const L=Math.floor(l.elapsedSeconds/60),A=l.elapsedSeconds%60;return`${L}:${A.toString().padStart(2,"0")}`}),P=async()=>{s("toggle"),await u(o.agentType,o.conversationId)};return(L,A)=>w.value?$("",!0):(v(),p("button",{key:0,class:M(["voice-mic-button",{_recording:c.value,_processing:h.value,_playing:g.value}]),disabled:h.value||y.value,"aria-label":k.value,onClick:P},[r("div",Rt,[R(Ot,{state:b.value,amplitude:C.value,size:40},null,8,["state","amplitude"]),!c.value&&!h.value?(v(),p("svg",Dt,[...A[0]||(A[0]=[r("path",{d:"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z"},null,-1),r("path",{d:"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z"},null,-1)])])):$("",!0),c.value?(v(),p("svg",Lt,[...A[1]||(A[1]=[r("rect",{x:"6",y:"6",
2width:"12",height:"12",rx:"2"},null,-1)])])):$("",!0)]),c.value?(v(),p("span",Ft,x(T.value),1)):$("",!0)],10,Pt))}}),Vt=U(Ut,[["__scopeId","data-v-6c67ed06"]]),Bt={class:"assistant-input"},Nt=["value","disabled","placeholder","aria-label"],Wt={class:"assistant-input__footer"},zt=F({__name:"AssistantInput",props:{modelValue:{default:""},disabled:{type:Boolean,default:!1},canSend:{type:Boolean,default:!1},isSending:{type:Boolean,default:!1},characterCount:{default:0},isOverLimit:{type:Boolean,default:!1},placeholder:{default:""},maxCharacters:{default:0},agentType:{default:"business_assistant"},conversationId:{default:void 0}},emits:["update:modelValue","send","keydown"],setup(e,{emit:t}){const{t:o}=K(),s=ee(),f=e,n=typeof MediaRecorder<"u"&&Xe.isFeatureEnabled(Ge.VOICE),u=S(()=>s.recordingState==="recording"?"assistant-input__wrapper--recording":s.recordingState==="processing"?"assistant-input__wrapper--processing":s.playbackState==="playing"?"assistant-input__wrapper--playing":""),c=S(()=>n&&!f.canSend),h=S(()=>n?o("ai_assistant.input.placeholder_with_voice"):f.placeholder),y=t,g=m(null),w=()=>{j(()=>{if(g.value){g.value.style.height="auto";const C=144;g.value.style.height=Math.min(g.value.scrollHeight,C)+"px"}})},b=C=>{y("update:modelValue",C.target.value),w()};return z(()=>g.value,()=>{w()}),(C,k)=>(v(),p("div",Bt,[r("div",{class:M(["assistant-input__wrapper",u.value])},[r("textarea",{ref_key:"textareaRef",ref:g,class:"assistant-input__textarea",value:e.modelValue,disabled:e.disabled,placeholder:h.value,"aria-label":a(o)("ai_assistant.input.aria_label"),rows:"1",onInput:b,onKeydown:k[0]||(k[0]=T=>C.$emit("keydown",T))},null,40,Nt),c.value?(v(),B(Vt,{key:0,"agent-type":e.agentType,"conversation-id":e.conversationId},null,8,["agent-type","conversation-id"])):$("",!0),!c.value||e.canSend?(v(),B(a(Ce),{key:1,class:"assistant-input__send",icon:"send",small:"",disabled:!e.canSend||e.isSending,onClick:k[1]||(k[1]=T=>C.$emit("send"))},null,8,["disabled"])):$("",!0)],2),r("div",Wt,[r("span",{class:M(["assistant-input__counter",{"_over-limit":e.isOverLimit}])},x(e.characterCount)+" / "+x(e.maxCharacters),3)])]))}}),Kt=U(zt,[["__scopeId","data-v-3de0e92d"]]),Ht={class:"assistant-chat"},Xt={key:0,class:"assistant-chat__empty"},Gt={class:"assistant-chat__welcome"},qt={class:"assistant-chat__suggestions"},Yt=["onClick"],jt=["aria-label"],Jt={key:0,class:"assistant-chat__retry"},Qt={key:1,class:"assistant-chat__error"},Zt=["aria-label"],es={key:2,class:"assistant-chat__error",role:"alert"},ts=["aria-label"],ss=F({__name:"AssistantChat",setup(e){const{t}=K(),o=q(),s=ee(),{messages:f}=Pe(o),l=m(null);_e(()=>{l.value!==null&&clearTimeout(l.value)}),z(()=>s.voiceError,D=>{l.value!==null&&(clearTimeout(l.value),l.value=null),D&&(l.value=setTimeout(()=>{s.clearError(),l.value=null},5e3))});const{suggestions:n,pageContext:u}=ke(),c=S(()=>o.currentContext!=="business_assistant"?qe[o.currentContext]:n.value),h=S(()=>c.value.map(D=>{const O=u.value.entityLabel;return t(D,{name:O||t("ai_assistant.suggestions.ctx.this_entity")})})),{messageInput:y,messageContainerRef:g,characterCount:w,isOverLimit:b,canSend:C,handleSend:k,sendSuggestion:T,handleKeyDown:P}=ot(u),L=D=>{T(D)},A=()=>{o.retryMessage()};return(D,O)=>(v(),p("div",Ht,[r("div",{ref_key:"messageContainerRef",ref:g,class:"assistant-chat__messages",role:"log","aria-live":"polite"},[a(f).length?(v(!0),p(J,{key:1},Q(a(f),(I,N)=>(v(),B(kt,{key:`${I.createdAt}-${N}`,content:I.content,"is-from-user":I.isFromUser},null,8,["content","is-from-user"]))),128)):(v(),p("div",Xt,[r("div",Gt,[r("h3",null,x(a(t)(a(de)[a(o).currentContext])),1),r("p",null,x(a(t)(a(Se)[a(o).currentContext])),1),r("div",qt,[(v(!0),p(J,null,Q(h.value,I=>(v(),p("button",{key:I,class:"assistant-chat__suggestion-chip",onClick:N=>L(I)},x(I),9,Yt))),128))])])])),a(o).isSendingMessage?(v(),p("div",{key:2,class:"assistant-chat__typing",role:"status","aria-label":a(t)("ai_assistant.typing_aria_label")},[...O[3]||(O[3]=[r("div",{class:"assistant-chat__typing-dots"},[r("span"),r("span"),r("span")],-1)])],8,jt)):$("",!0)],512),a(o).failedMessage?(v(),p("div",Jt,[r("span",null,x(a(t)("ai_assistant.error.message_failed")),1),r("button",{onClick:A},x(a(t)("ai_assistant.retry")),1)])):$("",!0),a(o).error&&!a(o).failedMessage?(v(),p("div",Qt,[r("span",null,x(a(t)(a(o).error)),1),r("button",{"aria-label":a(t)("ai_assistant.error.dismiss_aria_label"),onClick:O[0]||(O[0]=I=>a(o).clearError())}," × ",8,Zt)])):$("",!0),a(s).voiceError?(v(),p("div",es,[r("span",null,x(a(s).voiceError),1),r("button",{"aria-label":a(t)("ai_assistant.error.dismiss_aria_label"),onClick:O[1]||(O[1]=I=>a(s).clearError())}," × ",8,ts)])):$("",!0),R(Kt,{modelValue:a(y),"onUpdate:modelValue":O[2]||(O[2]=I=>Re(y)?y.value=I:null),disabled:a(o).isSendingMessage,"can-send":a(C),"is-sending":a(o).isSendingMessage,"character-count":a(w),"is-over-limit":a(b),placeholder:a(t)("ai_assistant.input.placeholder"),"max-characters":a(Ee),"agent-type":a(o).currentContext,"conversation-id":a(o).currentConversationId??void 0,onSend:a(k),onKeydown:a(P)},null,8,["modelValue","disabled","can-send","is-sending","character-count","
2is-over-limit","placeholder","max-characters","agent-type","conversation-id","onSend","onKeydown"])]))}}),as=U(ss,[["__scopeId","data-v-3c92001e"]]),ns=["aria-label","aria-current"],is={class:"conversation-item__content"},os={class:"conversation-item__title"},ls={class:"conversation-item__date"},rs=["aria-label"],cs=F({__name:"ConversationItem",props:{conversation:{},isActive:{type:Boolean,default:!1}},emits:["select","delete"],setup(e){const{t}=K(),o=e,s=S(()=>{const l=o.conversation.title||o.conversation.messages?.find(n=>n.isFromUser)?.content;return l?l.length>40?l.substring(0,40)+"...":l:t("ai_assistant.conversation.new_conversation")}),f=S(()=>new Date(o.conversation.createdAt).toLocaleDateString("en-GB",{day:"numeric",month:"short"}));return(l,n)=>(v(),p("div",{class:M(["conversation-item",{_active:e.isActive}]),role:"button",tabindex:"0","aria-label":s.value,"aria-current":e.isActive?"true":void 0,onClick:n[1]||(n[1]=u=>l.$emit("select",e.conversation.id)),onKeydown:[n[2]||(n[2]=pe(u=>l.$emit("select",e.conversation.id),["enter"])),n[3]||(n[3]=pe(me(u=>l.$emit("select",e.conversation.id),["prevent"]),["space"]))]},[r("div",is,[r("div",os,x(s.value),1),r("div",ls,x(f.value),1)]),r("button",{class:"conversation-item__delete","aria-label":a(t)("ai_assistant.conversation.delete_aria_label"),onClick:n[0]||(n[0]=me(u=>l.$emit("delete",e.conversation.id),["stop"]))},[R(a(Z),{icon:"trash"})],8,rs)],42,ns))}}),us=U(cs,[["__scopeId","data-v-8385a228"]]),ds=["aria-label"],vs={class:"conversation-list__header"},_s={class:"conversation-list__items",role:"list"},gs={key:2,class:"conversation-list__empty"},fs=F({__name:"ConversationList",props:{conversations:{default:()=>[]},activeConversationId:{default:null},isLoading:{type:Boolean,default:!1}},emits:["new-chat","select-conversation","delete-conversation"],setup(e){const{t}=K();return(o,s)=>(v(),p("nav",{class:"conversation-list","aria-label":a(t)("ai_assistant.conversation.conversations_aria_label")},[r("div",vs,[R(a(Ce),{text:a(t)("ai_assistant.conversation.new_chat"),icon:"plus",small:"",wide:"",onClick:s[0]||(s[0]=f=>o.$emit("new-chat"))},null,8,["text"])]),r("div",_s,[e.isLoading?(v(),B(a(tt),{key:0,size:"small"})):e.conversations.length?(v(!0),p(J,{key:1},Q(e.conversations,f=>(v(),B(us,{key:f.id,conversation:f,"is-active":f.id===e.activeConversationId,onSelect:s[1]||(s[1]=l=>o.$emit("select-conversation",l)),onDelete:s[2]||(s[2]=l=>o.$emit("delete-conversation",l))},null,8,["conversation","is-active"]))),128)):(v(),p("div",gs,[r("p",null,x(a(t)("ai_assistant.conversation.no_conversations")),1)]))])],8,ds))}}),ps=U(fs,[["__scopeId","data-v-36efa511"]]),ms={key:0,class:"assistant-widget"},bs=["aria-label"],hs=["inert"],ys={class:"assistant-widget__header-left"},ws=["aria-label","aria-expanded"],Cs={class:"assistant-widget__title"},Ss={class:"assistant-widget__header-right"},ks={class:"assistant-widget__context-selector"},xs=["aria-expanded"],$s={class:"assistant-widget__context-trigger-label"},Es=["aria-label"],Is=["aria-selected","onClick"],Ts={class:"assistant-widget__context-option-label"},Ms={class:"assistant-widget__context-option-desc"},As=["aria-label"],Os=["aria-label"],Ps={key:0,class:"assistant-widget__context-badge"},Rs=["inert"],Ds={key:0,class:"assistant-widget__sidebar"},Ls=["aria-label","aria-expanded"],Fs={key:0,class:"assistant-widget__fab-label"},Us={key:1,class:"assistant-widget__fab-close"},Vs='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Bs=F({__name:"AssistantWidget",setup(e){const{t}=K(),o=Ye(),s=q(),{pageContext:f}=ke(),l=S(()=>{const _=f.value;return _.entityLabel?t("ai_assistant.context_badge.viewing_entity",{type:t(`ai_assistant.context_badge.types.${_.pageType}`,_.pageType),name:_.entityLabel}):Je.has(_.pageType)?null:t(`ai_assistant.context_badge.page.${_.pageType}`,"")}),n=m(!1),u=m(!1),c=m(!1),h=m(null),y=m(null),g=m(!1),w=m(null),b=m(!1),C=window.matchMedia("(max-width: 768px)"),k=m(C.matches),T=_=>{k.value=_.matches,_.matches&&(b.value=!1)},P=_=>{_.stopPropagation(),b.value=!b.value},L=_=>{if(!b.value||g.value)return;const i=h.value;i&&!i.contains(_.target)&&(b.value=!1)},A=async()=>{await s.fetchConversations(),c.value=!0;const _=s.currentConversationId;if(!_)return;s.conversations.some(d=>d.id===_)?await s.selectConversation(_):s.startNewChat()};ve(()=>{s.isWidgetOpen&&A(),document.addEventListener("click",L),C.addEventListener("change",T)}),De(()=>{document.removeEventListener("click",L),C.removeEventListener("change",T)}),z(()=>s.isWidgetOpen,_=>{_&&!c.value&&(s.fetchConversations(),c.value=!0)});const D=S(()=>Qe(o.isProPlan)),O=S(()=>et()),I=S(()=>Ze.filter(_=>O.value.includes(_))),N=()=>h.value?[...h.value.querySelectorAll(Vs)]:[],Y=_=>{if(_.key==="Escape"){u.value?u.value=!1:b.value?b.value=!1:X();return}if(_.key==="Tab"){const i=N();if(i.length===0)return;const d=i[0],E=i[i.length-1];_.shiftKey&&document.activeElement===d?(_.preventDefault(),E.focus()):!_.shiftKey&&document.activeElement===E&&(_.preventDefault(),d.focus())}},te=()=>{j(()=>{const _=N();_.length>0&&_[0].focus()})},X=()=>{b.value=!1,s.closeWidget(),j(()=>{y.value?.focus()})},se=()=>{if(s.isWidgetOpen){X();return}s.openWidget()},ae=_=>{u.value=!1,s.setContext(_)},ne=()=>{s.startNewChat(),n.value=!1},ie=_=>{s.selectConversation(_),n.value=!1},oe=()=>{n.value&&(n.value=!1),u.value=!1},le=_=>{w.value=_,g.value=!0},re=()=>{w.value&&s.deleteConversation(w.value),g.value=!1,w.value=null};return(_,i)=>(v(),B(Le,{to:"body"},[D.value?(v(),p("div",ms,[R(ue,{name:"assistant-panel",onAfterEnter:te},{default:ce(()=>[a(s).isWidgetOpen?(v(),p("div",{key:0,ref_key:"panelRef",ref:h,class:M(["assistant-widget__panel",{_expanded:b.value}]),role:"dialog","aria-label":a(t)("ai_assistant.widget.dialog_aria_label"),onKeydown:Y},[r("div",{class:M(["assistant-widget__header",{_inactive:g.value}]),inert:g.value||void 0},[r("div",ys,[r("button",{class:M(["assistant-widget__sidebar-toggle",{_active:n.value}]),"aria-label":n.value?a(t)("ai_assistant.widget.sidebar_close_aria_label"):a(t)("ai_assistant.widget.sidebar_open_aria_label"),"aria-expanded":n.value,onClick:i[0]||(i[0]=d=>n.value=!n.value)},[R(a(Z),{icon:"burger"})],10,ws),r("span",Cs,x(a(t)("ai_assistant.title")),1)]),r("div",Ss,[r("div",ks,[r("button",{class:"assistant-widget__context-trigger","aria-expanded":u.value,"aria-haspopup":"listbox",onClick:i[1]||(i[1]=d=>u.value=!u.value)},[r("span",$s,x(a(t)(a(de)[a(s).currentContext])),1),r("span",{class:M(["assistant-widget__context-trigger-arrow",{_open:u.value}])},"▾",2)],8,xs),R(ue,{name:"assistant-dropdown"},{default:ce(()=>[u.value?(v(),p("ul",{key:0,class:"assistant-widget__context-dropdown",role:"listbox","aria-label":a(t)("ai_assistant.context_selector.aria_label")},[(v(!0),p(J,null,Q(I.value,d=>(v(),p("li",{key:d,class:M(["assistant-widget__context-option",{_active:d===a(s).currentContext}]),role:"option","aria-selected":d===a(s).currentContext,onClick:E=>ae(d)},[r("span",Ts,x(a(t)(a(de)[d])),1),r("span",Ms,x(a(t)(a(Se)[d])),1)],10,Is))),128))],8,Es)):$("",!0)]),_:1})]),k.value?$("",!0):(v(),p("button",{key:0,class:"assistant-widget__expand-toggle","aria-label":b.value?a(t)("ai_assistant.widget.collapse_aria_label"):a(t)("ai_assistant.widget.expand_aria_label"),onClick:P},[R(a(Z),{icon:b.value?"collapse":"expand"},null,8,["icon"])],8,As)),r("button",{class:"assistant-widget__close","aria-label":a(t)("ai_assistant.widget.close_aria_label"),onClick:X}
2," × ",8,Os)])],10,hs),l.value?(v(),p("div",Ps,x(l.value),1)):$("",!0),r("div",{class:M(["assistant-widget__body",{_inactive:g.value}]),inert:g.value||void 0},[R(ue,{name:"assistant-sidebar"},{default:ce(()=>[n.value?(v(),p("div",Ds,[R(ps,{conversations:a(s).sortedConversations,"active-conversation-id":a(s).currentConversationId,"is-loading":a(s).isLoadingConversations,onNewChat:ne,onSelectConversation:ie,onDeleteConversation:le},null,8,["conversations","active-conversation-id","is-loading"])])):$("",!0)]),_:1}),r("div",{class:"assistant-widget__chat",onClick:oe},[R(as)])],10,Rs),R(a(je),{visible:g.value,title:a(t)("ai_assistant.conversation.delete_title"),description:a(t)("ai_assistant.widget.delete_confirm"),"onUpdate:visible":i[2]||(i[2]=d=>g.value=d),onDelete:re},null,8,["visible","title","description"])],42,bs)):$("",!0)]),_:1}),r("button",{ref_key:"fabRef",ref:y,class:M(["assistant-widget__fab",{_open:a(s).isWidgetOpen}]),"aria-label":a(s).isWidgetOpen?a(t)("ai_assistant.widget.close_aria_label"):a(t)("ai_assistant.widget.open_aria_label"),"aria-expanded":a(s).isWidgetOpen,onClick:se},[a(s).isWidgetOpen?(v(),p("span",Us,"×")):(v(),p("span",Fs,"AI"))],10,Ls)])):$("",!0)]))}}),Gs=U(Bs,[["__scopeId","data-v-589b6b72"]]);export{Gs as default};
3//# sourceMappingURL=AssistantWidget-DlUh4dqr.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.