exports.id=649,exports.ids=[649],exports.modules={17382:(e,t,s)=>{"use strict";s.d(t,{Z:()=>o});var a,n,r=s(6413);function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";s.d(t,{Z:()=>o});var a,n,r=s(6413);function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";s.d(t,{Z:()=>i});var a,n=s(6413);function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";s.d(t,{Z:()=>o});var a,n,r=s(6413);function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";s.d(t,{Z:()=>o});var a,n,r=s(6413);function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";s.d(t,{UK:()=>l,YZ:()=>i,x6:()=>o});var a=s(3729),n=s(76060),r=s(9719);function i(e={}){let[t,s]=(0,n.lr)();(0,a.useEffect)(()=>{let a=!1;t.forEach((s,n)=>{"function"==typeof e[n]&&(e[n](s),t.delete(n),a=!0)}),a&&s(t)},[t,e])}let o=/^[::]/;function l(e={}){function t(e){return e.match(o)?e.slice(1):e}return{match:function(s){let a=t(s),n="function"==typeof e[a];return{matched:n,invoke:()=>n&&e[a](s)}},search:function(s){let a=t(s),n=r.ZP.Chat.Commands;return Object.keys(e).filter(e=>e.startsWith(a)).map(e=>({title:n[e],content:":"+e}))}}}},21649:(e,t,s)=>{"use strict";s.r(t),s.d(t,{Chat:()=>t$,ChatAction:()=>tB,ChatActions:()=>tH,DeleteImageButton:()=>tU,EditMessageModal:()=>tz,PromptHints:()=>tR,SessionConfigModel:()=>tI,ShortcutKeyModal:()=>tW});var a,n,r,i,o,l,c,h,d,m,u,p,g,f,x,v,w,y,_,k,j,C,b,E,S,N,M,P,O,Z,T,A,L,D,I,K,R,F,B,H=s(95344),z=s(75499),U=s(3729),W=s(6413);function V(){return(V=Object.assign?Object.assign.bind():function(e){for(var t=1;te.content&&!e.isError&&!e.streaming,a=(0,U.useMemo)(()=>{let e=Math.max(0,t.clearContextIndex??0);return e===t.messages.length-1&&(e=0),t.messages.slice(e)},[t.messages,t.clearContextIndex]),n=(0,U.useMemo)(()=>a.filter((e,t)=>e.id&&s(e)&&(t>=a.length-1||s(a[t+1]))),[a]),r=n.length,i=(0,eL.MG)(),[o,l]=(0,U.useState)(""),[c,h]=(0,U.useState)(new Set),d=e=>0===o.length||c.has(e),m=e=>{let t=new Set;e.length>0&&n.forEach(s=>(0,eD.YK)(s).includes(e)?t.add(s.id):null),h(t)},{startIndex:u,endIndex:p,onClickIndex:g}=function(){let[e,t]=(0,U.useState)(),[s,a]=(0,U.useState)(),[n,r]=(0,U.useState)(!1);return(0,U.useEffect)(()=>{let e=e=>{"Shift"===e.key&&r(!0)},s=e=>{"Shift"===e.key&&(r(!1),t(void 0),a(void 0))};return window.addEventListener("keyup",s),window.addEventListener("keydown",e),()=>{window.removeEventListener("keyup",s),window.removeEventListener("keydown",e)}},[]),{onClickIndex:s=>{n&&void 0!==e?a(s):(t(s),a(void 0))},startIndex:e,endIndex:s}}(),f=()=>{e.updateSelection(e=>n.forEach(t=>e.add(t.id)))};return(0,U.useEffect)(()=>{e.defaultSelectAll&&f()},[]),(0,U.useEffect)(()=>{if(void 0===u||void 0===p)return;let[t,s]=[u,p].sort((e,t)=>e-t);e.updateSelection(e=>{for(let a=t;a<=s;a+=1)e.add(n[a].id??a)})},[u,p]),(0,H.jsxs)("div",{className:e4()["message-selector"],children:[(0,H.jsxs)("div",{className:e4()["message-filter"],children:[H.jsx("input",{type:"text",placeholder:eB.ZP.Select.Search,className:(0,e8.Z)(e4()["filter-item"],e4()["search-bar"]),value:o,onInput:e=>{l(e.currentTarget.value),m(e.currentTarget.value)}}),(0,H.jsxs)("div",{className:e4().actions,children:[H.jsx(eH.h,{text:eB.ZP.Select.All,bordered:!0,className:e4()["filter-item"],onClick:f}),H.jsx(eH.h,{text:eB.ZP.Select.Latest,bordered:!0,className:e4()["filter-item"],onClick:()=>e.updateSelection(e=>{e.clear(),n.slice(r-4).forEach(t=>e.add(t.id))})}),H.jsx(eH.h,{text:eB.ZP.Select.Clear,bordered:!0,className:e4()["filter-item"],onClick:()=>e.updateSelection(e=>e.clear())})]})]}),H.jsx("div",{className:e4().messages,children:n.map((s,a)=>{if(!d(s.id))return null;let n=s.id??a,r=e.selection.has(n);return(0,H.jsxs)("div",{className:(0,e8.Z)(e4().message,{[e4()["message-selected"]]:e.selection.has(s.id)}),onClick:()=>{e.updateSelection(e=>{e.has(n)?e.delete(n):e.add(n)}),g(a)},children:[H.jsx("div",{className:e4().avatar,children:"user"===s.role?H.jsx(eG.qE,{avatar:i.avatar}):H.jsx(eX.MaskAvatar,{avatar:t.mask.avatar,model:s.model||t.mask.modelConfig.model})}),(0,H.jsxs)("div",{className:e4().body,children:[H.jsx("div",{className:e4().date,children:new Date(s.date).toLocaleString()}),H.jsx("div",{className:(0,e8.Z)(e4().content,"one-line"),children:(0,eD.YK)(s)})]}),H.jsx("div",{className:e4().checkbox,children:H.jsx("input",{type:"checkbox",checked:r,readOnly:!0})})]},a)})})]})}var e5=s(89410),e9=s(71052),te=s(54508),tt=s(31604);let ts=(0,eK.default)(async()=>(await s.e(768).then(s.bind(s,49768))).Markdown,{loadableGenerated:{modules:["D:\\NextWeb\\app\\components\\exporter.tsx -> ./markdown"]},loading:()=>H.jsx(er.Z,{})});function ta(e){return H.jsx("div",{className:"modal-mask",children:H.jsx(eW.u_,{title:eB.ZP.Export.Title,onClose:e.onClose,footer:H.jsx("div",{style:{width:"100%",textAlign:"center",fontSize:14,opacity:.5},children:eB.ZP.Exporter.Description.Title}),children:H.jsx("div",{style:{minHeight:"40vh"},children:H.jsx(tr,{})})})})}function tn(e){let t=e.steps,s=t.length;return(0,H.jsxs)("div",{className:e0().steps,children:[H.jsx("div",{className:e0()["steps-progress"],children:H.jsx("div",{className:e0()["steps-progress-inner"],style:{width:`${(e.index+1)/s*100}%`}})}),H.jsx("div",{className:e0()["steps-inner"],children:t.map((t,s)=>(0,H.jsxs)("div",{className:(0,e8.Z)("clickable",e0().step,{[e0()["step-finished"]]:s<=e.index,[e0()["step-current"]]:s===e.index}),onClick:()=>{e.onStepChange?.(s)},role:"button",children:[H.jsx("span",{className:e0()["step-index"],children:s+1}),H.jsx("span",{className:e0()["step-name"],children:t.name})]},s))})]})}function tr(){let e=[{name:eB.ZP.Export.Steps.Select,value:"select"},{name:eB.ZP.Export.Steps.Preview,value:"preview"}],{currentStep:t,setCurrentStepIndex:s,currentStepIndex:a}=function(e){let t=e.length,[s,a]=(0,U.useState)(0);return{currentStepIndex:s,setCurrentStepIndex:a,nextStep:()=>a((s+1)%t),prevStep:()=>a((s-1+t)%t),currentStep:e[s]}}(e),[n,r]=(0,U.useState)({format:"image",includeContext:!0});function i(e){let t={...n};e(t),r(t)}let o=(0,eL.aK)().currentSession(),{selection:l,updateSelection:c}=function(){let[e,t]=(0,U.useState)(new Set);return{selection:e,updateSelection:s=>{let a=new Set(e);s(a),t(a)}}}(),h=(0,U.useMemo)(()=>{let e=[];return n.includeContext&&e.push(...o.mask.context),e.push(...o.messages.filter(e=>l.has(e.id))),e},[n.includeContext,o.messages,o.mask.context,l]);return(0,H.jsxs)(H.Fragment,{children:[H.jsx(tn,{steps:e,index:a,onStepChange:s}),(0,H.jsxs)("div",{className:e0()["message-exporter-body"],style:"select"!==t.value?{display:"none"}:{},children:[(0,H.jsxs)(eW.aV,{children:[H.jsx(eW.HC,{title:eB.ZP.Export.Format.Title,subTitle:eB.ZP.Export.Format.SubTitle,children:H.jsx(eW.Ph,{value:n.format,onChange:e=>i(t=>t.format=e.currentTarget.value),children:["text","image","json"].map(e=>H.jsx("option",{value:e,children:e},e))})}),H.jsx(eW.HC,{title:eB.ZP.Export.IncludeContext.Title,subTitle:eB.ZP.Export.IncludeContext.SubTitle,children:H.jsx("input",{type:"checkbox",checked:n.includeContext,onChange:e=>{i(t=>t.includeContext=e.currentTarget.checked)}})})]}),H.jsx(e7,{selection:l,updateSelection:c,defaultSelectAll:!0})]}),"preview"===t.value&&H.jsx("div",{className:e0()["message-exporter-body"],children:"text"===n.format?H.jsx(th,{messages:h,topic:o.topic}):"json"===n.format?H.jsx(td,{messages:h,topic:o.topic}):H.jsx(tc,{messages:h,topic:o.topic})})]})}function ti(e){let t=(0,U.useRef)(null);return(0,U.useEffect)(()=>{if(!t.current)return;let s=Array.from(t.current.getElementsByClassName(e$.yY));if(s.length!==e.messages.length)return;let a=s.map((e,t)=>{let[s,a]=e.id.split(":");return{id:t.toString(),role:s,content:"user"===s?e.textContent??"":e.innerHTML,date:""}});e.onRender(a)},[]),H.jsx("div",{ref:t,children:e.messages.map((e,t)=>H.jsx("div",{id:`${e.role}:${t}`,className:e$.yY,children:H.jsx(ts,{content:(0,eD.YK)(e),defaultShow:!0})},t))})}function to(e){let[t,s]=(0,U.useState)(!1),[a,n]=(0,U.useState)(!1),r=(0,eL.MG)(),i=async()=>{e.messages?.length&&(s(!0),n(!0))};return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)("div",{className:e0()["preview-actions"],children:[e.showCopy&&H.jsx(eH.h,{text:eB.ZP.Export.Copy,bordered:!0,shadow:!0,icon:H.jsx(ee.Z,{}),onClick:e.copy}),H.jsx(eH.h,{text:eB.ZP.Export.Download,bordered:!0,shadow:!0,icon:H.jsx(e6.Z,{}),onClick:e.download}),H.jsx(eH.h,{text:eB.ZP.Export.Share,bordered:!0,shadow:!0,icon:t?H.jsx(er.Z,{}):H.jsx(Q.Z,{}),onClick:i})]}),H.jsx("div",{style:{position:"fixed",right:"200vw",pointerEvents:"none"},children:a&&H.jsx(ti,{messages:e.messages??[],onRender:e=>{n(!1),(0,tt.Lw)(r.modelConfig.providerName).share(e).then(e=>{e&&((0,eW.K4)({title:eB.ZP.Export.Share,children:[H.jsx("input",{type:"text",value:e,style:{width:"100%",maxWidth:"unset"},readOnly:!0,onClick:e=>e.currentTarget.select()},"input")],actions:[H.jsx(eH.h,{icon:H.jsx(ee.Z,{}),text:eB.ZP.Chat.Actions.Copy,onClick:()=>(0,eD.vQ)(e)},"copy")]}),setTimeout(()=>{window.open(e,"_blank")},800))}).catch(e=>{console.error("[Share]",e),(0,eW.CF)((0,eQ.B)(e))}).finally(()=>s(!1))}})})]})}function tl(e){return e.avatar===eq._G?H.jsx("img",{src:e3.src,width:30,height:30,alt:"bot",className:"user-avatar"}):H.jsx(eG.qE,{avatar:e.avatar})}function tc(e){let t=(0,eL.aK)().currentSession(),s=t.mask,a=(0,eL.MG)(),n=(0,U.useRef)(null),r=(0,eD.S0)(),i=async()=>{(0,eW.CF)(eB.ZP.Export.Image.Toast);let t=n.current;if(!t)return;let s=te.Z()?.isApp;try{let a=await (0,e9.YM)(t);if(!a)return;if(r||s&&window.__TAURI__){if(s&&window.__TAURI__){let t=await window.__TAURI__.dialog.save({defaultPath:`${e.topic}.png`,filters:[{name:"PNG Files",extensions:["png"]},{name:"All Files",extensions:["*"]}]});if(null!==t){let e=await fetch(a),s=await e.arrayBuffer(),n=new Uint8Array(s);await window.__TAURI__.fs.writeBinaryFile(t,n),(0,eW.CF)(eB.ZP.Download.Success)}else(0,eW.CF)(eB.ZP.Download.Failed)}else(0,eW.vi)(a)}else{let t=document.createElement("a");t.download=`${e.topic}.png`,t.href=a,t.click(),o()}}catch(e){(0,eW.CF)(eB.ZP.Download.Failed)}},o=()=>{let e=n.current;e&&(e.innerHTML=e.innerHTML)};return(0,H.jsxs)("div",{className:e0()["image-previewer"],children:[H.jsx(to,{copy:()=>{(0,eW.CF)(eB.ZP.Export.Image.Toast);let e=n.current;e&&(0,e9.SE)(e).then(e=>{if(e)try{navigator.clipboard.write([new ClipboardItem({"image/png":e})]).then(()=>{(0,eW.CF)(eB.ZP.Copy.Success),o()})}catch(e){console.error("[Copy Image] ",e),(0,eW.CF)(eB.ZP.Copy.Failed)}})},download:i,showCopy:!r,messages:e.messages}),(0,H.jsxs)("div",{className:(0,e8.Z)(e0()["preview-body"],e0()["default-theme"]),ref:n,children:[(0,H.jsxs)("div",{className:e0()["chat-info"],children:[H.jsx("div",{className:(0,e8.Z)(e0().logo,"no-dark"),children:H.jsx(e5.default,{src:e1.Z.src,alt:"logo",width:50,height:50})}),(0,H.jsxs)("div",{children:[H.jsx("div",{className:e0()["main-title"],children:"NextChat"}),H.jsx("div",{className:e0()["sub-title"],children:"github.com/ChatGPTNextWeb/ChatGPT-Next-Web"}),(0,H.jsxs)("div",{className:e0().icons,children:[H.jsx(tl,{avatar:a.avatar}),H.jsx("span",{className:e0()["icon-space"],children:"&"}),H.jsx(tl,{avatar:s.avatar})]})]}),(0,H.jsxs)("div",{children:[(0,H.jsxs)("div",{className:e0()["chat-info-item"],children:[eB.ZP.Exporter.Model,": ",s.modelConfig.model]}),(0,H.jsxs)("div",{className:e0()["chat-info-item"],children:[eB.ZP.Exporter.Messages,": ",e.messages.length]}),(0,H.jsxs)("div",{className:e0()["chat-info-item"],children:[eB.ZP.Exporter.Topic,": ",t.topic]}),(0,H.jsxs)("div",{className:e0()["chat-info-item"],children:[eB.ZP.Exporter.Time,":"," ",new Date(e.messages.at(-1)?.date??Date.now()).toLocaleString()]})]})]}),e.messages.map((e,t)=>(0,H.jsxs)("div",{className:(0,e8.Z)(e0().message,e0()["message-"+e.role]),children:[H.jsx("div",{className:e0().avatar,children:H.jsx(tl,{avatar:"user"===e.role?a.avatar:s.avatar})}),(0,H.jsxs)("div",{className:e0().body,children:[H.jsx(ts,{content:(0,eD.YK)(e),fontSize:a.fontSize,fontFamily:a.fontFamily,defaultShow:!0}),1==(0,eD.Bs)(e).length&&H.jsx("img",{src:(0,eD.Bs)(e)[0],alt:"message",className:e0()["message-image"]},t),(0,eD.Bs)(e).length>1&&H.jsx("div",{className:e0()["message-images"],style:{"--image-count":(0,eD.Bs)(e).length},children:(0,eD.Bs)(e).map((e,t)=>H.jsx("img",{src:e,alt:"message",className:e0()["message-image-multi"]},t))})]})]},t))]})]})}function th(e){let t=`# ${e.topic} `+e.messages.map(e=>"user"===e.role?`## ${eB.ZP.Export.MessageFromYou}: ${(0,eD.YK)(e)}`:`## ${eB.ZP.Export.MessageFromChatGPT}: ${(0,eD.YK)(e).trim()}`).join("\n\n");return(0,H.jsxs)(H.Fragment,{children:[H.jsx(to,{copy:()=>{(0,eD.vQ)(t)},download:()=>{(0,eD.CP)(t,`${e.topic}.md`)},showCopy:!0,messages:e.messages}),H.jsx("div",{className:"markdown-body",children:H.jsx("pre",{className:e0()["export-content"],children:t})})]})}function td(e){let t={messages:[{role:"system",content:`${eB.ZP.FineTuned.Sysmessage} ${e.topic}`},...e.messages.map(e=>({role:e.role,content:e.content}))]},s="```json\n"+JSON.stringify(t,null,2)+"\n```",a=JSON.stringify(t),n=()=>{(0,eD.vQ)(a)};return(0,H.jsxs)(H.Fragment,{children:[H.jsx(to,{copy:n,download:()=>{(0,eD.CP)(JSON.stringify(t),`${e.topic}.json`)},showCopy:!1,messages:e.messages}),H.jsx("div",{className:"markdown-body",onClick:n,children:H.jsx(ts,{content:s})})]})}var tm=s(74255),tu=s(14300),tp=s(6113),tg=s(12781);(function(e){e.SILENT="silent",e.X_SOFT="x-soft",e.SOFT="soft",e.MEDIUM="medium",e.LOUD="loud",e.X_LOUD="x-LOUD",e.DEFAULT="default"})(T||(T={})),function(e){e.X_SLOW="x-slow",e.SLOW="slow",e.MEDIUM="medium",e.FAST="fast",e.X_FAST="x-fast",e.DEFAULT="default"}(A||(A={})),function(e){e.X_LOW="x-low",e.LOW="low",e.MEDIUM="medium",e.HIGH="high",e.X_HIGH="x-high",e.DEFAULT="default"}(L||(L={})),function(e){e.AUDIO_24KHZ_48KBITRATE_MONO_MP3="audio-24khz-48kbitrate-mono-mp3",e.AUDIO_24KHZ_96KBITRATE_MONO_MP3="audio-24khz-96kbitrate-mono-mp3",e.WEBM_24KHZ_16BIT_MONO_OPUS="webm-24khz-16bit-mono-opus"}(D||(D={}));class tf{constructor(){this.pitch="+0Hz",this.rate=1,this.volume=100}}class tx{static{this.OUTPUT_FORMAT=D}static{this.TRUSTED_CLIENT_TOKEN="6A5AA1D4EAFF4E9FB37E23D68491D6F4"}static{this.VOICES_URL=`https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=${tx.TRUSTED_CLIENT_TOKEN}`}static{this.SYNTH_URL=`wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?TrustedClientToken=${tx.TRUSTED_CLIENT_TOKEN}`}static{this.BINARY_DELIM="Path:audio\r\n"}static{this.VOICE_LANG_REGEX=/\w{2}-\w{2}/}_log(...e){this._enableLogger&&console.log(...e)}constructor(e=!1){this._streams={},this._startTime=0,this._enableLogger=e}async _send(e){for(let e=1;e<=3&&this._ws.readyState!==this._ws.OPEN;e++)1==e&&(this._startTime=Date.now()),this._log("connecting: ",e),await this._initClient();this._ws.send(e)}_initClient(){return this._ws=new WebSocket(tx.SYNTH_URL),this._ws.binaryType="arraybuffer",new Promise((e,t)=>{this._ws.onopen=()=>{this._log("Connected in",(Date.now()-this._startTime)/1e3,"seconds"),this._send(`Content-Type:application/json; charset=utf-8\r Path:speech.config\r \r { "context": { "synthesis": { "audio": { "metadataoptions": { "sentenceBoundaryEnabled": "false", "wordBoundaryEnabled": "false" }, "outputFormat": "${this._outputFormat}" } } } } `).then(e)},this._ws.onmessage=e=>{let t=tu.Buffer.from(e.data),s=t.toString(),a=/X-RequestId:(.*?)\r\n/gm.exec(s)[1];s.includes("Path:turn.start")||(s.includes("Path:turn.end")?this._streams[a].push(null):s.includes("Path:response")||(s.includes("Path:audio")&&e.data instanceof ArrayBuffer?this._pushAudioData(t,a):this._log("UNKNOWN MESSAGE",s)))},this._ws.onclose=()=>{for(let e in this._log("disconnected after:",(Date.now()-this._startTime)/1e3,"seconds"),this._streams)this._streams[e].push(null)},this._ws.onerror=function(e){t("Connect Error: "+e)}})}_pushAudioData(e,t){let s=e.indexOf(tx.BINARY_DELIM)+tx.BINARY_DELIM.length,a=e.subarray(s);this._streams[t].push(a),this._log("received audio chunk, size: ",a?.length)}_SSMLTemplate(e,t={}){return t={...new tf,...t},` ${e} `}getVoices(){return fetch(tx.VOICES_URL).then(e=>{if(!e.ok)throw Error("Network response was not ok");return e.json()}).then(e=>e).catch(e=>{throw e})}async setMetadata(e,t,s){let a=this._voice,n=this._voiceLocale,r=this._outputFormat;if(this._voice=e,this._voiceLocale=s,!this._voiceLocale){let e=tx.VOICE_LANG_REGEX.exec(this._voice);if(!e)throw Error("Could not infer voiceLocale from voiceName!");this._voiceLocale=e[0]}this._outputFormat=t,(a!==this._voice||n!==this._voiceLocale||r!==this._outputFormat||this._ws.readyState!==this._ws.OPEN)&&(this._startTime=Date.now(),await this._initClient())}_metadataCheck(){if(!this._ws)throw Error("Speech synthesis not configured yet. Run setMetadata before calling toStream or toFile.")}close(){this._ws.close()}toStream(e,t){let{stream:s}=this._rawSSMLRequest(this._SSMLTemplate(e,t));return s}toArrayBuffer(e,t){return new Promise((s,a)=>{let n=[],r=this.toStream(e,t);r.on("data",e=>{n.push(e)}),r.on("end",()=>{s(tu.Buffer.concat(n).buffer)}),r.on("error",e=>{a(e)})})}rawToStream(e){let{stream:t}=this._rawSSMLRequest(e);return t}_rawSSMLRequest(e){this._metadataCheck();let t=(0,tp.randomBytes)(16).toString("hex"),s=`X-RequestId:${t}\r Content-Type:application/ssml+xml\r Path:ssml\r \r `+e.trim(),a=this,n=new tg.Readable({read(){},destroy(e,s){delete a._streams[t],s(e)}});return this._streams[t]=n,this._send(s).then(),{stream:n,requestId:t}}}var tv=s(20582),tw=s(6111);function ty(){return(ty=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if("audio"===t.data.eventType){let s=t.data.audioData,a=new Int16Array(s.length);for(let e=0;ee.stop())}startStreamingPlayback(){this.isPlaying=!0,this.nextPlayTime=this.context.currentTime}stopStreamingPlayback(){this.isPlaying=!1,this.playbackQueue.forEach(e=>e.stop()),this.playbackQueue=[],this.playBuffer=[]}playChunk(e){if(!this.isPlaying)return;let t=new Int16Array(e.buffer);this.playBuffer.push.apply(this.playBuffer,t);let s=new Float32Array(t.length);for(let e=0;e{let e=this.playbackQueue.indexOf(n);e>-1&&this.playbackQueue.splice(e,1)},this.nextPlayTime+=r,this.nextPlayTimee.stop()),await this.context.close()}}var tP=s(19262),tO=s.n(tP);function tZ({frequencies:e,isActive:t}){let s=(0,U.useRef)(null),a=(0,U.useRef)([]),n=(0,U.useRef)(10),r=(0,U.useRef)(),i=(0,U.useCallback)(e=>{a.current.push(e),a.current.length>n.current&&a.current.shift()},[]);return(0,U.useEffect)(()=>{let n=s.current;if(!n)return;let o=n.getContext("2d");if(!o)return;let l=window.devicePixelRatio||1;n.width=n.offsetWidth*l,n.height=n.offsetHeight*l,o.scale(l,l);let c=()=>{if(o.clearRect(0,0,n.width,n.height),!e||!t){a.current=[];return}i(Array.from(e));let s=[],l=n.height/2,h=n.width/(e.length-1);o.beginPath(),o.moveTo(0,l);for(let t=0;t0&&(i=(i+a.current.map(e=>e[t]||0).reduce((e,t)=>e+t,0))/(a.current.length+1));let c=i/255,d=l+n.height/2*c*Math.sin(.2*t+.002*Date.now());if(s.push([r,d]),0===t)o.moveTo(r,d);else{let e=s[t-1],a=(e[0]+r)/2;o.quadraticCurveTo(e[0],e[1],a,(e[1]+d)/2)}}for(let e=s.length-1;e>=0;e--){let[t,a]=s[e],n=l-(a-l);if(e===s.length-1)o.lineTo(t,n);else{let n=s[e+1],r=(n[0]+t)/2;o.quadraticCurveTo(n[0],l-(n[1]-l),r,l-((n[1]+a)/2-l))}}o.closePath();let d=o.createLinearGradient(0,0,n.width,0);d.addColorStop(0,"rgba(100, 180, 255, 0.95)"),d.addColorStop(.5,"rgba(140, 200, 255, 0.9)"),d.addColorStop(1,"rgba(180, 220, 255, 0.95)"),o.fillStyle=d,o.fill(),r.current=requestAnimationFrame(c)};return c(),()=>{r.current&&cancelAnimationFrame(r.current)}},[e,t,i]),H.jsx("div",{className:tO()["voice-print"],children:H.jsx("canvas",{ref:s})})}function tT({onClose:e,onStartVoice:t,onPausedVoice:s}){let a=(0,eL.aK)(),n=a.currentSession(),r=(0,eL.MG)(),[i,o]=(0,U.useState)(""),[l,c]=(0,U.useState)(!1),[h,d]=(0,U.useState)(!1),[m,u]=(0,U.useState)(!1),[p,g]=(0,U.useState)("audio"),[f,x]=(0,U.useState)(!0),[v,w]=(0,U.useState)(),y=(0,U.useRef)(null),_=(0,U.useRef)(null),k=(0,U.useRef)(!1),j=r.realtimeConfig.temperature,C=r.realtimeConfig.apiKey,b=r.realtimeConfig.model,E="Azure"===r.realtimeConfig.provider,S=r.realtimeConfig.azure.endpoint,N=r.realtimeConfig.azure.deployment,M=r.realtimeConfig.voice,P=async()=>{if(!m){if(h)await O();else try{u(!0),y.current=E?new tN.G2(new URL(S),{key:C},{deployment:N}):new tN.G2({key:C},{model:b}),await y.current.configure({instructions:"",voice:M,input_audio_transcription:{model:"whisper-1"},turn_detection:f?{type:"server_vad"}:null,tools:[],temperature:j,modalities:"audio"===p?["text","audio"]:["text"]}),Z(),d(!0)}catch(e){console.error("Connection failed:",e),o("Connection failed")}finally{u(!1)}}},O=async()=>{if(y.current)try{await y.current.close(),y.current=null,d(!1)}catch(e){console.error("Disconnect failed:",e)}},Z=async()=>{if(y.current)try{for await(let e of y.current.events())"response"===e.type?await T(e):"input_audio"===e.type&&await A(e)}catch(e){y.current&&console.error("Response iteration error:",e)}},T=async e=>{for await(let t of e)if("message"===t.type&&"assistant"===t.role){let e=(0,eL.tn)({role:t.role,content:""});a.updateTargetSession(n,t=>{t.messages=t.messages.concat([e])});let s=!1;for await(let r of t){if("text"===r.type)for await(let t of r.textChunks())e.content+=t;else if("audio"===r.type){let t=async()=>{for await(let t of r.transcriptChunks())e.content+=t},a=async()=>{for await(let e of(_.current?.startStreamingPlayback(),r.audioChunks()))s=!0,_.current?.playChunk(e)};await Promise.all([t(),a()])}a.updateTargetSession(n,e=>{e.messages=e.messages.concat()})}if(s){let t=_.current?.savePlayFile();(0,eI.Ix)(t).then(t=>{e.audio_url=t,a.updateTargetSession(n,e=>{e.messages=e.messages.concat()})})}}},A=async e=>{if(await e.waitForCompletion(),e.transcription){let t=(0,eL.tn)({role:"user",content:e.transcription});a.updateTargetSession(n,e=>{e.messages=e.messages.concat([t])});let{audioStartMillis:s,audioEndMillis:r}=e,i=_.current?.saveRecordFile(s,r);(0,eI.Ix)(i).then(e=>{t.audio_url=e,a.updateTargetSession(n,e=>{e.messages=e.messages.concat()})})}_.current?.stopStreamingPlayback()},L=async()=>{if(!l&&y.current)try{_.current||(_.current=new tM,await _.current.initialize()),await _.current.startRecording(async e=>{await y.current?.sendAudio(e)}),c(!0)}catch(e){console.error("Failed to start recording:",e)}else if(_.current)try{if(_.current.stopRecording(),!f){let e=await y.current?.commitAudio();await A(e),await y.current?.generateResponse()}c(!1)}catch(e){console.error("Failed to stop recording:",e)}};(0,U.useEffect)(()=>{if(!k.current)return k.current=!0,(async()=>{let e=new tM;await e.initialize(),_.current=e,await P(),await L()})().catch(e=>{o(e),console.error(e)}),()=>{l&&L(),_.current?.close().catch(console.error),O()}},[]),(0,U.useEffect)(()=>{let e;if(h&&l){let t=()=>{_.current&&w(_.current.getByteFrequencyData()),e=requestAnimationFrame(t)};e=requestAnimationFrame(t)}else w(void 0);return()=>{e&&cancelAnimationFrame(e)}},[h,l]),(0,U.useEffect)(()=>{y.current?.configure({voice:M})},[M]),(0,U.useEffect)(()=>{y.current?.configure({temperature:j})},[j]);let D=async()=>{e?.(),l&&await L(),O().catch(console.error)};return(0,H.jsxs)("div",{className:tS()["realtime-chat"],children:[H.jsx("div",{className:(0,e8.Z)(tS()["circle-mic"],{[tS().pulse]:l}),children:H.jsx(tZ,{frequencies:v,isActive:l})}),(0,H.jsxs)("div",{className:tS()["bottom-icons"],children:[H.jsx("div",{children:H.jsx(eH.h,{icon:l?H.jsx(t_,{}):H.jsx(tj,{}),onClick:L,disabled:!h,shadow:!0,bordered:!0})}),H.jsx("div",{className:tS()["icon-center"],children:i}),H.jsx("div",{children:H.jsx(eH.h,{icon:H.jsx(tb,{}),onClick:D,shadow:!0,bordered:!0})})]})]})}s(85824);let tA=(0,eD.EN)(),tL=function(){let e=null,t=null;return{init:()=>{(e=new(window.AudioContext||window.webkitAudioContext)).suspend()},play:async(s,a)=>{t&&(t.stop(),t.disconnect());let n=await e.decodeAudioData(s);(t=e.createBufferSource()).buffer=n,t.connect(e.destination),e.resume().then(()=>{t.start()}),t.onended=a},stop:()=>{t&&(t.stop(),t.disconnect(),t=null),e&&(e.close(),e=null)}}}(),tD=(0,eK.default)(async()=>(await s.e(768).then(s.bind(s,49768))).Markdown,{loadableGenerated:{modules:["D:\\NextWeb\\app\\components\\chat.tsx -> ./markdown"]},loading:()=>H.jsx(er.Z,{})});function tI(e){let t=(0,eL.aK)(),s=t.currentSession(),a=(0,eq.Zy)(),n=(0,eV.s0)();return H.jsx("div",{className:"modal-mask",children:H.jsx(eW.u_,{title:eB.ZP.Context.Edit,onClose:()=>e.onClose(),actions:[H.jsx(eH.h,{icon:H.jsx(ec.Z,{}),bordered:!0,text:eB.ZP.Chat.Config.Reset,onClick:async()=>{await (0,eW.i0)(eB.ZP.Memory.ResetConfirm)&&t.updateTargetSession(s,e=>e.memoryPrompt="")}},"reset"),H.jsx(eH.h,{icon:H.jsx(ee.Z,{}),bordered:!0,text:eB.ZP.Chat.Config.SaveAs,onClick:()=>{n(e$.y$.Masks),setTimeout(()=>{a.create(s.mask)},500)}},"copy")],children:H.jsx(eX.MaskConfig,{mask:s.mask,updateMask:e=>{let a={...s.mask};e(a),t.updateTargetSession(s,e=>e.mask=a)},shouldSyncFromGlobal:!0,extraListItems:s.mask.modelConfig.sendMemory?H.jsx(eW.HC,{className:"copyable",title:`${eB.ZP.Memory.Title} (${s.lastSummarizeIndex} of ${s.messages.length})`,subTitle:s.memoryPrompt||eB.ZP.Memory.EmptyContent}):H.jsx(H.Fragment,{})})})})}function tK(e){let t=(0,eL.aK)().currentSession().mask.context;return(0,H.jsxs)("div",{className:eU()["prompt-toast"],children:[e.showToast&&t.length>0&&(0,H.jsxs)("div",{className:(0,e8.Z)(eU()["prompt-toast-inner"],"clickable"),role:"button",onClick:()=>e.setShowModal(!0),children:[H.jsx(X,{}),H.jsx("span",{className:eU()["prompt-toast-content"],children:eB.ZP.Context.Toast(t.length)})]}),e.showModal&&H.jsx(tI,{onClose:()=>e.setShowModal(!1)})]},"prompt-toast")}function tR(e){let t=0===e.prompts.length,[s,a]=(0,U.useState)(0),n=(0,U.useRef)(null);return((0,U.useEffect)(()=>{a(0)},[e.prompts.length]),(0,U.useEffect)(()=>{let r=r=>{if(t||r.metaKey||r.altKey||r.ctrlKey)return;let i=t=>{r.stopPropagation(),r.preventDefault(),a(Math.max(0,Math.min(e.prompts.length-1,s+t))),n.current?.scrollIntoView({block:"center"})};if("ArrowUp"===r.key)i(1);else if("ArrowDown"===r.key)i(-1);else if("Enter"===r.key){let t=e.prompts.at(s);t&&e.onPromptSelect(t)}};return window.addEventListener("keydown",r),()=>window.removeEventListener("keydown",r)},[e.prompts.length,s]),t)?null:H.jsx("div",{className:eU()["prompt-hints"],children:e.prompts.map((t,r)=>(0,H.jsxs)("div",{ref:r===s?n:null,className:(0,e8.Z)(eU()["prompt-hint"],{[eU()["prompt-hint-selected"]]:r===s}),onClick:()=>e.onPromptSelect(t),onMouseEnter:()=>a(r),children:[H.jsx("div",{className:eU()["hint-title"],children:t.title}),H.jsx("div",{className:eU()["hint-content"],children:t.content})]},t.title+r.toString()))})}function tF(){let e=(0,eL.aK)(),t=e.currentSession();return(0,H.jsxs)("div",{className:eU()["clear-context"],onClick:()=>e.updateTargetSession(t,e=>e.clearContextIndex=void 0),children:[H.jsx("div",{className:eU()["clear-context-tips"],children:eB.ZP.Context.Clear}),H.jsx("div",{className:eU()["clear-context-revert-btn"],children:eB.ZP.Context.Revert})]})}function tB(e){let t=(0,U.useRef)(null),s=(0,U.useRef)(null),[a,n]=(0,U.useState)({full:16,icon:16});function r(){if(!t.current||!s.current)return;let e=s.current.getBoundingClientRect().width,a=t.current.getBoundingClientRect().width;n({full:e+a,icon:a})}return(0,H.jsxs)("div",{className:(0,e8.Z)(eU()["chat-input-action"],"clickable"),onClick:()=>{e.onClick(),setTimeout(r,1)},onMouseEnter:r,onTouchStart:r,style:{"--icon-width":`${a.icon}px`,"--full-width":`${a.full}px`},children:[H.jsx("div",{ref:t,className:eU().icon,children:e.icon}),H.jsx("div",{className:eU().text,ref:s,children:e.text})]})}function tH(e){let t=(0,eL.MG)(),s=(0,eV.s0)(),a=(0,eL.aK)(),n=(0,eL.RQ)(),r=a.currentSession();t.theme;let i=eR.L.hasPending(),o=r.mask.modelConfig.model,l=r.mask.modelConfig?.providerName||e$.UT.OpenAI,c=(0,tm.l)(),h=(0,U.useMemo)(()=>{let e=c.filter(e=>e.available),t=e.find(e=>e.isDefault);return t?[t,...e.filter(e=>e!==t)]:e},[c]),d=(0,U.useMemo)(()=>{let e=h.find(e=>e.name==o&&e?.provider?.providerName==l);return e?.displayName??""},[h,o,l]),[m,u]=(0,U.useState)(!1),[p,g]=(0,U.useState)(!1),[f,x]=(0,U.useState)(!1),[v,w]=(0,U.useState)(!1),[y,_]=(0,U.useState)(!1),[k,j]=(0,U.useState)(!1),C=(0,eD.h1)(o),b=r.mask.modelConfig?.size??"1024x1024",E=r.mask.modelConfig?.quality??"standard",S=r.mask.modelConfig?.style??"vivid";return(0,eD.S0)(),(0,U.useEffect)(()=>{let t=(0,eD.Xf)(o);if(x(t),t||(e.setAttachImages([]),e.setUploading(!1)),!h.some(e=>e.name===o)&&h.length>0){let e=h.find(e=>e.isDefault)||h[0];a.updateTargetSession(r,t=>{t.mask.modelConfig.model=e.name,t.mask.modelConfig.providerName=e?.provider?.providerName}),(0,eW.CF)(e?.provider?.providerName=="ByteDance"?e.displayName:e.name)}},[a,o,h,r]),(0,H.jsxs)("div",{className:eU()["chat-input-actions"],children:[(0,H.jsxs)(H.Fragment,{children:[i&&H.jsx(tB,{onClick:()=>eR.L.stopAll(),text:eB.ZP.Chat.InputActions.Stop,icon:H.jsx(ek.Z,{})}),!e.hitBottom&&H.jsx(tB,{onClick:e.scrollToBottom,text:eB.ZP.Chat.InputActions.ToBottom,icon:H.jsx(e_,{})}),e.hitBottom&&H.jsx(tB,{onClick:e.showPromptModal,text:eB.ZP.Chat.InputActions.Settings,icon:H.jsx(ed,{})}),f&&H.jsx(tB,{onClick:e.uploadImage,text:eB.ZP.Chat.InputActions.UploadImage,icon:e.uploading?H.jsx(ei.Z,{}):H.jsx(ew,{})}),H.jsx(tB,{onClick:()=>u(!0),text:d,icon:H.jsx(eC,{})}),m&&H.jsx(eW.Qf,{defaultSelectedValue:`${o}@${l}`,items:h.map(e=>({title:`${e.displayName}${e?.provider?.providerName?" ("+e?.provider?.providerName+")":""}`,value:`${e.name}@${e?.provider?.providerName}`})),onClose:()=>u(!1),onSelection:e=>{if(0===e.length)return;let[t,s]=(0,tw.En)(e[0]);if(a.updateTargetSession(r,e=>{e.mask.modelConfig.model=t,e.mask.modelConfig.providerName=s,e.mask.syncGlobalConfig=!1}),"ByteDance"==s){let e=h.find(e=>e.name==t&&e?.provider?.providerName==s);(0,eW.CF)(e?.displayName??"")}else(0,eW.CF)(t)}}),(0,eD.ZT)(o)&&H.jsx(tB,{onClick:()=>w(!0),text:b,icon:H.jsx(eE,{})}),v&&H.jsx(eW.Qf,{defaultSelectedValue:b,items:C.map(e=>({title:e,value:e})),onClose:()=>w(!1),onSelection:e=>{if(0===e.length)return;let t=e[0];a.updateTargetSession(r,e=>{e.mask.modelConfig.size=t}),(0,eW.CF)(t)}}),(0,eD.Wu)(o)&&H.jsx(tB,{onClick:()=>_(!0),text:E,icon:H.jsx(eN,{})}),y&&H.jsx(eW.Qf,{defaultSelectedValue:E,items:["standard","hd"].map(e=>({title:e,value:e})),onClose:()=>_(!1),onSelection:e=>{if(0===e.length)return;let t=e[0];a.updateTargetSession(r,e=>{e.mask.modelConfig.quality=t}),(0,eW.CF)(t)}}),(0,eD.Wu)(o)&&H.jsx(tB,{onClick:()=>j(!0),text:S,icon:H.jsx(eP,{})}),k&&H.jsx(eW.Qf,{defaultSelectedValue:S,items:["vivid","natural"].map(e=>({title:e,value:e})),onClose:()=>j(!1),onSelection:e=>{if(0===e.length)return;let t=e[0];a.updateTargetSession(r,e=>{e.mask.modelConfig.style=t}),(0,eW.CF)(t)}}),(0,eD.up)(l,o)&&H.jsx(tB,{onClick:()=>{0==n.getAll().length?s(e$.y$.Plugins):g(!0)},text:eB.ZP.Plugin.Name,icon:H.jsx(eZ,{})}),p&&H.jsx(eW.Qf,{multiple:!0,defaultSelectedValue:a.currentSession().mask?.plugin,items:n.getAll().map(e=>({title:`${e?.title}@${e?.version}`,value:e?.id})),onClose:()=>g(!1),onSelection:e=>{a.updateTargetSession(r,t=>{t.mask.plugin=e})}})]}),H.jsx("div",{className:eU()["chat-input-actions-end"],children:t.realtimeConfig.enable&&H.jsx(tB,{onClick:()=>e.setShowChatSidePanel(!0),text:"Realtime Chat",icon:H.jsx(eA,{})})})]})}function tz(e){let t=(0,eL.aK)(),s=t.currentSession(),[a,n]=(0,U.useState)(s.messages.slice());return H.jsx("div",{className:"modal-mask",children:(0,H.jsxs)(eW.u_,{title:eB.ZP.Chat.EditMessage.Title,onClose:e.onClose,actions:[H.jsx(eH.h,{text:eB.ZP.UI.Cancel,icon:H.jsx(ex.Z,{}),onClick:()=>{e.onClose()}},"cancel"),H.jsx(eH.h,{type:"primary",text:eB.ZP.UI.Confirm,icon:H.jsx(eg.Z,{}),onClick:()=>{t.updateTargetSession(s,e=>e.messages=a),e.onClose()}},"ok")],children:[H.jsx(eW.aV,{children:H.jsx(eW.HC,{title:eB.ZP.Chat.EditMessage.Topic.Title,subTitle:eB.ZP.Chat.EditMessage.Topic.SubTitle,children:H.jsx("input",{type:"text",value:s.topic,onInput:e=>t.updateTargetSession(s,t=>t.topic=e.currentTarget.value)})})}),H.jsx(eX.ContextPrompts,{context:a,updateContext:e=>{let t=a.slice();e(t),n(t)}})]})})}function tU(e){return H.jsx("div",{className:eU()["delete-image"],onClick:e.deleteImage,children:H.jsx(em.Z,{})})}function tW(e){let t=navigator.platform.toUpperCase().indexOf("MAC")>=0,s=[{title:eB.ZP.Chat.ShortcutKey.newChat,keys:t?["⌘","Shift","O"]:["Ctrl","Shift","O"]},{title:eB.ZP.Chat.ShortcutKey.focusInput,keys:["Shift","Esc"]},{title:eB.ZP.Chat.ShortcutKey.copyLastCode,keys:t?["⌘","Shift",";"]:["Ctrl","Shift",";"]},{title:eB.ZP.Chat.ShortcutKey.copyLastMessage,keys:t?["⌘","Shift","C"]:["Ctrl","Shift","C"]},{title:eB.ZP.Chat.ShortcutKey.showShortcutKey,keys:t?["⌘","/"]:["Ctrl","/"]},{title:eB.ZP.Chat.ShortcutKey.clearContext,keys:t?["⌘","Shift","backspace"]:["Ctrl","Shift","backspace"]}];return H.jsx("div",{className:"modal-mask",children:H.jsx(eW.u_,{title:eB.ZP.Chat.ShortcutKey.Title,onClose:e.onClose,actions:[H.jsx(eH.h,{type:"primary",text:eB.ZP.UI.Confirm,icon:H.jsx(eg.Z,{}),onClick:()=>{e.onClose()}},"ok")],children:H.jsx("div",{className:eU()["shortcut-key-container"],children:H.jsx("div",{className:eU()["shortcut-key-grid"],children:s.map((e,t)=>(0,H.jsxs)("div",{className:eU()["shortcut-key-item"],children:[H.jsx("div",{className:eU()["shortcut-key-title"],children:e.title}),H.jsx("div",{className:eU()["shortcut-key-keys"],children:e.keys.map((e,t)=>H.jsx("div",{className:eU()["shortcut-key"],children:H.jsx("span",{children:e})},t))})]},t))})})})})}function tV(){let e=(0,eL.aK)(),t=e.currentSession(),a=(0,eL.MG)(),n=a.fontSize,r=a.fontFamily,[i,o]=(0,U.useState)(!1),l=(0,U.useRef)(null),[c,h]=(0,U.useState)(""),[d,m]=(0,U.useState)(!1),{submitKey:u,shouldSubmit:p}=function(){let e=(0,eL.MG)(),t=e.submitKey,s=(0,U.useRef)(!1);return(0,U.useEffect)(()=>{let e=()=>{s.current=!0},t=()=>{s.current=!1};return window.addEventListener("compositionstart",e),window.addEventListener("compositionend",t),()=>{window.removeEventListener("compositionstart",e),window.removeEventListener("compositionend",t)}},[]),{submitKey:t,shouldSubmit:t=>229!=t.keyCode&&"Enter"===t.key&&("Enter"!==t.key||!t.nativeEvent.isComposing&&!s.current)&&(e.submitKey===eL.mQ.AltEnter&&t.altKey||e.submitKey===eL.mQ.CtrlEnter&&t.ctrlKey||e.submitKey===eL.mQ.ShiftEnter&&t.shiftKey||e.submitKey===eL.mQ.MetaEnter&&t.metaKey||e.submitKey===eL.mQ.Enter&&!t.altKey&&!t.ctrlKey&&!t.shiftKey&&!t.metaKey)}}(),g=(0,U.useRef)(null),f=!!g?.current&&1>=Math.abs(g.current.scrollHeight-(g.current.scrollTop+g.current.clientHeight)),x=(0,U.useMemo)(()=>{let e=g.current?.lastElementChild;return!!g?.current&&!!e&&e.getBoundingClientRect().top-g.current.getBoundingClientRect().top<100},[g?.current?.scrollHeight]),v=""!==c,{setAutoScroll:w,scrollDomToBottom:y}=function(e,t=!1,s){let[a,n]=(0,U.useState)(!0),r=(0,U.useCallback)(()=>{let t=e.current;t&&requestAnimationFrame(()=>{n(!0),t.scrollTo(0,t.scrollHeight)})},[e]);(0,U.useEffect)(()=>{a&&!t&&r()});let i=(0,U.useRef)(s.length);return(0,U.useEffect)(()=>{s.length>i.current&&!t&&r(),i.current=s.length},[s.length,t,r]),{scrollRef:e,autoScroll:a,setAutoScroll:n,scrollDomToBottom:r}}(g,(f||x)&&!v,t.messages),[_,k]=(0,U.useState)(!0),j=(0,eD.S0)(),C=(0,eV.s0)(),[b,E]=(0,U.useState)([]),[S,N]=(0,U.useState)(!1),M=(0,eF.f)(),[P,O]=(0,U.useState)([]),Z=(0,z.y1)(e=>{O(M.search(e))},100,{leading:!0,trailing:!0}),[T,A]=(0,U.useState)(2),L=(0,z.y1)(()=>{let e=l.current?(0,eD.lx)(l.current):1;A(Math.min(20,Math.max(2+Number(!j),e)))},100,{leading:!0,trailing:!0});(0,U.useEffect)(L,[c]);let I=(0,eY.UK)({new:()=>e.newSession(),newm:()=>C(e$.y$.NewChat),prev:()=>e.nextSession(-1),next:()=>e.nextSession(1),clear:()=>e.updateTargetSession(t,e=>e.clearContextIndex=e.messages.length),fork:()=>e.forkSession(),del:()=>e.deleteSession(e.currentSessionIndex)}),K=e=>{h(e);let t=e.trim().length;0===t?O([]):e.match(eY.x6)?O(I.search(e)):!a.disablePromptHint&&t<30&&e.startsWith("/")&&Z(e.slice(1))},R=t=>{if(""===t.trim()&&(0,tv.Z)(b))return;let s=I.match(t);if(s.matched){h(""),O([]),s.invoke();return}m(!0),e.onUserInput(t,b).then(()=>m(!1)),E([]),e.setLastInput(t),h(""),O([]),j||l.current?.focus(),w(!0)},F=e=>{eR.L.stop(t.id,e)};(0,U.useEffect)(()=>{e.updateTargetSession(t,e=>{let t=Date.now()-e$.tb;e.messages.forEach(e=>{(e.isError||new Date(e.date).getTime()=0;e-=1)if("user"===t.messages[e].role){a=t.messages[e];break}}else if("user"===s.role){a=s;for(let e=r;em(!1)),l.current?.focus()},G=s=>{e.updateTargetSession(t,e=>e.mask.context.push(s)),(0,eW.CF)(eB.ZP.Chat.Actions.PinToastContent,{text:eB.ZP.Chat.Actions.PinToastAction,onClick:()=>{eE(!0)}})},X=(0,eL._X)(),[q,et]=(0,U.useState)(!1),[ea,er]=(0,U.useState)(!1);async function eh(e){if(q)tL.stop(),et(!1);else{var t;let a;t=new tt.ti(e$.k8.GPT);let n=eL.MG.getState();er(!0),tL.init();let{markdownToTxt:r}=s(34433),i=r(e);if(n.ttsConfig.engine!==e$.Xu){let e=X.edgeVoiceName(),t=new tx;await t.setMetadata(e,D.AUDIO_24KHZ_96KBITRATE_MONO_MP3),a=await t.toArrayBuffer(i)}else a=await t.llm.speech({model:n.ttsConfig.model,input:i,voice:n.ttsConfig.voice,speed:n.ttsConfig.speed});et(!0),tL.play(a,()=>{et(!1)}).catch(e=>{console.error("[OpenAI Speech]",e),(0,eW.CF)((0,eQ.B)(e)),et(!1)}).finally(()=>er(!1))}}let ed=(0,U.useMemo)(()=>t.mask.hideContext?[]:t.mask.context.slice(),[t.mask.context,t.mask.hideContext]);if(0===ed.length&&t.messages.at(0)?.content!==eL.ux.content){let e=Object.assign({},eL.ux);X.isAuthorized()||(e.content=eB.ZP.Error.Unauthorized),ed.push(e)}let eu=(0,U.useMemo)(()=>ed.concat(t.messages).concat(d?[{...(0,eL.tn)({role:"assistant",content:"……"}),preview:!0}]:[]).concat(c.length>0&&a.sendPreviewBubble?[{...(0,eL.tn)({role:"user",content:c}),preview:!0}]:[]),[a.sendPreviewBubble,ed,d,t.messages,c]),[ex,ev]=(0,U.useState)(Math.max(0,eu.length-e$.nS));function ew(e){ev(e=Math.max(0,e=Math.min(eu.length-e$.nS,e)))}let ey=(0,U.useMemo)(()=>{let e=Math.min(ex+3*e$.nS,eu.length);return eu.slice(ex,e)},[ex,eu]),e_=e=>{let t=e.scrollTop+e.clientHeight,s=e.clientHeight,a=e.scrollTop<=s,n=t>=e.scrollHeight-s,r=t>=e.scrollHeight-(j?4:10),i=ex-e$.nS,o=ex+e$.nS;a&&!n?ew(i):n&&ew(o),k(r),w(r)};function ej(){ew(eu.length-e$.nS),y()}let eC=(t.clearContextIndex??-1)>=0?t.clearContextIndex+ed.length-ex:-1,[eb,eE]=(0,U.useState)(!1),eS=(0,U.useMemo)(()=>(0,te.Z)(),[]),eN=!j,eM=!j&&!eS?.isApp;(0,eY.YZ)({fill:h,submit:e=>{R(e)},code:e=>{X.disableFastLink||(console.log("[Command] got code from url: ",e),(0,eW.i0)(eB.ZP.URLCommand.Code+`code = ${e}`).then(t=>{t&&X.update(t=>t.accessCode=e)}))},settings:e=>{if(!X.disableFastLink)try{let t=JSON.parse(e);console.log("[Command] got settings from url: ",t),(t.key||t.url)&&(0,eW.i0)(eB.ZP.URLCommand.Settings+` ${JSON.stringify(t,null,4)}`).then(e=>{e&&(t.key&&X.update(e=>e.openaiApiKey=t.key),t.url&&X.update(e=>e.openaiUrl=t.url),X.update(e=>e.useCustomConfig=!0))})}catch{console.error("[Command] failed to get settings from url: ",e)}}});let[eP,eO]=(0,U.useState)(!1);(0,U.useEffect)(()=>{let e=(0,e$.AI)(t.id),s=tA.getItem(e);s&&0===c.length&&(h(s),tA.removeItem(e));let a=l.current;return()=>{tA.setItem(e,a?.value??"")}},[]);let eZ=(0,U.useCallback)(async t=>{let s=e.currentSession().mask.modelConfig.model;if((0,eD.Xf)(s)){for(let e of(t.clipboardData||window.clipboardData).items)if("file"===e.kind&&e.type.startsWith("image/")){t.preventDefault();let s=e.getAsFile();if(s){let e=[];e.push(...b),e.push(...await new Promise((e,t)=>{N(!0);let a=[];(0,eI.Ix)(s).then(t=>{a.push(t),N(!1),e(a)}).catch(e=>{N(!1),t(e)})}));let t=e.length;t>3&&e.splice(3,t-3),E(e)}}}},[b,e]);async function eT(){let e=[];e.push(...b),e.push(...await new Promise((e,t)=>{let s=document.createElement("input");s.type="file",s.accept="image/png, image/jpeg, image/webp, image/heic, image/heif",s.multiple=!0,s.onchange=s=>{N(!0);let a=s.target.files,n=[];for(let r=0;r{n.push(t),(3===n.length||n.length===a.length)&&(N(!1),e(n))}).catch(e=>{N(!1),t(e)})}},s.click()}));let t=e.length;t>3&&e.splice(3,t-3),E(e)}let[eA,eK]=(0,U.useState)(!1);(0,U.useEffect)(()=>{let s=s=>{if((s.metaKey||s.ctrlKey)&&s.shiftKey&&"o"===s.key.toLowerCase())s.preventDefault(),setTimeout(()=>{e.newSession(),C(e$.y$.Chat)},10);else if(s.shiftKey&&"escape"===s.key.toLowerCase())s.preventDefault(),l.current?.focus();else if((s.metaKey||s.ctrlKey)&&s.shiftKey&&"Semicolon"===s.code){s.preventDefault();let e=document.querySelectorAll(".copy-code-button");e.length>0&&e[e.length-1].click()}else if((s.metaKey||s.ctrlKey)&&s.shiftKey&&"c"===s.key.toLowerCase()){s.preventDefault();let e=ey.filter(e=>"user"!==e.role).pop();if(e){let t=(0,eD.YK)(e);(0,eD.vQ)(t)}}else(s.metaKey||s.ctrlKey)&&"/"===s.key?(s.preventDefault(),eK(!0)):(s.metaKey||s.ctrlKey)&&s.shiftKey&&"backspace"===s.key.toLowerCase()&&(s.preventDefault(),e.updateTargetSession(t,e=>{e.clearContextIndex===e.messages.length?e.clearContextIndex=void 0:(e.clearContextIndex=e.messages.length,e.memoryPrompt="")}))};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s)}},[ey,e,C,t]);let[ez,eq]=(0,U.useState)(!1);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)("div",{className:eU().chat,children:[(0,H.jsxs)("div",{className:"window-header","data-tauri-drag-region":!0,children:[j&&H.jsx("div",{className:"window-actions",children:H.jsx("div",{className:"window-action-button",children:H.jsx(eH.h,{icon:H.jsx(J.Z,{}),bordered:!0,title:eB.ZP.Chat.Actions.ChatList,onClick:()=>C(e$.y$.Home)})})}),(0,H.jsxs)("div",{className:(0,e8.Z)("window-header-title",eU()["chat-body-title"]),children:[H.jsx("div",{className:(0,e8.Z)("window-header-main-title",eU()["chat-body-main-title"]),onClickCapture:()=>eO(!0),children:t.topic?t.topic:eL.HX}),H.jsx("div",{className:"window-header-sub-title",children:eB.ZP.Chat.SubTitle(t.messages.length)})]}),(0,H.jsxs)("div",{className:"window-actions",children:[H.jsx("div",{className:"window-action-button",children:H.jsx(eH.h,{icon:H.jsx(ec.Z,{}),bordered:!0,title:eB.ZP.Chat.Actions.RefreshTitle,onClick:()=>{(0,eW.CF)(eB.ZP.Chat.Actions.RefreshToast),e.summarizeSession(!0,t)}})}),!j&&H.jsx("div",{className:"window-action-button",children:H.jsx(eH.h,{icon:H.jsx(Y,{}),bordered:!0,title:eB.ZP.Chat.EditMessage.Title,aria:eB.ZP.Chat.EditMessage.Title,onClick:()=>eO(!0)})}),H.jsx("div",{className:"window-action-button",children:H.jsx(eH.h,{icon:H.jsx(Q.Z,{}),bordered:!0,title:eB.ZP.Chat.Actions.Export,onClick:()=>{o(!0)}})}),eM&&H.jsx("div",{className:"window-action-button",children:H.jsx(eH.h,{icon:a.tightBorder?H.jsx(el.Z,{}):H.jsx(eo.Z,{}),bordered:!0,title:eB.ZP.Chat.Actions.FullScreen,aria:eB.ZP.Chat.Actions.FullScreen,onClick:()=>{a.update(e=>e.tightBorder=!e.tightBorder)}})})]}),H.jsx(tK,{showToast:!_,showModal:eb,setShowModal:eE})]}),(0,H.jsxs)("div",{className:eU()["chat-main"],children:[(0,H.jsxs)("div",{className:eU()["chat-body-container"],children:[H.jsx("div",{className:eU()["chat-body"],ref:g,onScroll:e=>e_(e.currentTarget),onMouseDown:()=>l.current?.blur(),onTouchStart:()=>{l.current?.blur(),w(!1)},children:ey.map((s,i)=>{let o="user"===s.role,l=i0&&!(s.preview||0===s.content.length)&&!l,d=s.preview||s.streaming;return(0,H.jsxs)(U.Fragment,{children:[H.jsx("div",{className:o?eU()["chat-message-user"]:eU()["chat-message"],children:(0,H.jsxs)("div",{className:eU()["chat-message-container"],children:[(0,H.jsxs)("div",{className:eU()["chat-message-header"],children:[(0,H.jsxs)("div",{className:eU()["chat-message-avatar"],children:[H.jsx("div",{className:eU()["chat-message-edit"],children:H.jsx(eH.h,{icon:H.jsx(Y,{}),aria:eB.ZP.Chat.Actions.Edit,onClick:async()=>{let a=await (0,eW.G5)(eB.ZP.Chat.Actions.Edit,(0,eD.YK)(s),10),n=a,r=(0,eD.Bs)(s);if(r.length>0){n=[{type:"text",text:a}];for(let e=0;e{let t=e.mask.context.concat(e.messages).find(e=>e.id===s.id);t&&(t.content=n)})}})}),o?H.jsx(eG.qE,{avatar:a.avatar}):H.jsx(H.Fragment,{children:["system"].includes(s.role)?H.jsx(eG.qE,{avatar:"2699-fe0f"}):H.jsx(eX.MaskAvatar,{avatar:t.mask.avatar,model:s.model||t.mask.modelConfig.model})})]}),!o&&H.jsx("div",{className:eU()["chat-model-name"],children:s.model}),c&&H.jsx("div",{className:eU()["chat-message-actions"],children:H.jsx("div",{className:eU()["chat-input-actions"],children:s.streaming?H.jsx(tB,{text:eB.ZP.Chat.Actions.Stop,icon:H.jsx(ek.Z,{}),onClick:()=>F(s.id??i)}):(0,H.jsxs)(H.Fragment,{children:[H.jsx(tB,{text:eB.ZP.Chat.Actions.Retry,icon:H.jsx(ec.Z,{}),onClick:()=>V(s)}),H.jsx(tB,{text:eB.ZP.Chat.Actions.Delete,icon:H.jsx(em.Z,{}),onClick:()=>W(s.id??i)}),H.jsx(tB,{text:eB.ZP.Chat.Actions.Pin,icon:H.jsx(ep,{}),onClick:()=>G(s)}),H.jsx(tB,{text:eB.ZP.Chat.Actions.Copy,icon:H.jsx(ee.Z,{}),onClick:()=>(0,eD.vQ)((0,eD.YK)(s))}),a.ttsConfig.enable&&H.jsx(tB,{text:q?eB.ZP.Chat.Actions.StopSpeech:eB.ZP.Chat.Actions.Speech,icon:q?H.jsx(en,{}):H.jsx(es,{}),onClick:()=>eh((0,eD.YK)(s))})]})})})]}),s?.tools?.length==0&&d&&H.jsx("div",{className:eU()["chat-message-status"],children:eB.ZP.Chat.Typing}),s?.tools?.length>0&&H.jsx("div",{className:eU()["chat-message-tools"],children:s?.tools?.map(e=>H.jsxs("div",{title:e?.errorMsg,className:eU()["chat-message-tool"],children:[!1===e.isError?H.jsx(eg.Z,{}):!0===e.isError?H.jsx(ef.Z,{}):H.jsx(ei.Z,{}),H.jsx("span",{children:e?.function?.name})]},e.id))}),(0,H.jsxs)("div",{className:eU()["chat-message-item"],children:[H.jsx(tD,{content:(0,eD.YK)(s),loading:(s.preview||s.streaming)&&0===s.content.length&&!o,onDoubleClickCapture:()=>{j&&h((0,eD.YK)(s))},fontSize:n,fontFamily:r,parentRef:g,defaultShow:i>=ey.length-6},s.streaming?"loading":"done"),1==(0,eD.Bs)(s).length&&H.jsx("img",{className:eU()["chat-message-item-image"],src:(0,eD.Bs)(s)[0],alt:""}),(0,eD.Bs)(s).length>1&&H.jsx("div",{className:eU()["chat-message-item-images"],style:{"--image-count":(0,eD.Bs)(s).length},children:(0,eD.Bs)(s).map((e,t)=>H.jsx("img",{className:eU()["chat-message-item-image-multi"],src:e,alt:""},t))})]}),s?.audio_url&&H.jsx("div",{className:eU()["chat-message-audio"],children:H.jsx("audio",{src:s.audio_url,controls:!0})}),H.jsx("div",{className:eU()["chat-message-action-date"],children:l?eB.ZP.Chat.IsContext:s.date.toLocaleString()})]})}),i===eC-1&&H.jsx(tF,{})]},s.id)})}),(0,H.jsxs)("div",{className:eU()["chat-input-panel"],children:[H.jsx(tR,{prompts:P,onPromptSelect:e=>{setTimeout(()=>{O([]);let t=I.match(e.content);t.matched?(t.invoke(),h("")):h(e.content),l.current?.focus()},30)}}),H.jsx(tH,{uploadImage:eT,setAttachImages:E,setUploading:N,showPromptModal:()=>eE(!0),scrollToBottom:ej,hitBottom:_,uploading:S,showPromptHints:()=>{if(P.length>0){O([]);return}l.current?.focus(),h("/"),Z("")},setShowShortcutKeyModal:eK,setUserInput:h,setShowChatSidePanel:eq}),(0,H.jsxs)("label",{className:(0,e8.Z)(eU()["chat-input-panel-inner"],{[eU()["chat-input-panel-inner-attach"]]:0!==b.length}),htmlFor:"chat-input",children:[H.jsx("textarea",{id:"chat-input",ref:l,className:eU()["chat-input"],placeholder:eB.ZP.Chat.Input(u),onInput:e=>K(e.currentTarget.value),value:c,onKeyDown:t=>{if("ArrowUp"===t.key&&c.length<=0&&!(t.metaKey||t.altKey||t.ctrlKey)){h(e.lastInput??""),t.preventDefault();return}p(t)&&0===P.length&&(R(c),t.preventDefault())},onFocus:ej,onClick:ej,onPaste:eZ,rows:T,autoFocus:eN,style:{fontSize:a.fontSize,fontFamily:a.fontFamily}}),0!=b.length&&H.jsx("div",{className:eU()["attach-images"],children:b.map((e,t)=>H.jsx("div",{className:eU()["attach-image"],style:{backgroundImage:`url("${e}")`},children:H.jsx("div",{className:eU()["attach-image-mask"],children:H.jsx(tU,{deleteImage:()=>{E(b.filter((e,s)=>s!==t))}})})},t))}),H.jsx(eH.h,{icon:H.jsx($,{}),text:eB.ZP.Chat.Send,className:eU()["chat-input-send"],type:"primary",onClick:()=>R(c)})]})]})]}),H.jsx("div",{className:(0,e8.Z)(eU()["chat-side-panel"],{[eU().mobile]:j,[eU()["chat-side-panel-show"]]:ez}),children:ez&&H.jsx(tT,{onClose:()=>{eq(!1)},onStartVoice:async()=>{console.log("start voice")}})})]})]},t.id),i&&H.jsx(ta,{onClose:()=>o(!1)}),eP&&H.jsx(tz,{onClose:()=>{eO(!1)}}),eA&&H.jsx(tW,{onClose:()=>eK(!1)})]})}function t$(){let e=(0,eL.aK)().currentSession();return H.jsx(tV,{},e.id)}},52097:e=>{e.exports={"message-exporter-body":"exporter_message-exporter-body__ieezO","export-content":"exporter_export-content__bLZvx",steps:"exporter_steps__6n3hv","steps-progress":"exporter_steps-progress__BaZCB","steps-progress-inner":"exporter_steps-progress-inner__Bx3Y4","steps-inner":"exporter_steps-inner__EVqvK",step:"exporter_step__WhCEO","step-finished":"exporter_step-finished__eBg9d","step-current":"exporter_step-current__oh5Mc","step-index":"exporter_step-index__bWRYR","step-name":"exporter_step-name__aj81m","preview-actions":"exporter_preview-actions__EdSLJ","image-previewer":"exporter_image-previewer__uKfNQ","preview-body":"exporter_preview-body__qK5Zf","chat-info":"exporter_chat-info__N_j5m",icons:"exporter_icons__7WRoV",logo:"exporter_logo__zu13e","main-title":"exporter_main-title__jjxAd","sub-title":"exporter_sub-title__p1RCl","icon-space":"exporter_icon-space__u_tMK","chat-info-item":"exporter_chat-info-item__3D12j",message:"exporter_message__3aahS",avatar:"exporter_avatar__fGOtt",body:"exporter_body__gcKIl","message-image":"exporter_message-image__ofOeC","message-images":"exporter_message-images__oJoIX","message-image-multi":"exporter_message-image-multi__jzQdX","message-assistant":"exporter_message-assistant__sDmHi","message-user":"exporter_message-user__2t254"}},56270:e=>{e.exports={"message-selector":"message-selector_message-selector__dOKbo","message-filter":"message-selector_message-filter__Q5XSd","search-bar":"message-selector_search-bar__4E5gq",actions:"message-selector_actions__MyZCT",messages:"message-selector_messages__GbOLr",message:"message-selector_message___TaV9","message-selected":"message-selector_message-selected__b3mDv",avatar:"message-selector_avatar__HCJ8t",body:"message-selector_body__rKEIZ",date:"message-selector_date__vc48w",content:"message-selector_content__Z9W8L",checkbox:"message-selector_checkbox__erPyd"}},45136:e=>{e.exports={"realtime-chat":"realtime-chat_realtime-chat__g_U_c","circle-mic":"realtime-chat_circle-mic__SfmZp","icon-center":"realtime-chat_icon-center__3JpXN","bottom-icons":"realtime-chat_bottom-icons__siVHg","icon-left":"realtime-chat_icon-left__O_fpx","icon-right":"realtime-chat_icon-right__3eC9i",mobile:"realtime-chat_mobile__WtJW9",pulse:"realtime-chat_pulse__DSlz2"}},19262:e=>{e.exports={"voice-print":"voice-print_voice-print__GHMDU"}}};