PageSourceSearch

https://51wan.ai/_next/static/chunks/8420-c0cf0f5206aad370.js

js 51wan.ai collected 2026-10-05 13:34:26 UTC 425,392 bytes, 1,877 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4422,8420],{1259:(e,t,r)=>{r.d(t,{H0:()=>f,Tt:()=>u,XV:()=>y,Z3:()=>c,jV:()=>v,y$:()=>b});var n=r(67914),a=r(67768),o=r(40097),s=r(89815),i=r(44147),l=r(56041);r(2009);var d=r(99586);let c={checkIn:{status:()=>s.LX.status},dailyTasks:{list:()=>i.hK.list,withStages:()=>["dailyTasks","withStages"]},points:{balance:()=>l.OR.balance},all:()=>["pointsReward"]};function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,n.I)({queryKey:c.checkIn.status(),queryFn:s.D.getCheckInStatus,staleTime:s.Bo.staleTime,gcTime:s.Bo.cacheTime,refetchOnWindowFocus:!0,retry:2,...e})}let m=null;async function p(e){return m||(m=s.D.checkIn(e).finally(()=>{m=null}))}let h=new Map;async function g(e){let t=h.get(e);if(t)return t;let r=i.NJ.claimStageReward(e).finally(()=>{h.delete(e)});return h.set(e,r),r}function f(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.jE)(),r=(0,d.T)();return(0,o.n)({mutationFn:e=>p(e),onSuccess:(n,a)=>{var o;t.setQueryData(c.checkIn.status(),e=>e?{...e,hasCheckedInToday:!0,currentStreak:n.currentStreak,totalCheckIns:n.totalCheckIns}:void 0),r(n.newBalance,{hasCheckedInToday:!0,lastCheckInSource:"manual"}),null==(o=e.onSuccess)||o.call(e,n,a)},onError:e.onError,onSettled:e.onSettled})}function v(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.jE)(),r=(0,d.T)();return(0,o.n)({mutationFn:s.D.weeklyClaimIn,onSuccess:(n,a)=>{var o;t.invalidateQueries({queryKey:c.checkIn.status()}),r(n.newBalance),null==(o=e.onSuccess)||o.call(e,n,a)},onError:e.onError,onSettled:e.onSettled})}function b(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,n.I)({queryKey:c.dailyTasks.withStages(),queryFn:i.NJ.getDailyTasksWithStages,staleTime:i.Lf.staleTime,gcTime:i.Lf.cacheTime,refetchOnWindowFocus:!0,refetchInterval:e.refetchInterval??i.Lf.refetchInterval,retry:2,...e})}function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.jE)(),r=(0,d.T)();return(0,o.n)({mutationFn:g,onSuccess:(n,a)=>{var o;t.setQueryData(c.dailyTasks.withStages(),e=>e?{...e,tasks:e.tasks.map(e=>({...e,stages:e.stages.map(e=>e.id===a?{...e,isClaimed:!0,canClaim:!1}:e)}))}:void 0),r(n.newBalance),null==(o=e.onSuccess)||o.call(e,n,a)},onError:e.onError,onSettled:e.onSettled})}},5617:(e,t,r)=>{r.d(t,{A:()=>eS});var n=r(37876),a=r(14232),o=r(4903);let s=()=>(0,o.w)();var i=r(17308),l=r(29206);let d=a.memo(e=>{let{rule:t,className:r=""}=e,o=(0,a.useMemo)(()=>(t.assets??[]).map(e=>{let t=function(e){if(!(0,l.Kq)(e))return null;let t=e.trim();return t.startsWith("http://")||t.startsWith("https://")?t:(0,i.C5)(t)}(e.url);return t?{...e,displayUrl:t}:null}).filter(e=>null!==e),[t.assets]);if(0===o.length)return null;let s=o.length>1;return(0,n.jsxs)("div",{className:`rounded-xl bg-white p-3 md:p-4 ${r}`,"data-cg-rule-id":t.id,children:[t.name?(0,n.jsx)("p",{className:"mb-2 text-xs font-medium text-v2-text-secondary truncate",children:t.name}):null,s?(0,n.jsx)("div",{className:"flex gap-2 overflow-x-auto pb-1 snap-x snap-mandatory",children:o.map((e,r)=>(0,n.jsxs)("figure",{className:"snap-start shrink-0 w-[min(72vw,220px)]",children:[(0,n.jsx)("img",{src:e.displayUrl,alt:e.alt??t.name??"CG",loading:"lazy",decoding:"async",referrerPolicy:"no-referrer",className:"w-full rounded-md object-cover max-h-64"}),e.caption?(0,n.jsx)("figcaption",{className:"mt-1 text-[11px] text-v2-text-muted line-clamp-2",children:e.caption}):null]},`${e.displayUrl}-${r}`))}):(0,n.jsxs)("figure",{children:[(0,n.jsx)("img",{src:o[0].displayUrl,alt:o[0].alt??t.name??"CG",loading:"lazy",decoding:"async",referrerPolicy:"no-referrer",className:"w-full max-w-md rounded-md object-contain max-h-80"}),o[0].caption?(0,n.jsx)("figcaption",{className:"mt-1 text-xs text-v2-text-muted",children:o[0].caption}):null]})]})});var c=r(84421),u=r(53940);let m=e=>{let{children:t,className:r=""}=e,o=(0,u.q)(),{theme:i,preferences:l}=s(),d=(0,a.useMemo)(()=>o?{"--html-primary-color":i.colors.primary,"--html-secondary-color":i.colors.secondary,"--html-background-color":i.colors.background,"--html-text-color":i.colors.text,"--html-border-color":i.colors.border,"--html-font-family":i.typography.fontFamily,"--html-font-size":i.typography.fontSize,"--html-line-height":i.typography.lineHeight}:{"--html-primary-color":"#3b82f6","--html-secondary-color":"#64748b","--html-background-color":"#ffffff","--html-text-color":"#1f2937","--html-border-color":"#e5e7eb","--html-font-family":'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',"--html-font-size":"14px","--html-line-height":"1.6"},[o,i]),c=(0,a.useMemo)(()=>{let e=["html-theme-integration"];return o?(e.push(`html-theme-${i.name}`),e.push(`html-security-${l.securityLevel}`),e.push(`html-performance-${l.performanceMode}`),l.enableHTMLRendering?e.push("html-rendering-enabled"):e.push("html-rendering-disabled")):(e.push("html-theme-light"),e.push("html-security-standard"),e.push("html-performance-balanced"),e.push("html-rendering-enabled")),e.join(" ")},[o,i.name,l.securityLevel,l.performanceMode,l.enableHTMLRendering]);return(0,n.jsx)("div",{className:`${c} ${r}`,style:d,suppressHydrationWarning:!0,children:t})};var p=r(85106),h=r(18683),g=r(52396),f=r(24909),v=r(19031),b=r(87358),y=r(40339),x=r(37354),w=r(97445);let k=e=>{let{title:t,children:r,defaultExpanded:o=!1,isStreaming:s=!1,className:i=""}=e,{t:l}=(0,w.Bd)("common"),[d,c]=(0,a.useState)(o),u=(0,a.useRef)(null),[m,p]=(0,a.useState)(void 0),h=(0,a.useCallback)(()=>{u.current&&p(u.current.scrollHeight)},[]);return(0,a.useEffect)(()=>{h()},[r,h]),(0,a.useEffect)(()=>
1{if(!u.current||"u"<typeof ResizeObserver)return;let e=new ResizeObserver(()=>{h()});return e.observe(u.current),()=>{e.disconnect()}},[h]),(0,n.jsxs)("div",{className:`collapsible-block ${i}`,children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{c(!d)},className:"collapsible-block-header","aria-expanded":d,"aria-controls":"collapsible-content",children:[(0,n.jsx)("span",{className:"collapsible-block-title",children:t}),s&&(0,n.jsx)("span",{className:"shrink-0 w-4 h-4 border-2 border-gray-300 border-t-blue-500 rounded-full animate-spin","aria-label":l("sharedUi.aiGenerating")}),(0,n.jsx)("span",{className:`collapsible-block-icon ${d?"expanded":""}`,children:(0,n.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 0 1 0-.708z"})})})]}),(0,n.jsx)("div",{id:"collapsible-content",className:`collapsible-block-content ${d?"expanded":""}`,style:{maxHeight:d?m??"none":0,overflow:"hidden",visibility:d?"visible":"hidden",opacity:+!!d},"aria-hidden":!d,children:(0,n.jsx)("div",{ref:u,className:"collapsible-block-inner",children:r})})]})},S=e=>{let t;if(t=e,!/[((]点击展开[))//折叠]*[))]/.test(t))return[{type:"html",content:e}];let r=[],n=e.split("\n"),a=null,o=[],s=!1,i=!1,l=!1,d=!1;for(let e=0;e<n.length;e++){let t=n[e];/^```/.test(t.trim())&&(i?(i=!1,s&&(l=!0)):(i=!0,s&&(d=!0)));let c=/[((]点击展开[))//折叠]*[))]/;if(!i&&c.test(t)){if((null==a?void 0:a.type)==="html"&&a.content.trim()&&r.push(a),s&&o.length>0){let e=r[r.length-1];(null==e?void 0:e.type)==="collapsible"&&(e.content=o.join("\n"))}s=!0,o=[],l=!1,d=!1,r.push({type:"collapsible",title:t.replace(/[((]点击展开[))//折叠]*[))]/g,"").trim(),content:""}),a=null}else if(s)if(l&&!i){o.push(t);let e=r[r.length-1];(null==e?void 0:e.type)==="collapsible"&&(e.content=o.join("\n")),s=!1,o=[],l=!1,d=!1,a=null}else if(i||d||""!==t.trim()||!(o.length>0))o.push(t);else{let e=r[r.length-1];(null==e?void 0:e.type)==="collapsible"&&(e.content=o.join("\n")),s=!1,o=[],l=!1,d=!1,a={type:"html",content:""}}else a??={type:"html",content:""},a.content+=(a.content?"\n":"")+t}if(s&&o.length>0){let e=r[r.length-1];(null==e?void 0:e.type)==="collapsible"&&(e.content=o.join("\n"))}return(null==a?void 0:a.content.trim())&&r.push(a),r},C=e=>{let{content:t,className:o="",autoConvertMarkdown:s=!0,markdownEngine:i="react-markdown",isStreaming:l=!1,onOptionsRendered:d,onOptionSelect:c,onFillInput:u,isLatestAiMessage:m=!1}=e,{t:C}=(0,w.Bd)("common"),[I,j]=a.useState(!1),M=a.useRef(null),N=a.useRef("");a.useEffect(()=>{j(!0)},[]);let E=y.h4,_=a.useCallback(e=>{if(!e)return"";let t=(0,f.B)((0,g.W)(e,l));return s&&"react-markdown"!==i?t=(0,h.uY)(t):s||(t=(0,x.e1)(((e,t)=>{try{return r(2846).sanitize(e,t)}catch(t){return console.error("[SafeHtmlRenderer] DOMPurify error:",t),e}})((0,h.x_)(t),E))),t},[s,i,l,d]),T=a.useCallback(e=>{if(!c)return;let t=e.getAttribute("data-option"),r=e.querySelector(".option-content"),n=(null==r?void 0:r.textContent)??"";t&&c(t,n)},[c]),P=a.useCallback(e=>{let t=e.target,r=t.closest(".option-button");if(r){e.preventDefault(),e.stopPropagation(),T(r);return}if(!u||!m)return;let n=(0,v.Ax)(t,{clientX:e.clientX,clientY:e.clientY});n&&(e.preventDefault(),e.stopPropagation(),u((0,v.mz)(n)))},[T,u,m]),R=a.useCallback(e=>{(0,b.Q)(e)},[]),A=a.useCallback(e=>{if("Enter"!==e.key&&" "!==e.key)return;let t=e.target.closest(".option-button");t&&(e.preventDefault(),e.stopPropagation(),T(t))},[T]),L=a.useMemo(()=>{let e;return!(!t||/<details/i.test(t))&&(e=t,!!/[((]点击展开[))//折叠]*[))]/.test(e))},[t]),O=a.useMemo(()=>t&&I?_(t):"",[t,I,_]),F=a.useMemo(()=>!l&&!!I&&("react-markdown"===i&&s?(0,v.DG)(t):(0,v.DG)(O)),[l,I,i,s,t,O]);a.useEffect(()=>{d&&d(F)},[d,F]),a.useEffect(()=>{N.current=O},[O]),a.useEffect(()=>{M.current&&(0,v.PN)(M.current,!!(u&&m&&!l))},[t,O,u,m,l,I]);let $=a.useCallback((e,t)=>{c&&m&&c(e,t)},[c,m]),D=a.useMemo(()=>{if(!t||!I)return null;
1if("react-markdown"===i&&s){if(!L)return(0,n.jsx)("div",{ref:M,className:`safe-html-content ${o}`.trim(),onClick:P,onKeyDown:A,role:"region","aria-label":C("sharedUi.messageContent"),children:(0,n.jsx)(p.A,{content:t,onOptionSelect:$,isLatestMessage:m,isStreaming:l})});let e=S(t);return(0,n.jsx)("div",{className:`safe-html-content ${o}`.trim(),onClick:P,onKeyDown:A,role:"region","aria-label":C("sharedUi.messageContent"),children:e.map((e,t)=>"collapsible"===e.type?(0,n.jsx)(k,{title:e.title||C("sharedUi.expandCollapse"),defaultExpanded:!1,isStreaming:l,children:(0,n.jsx)(p.A,{content:e.content,onOptionSelect:$,isLatestMessage:m,isStreaming:l})},t):(0,n.jsx)(p.A,{content:e.content,onOptionSelect:$,isLatestMessage:m,isStreaming:l},t))})}if(!L)return(0,n.jsx)("div",{ref:M,className:`safe-html-content ${o}`.trim(),onClickCapture:R,onClick:P,onKeyDown:A,role:"region","aria-label":C("sharedUi.messageContent"),dangerouslySetInnerHTML:{__html:O}});let e=S(t);return(0,n.jsx)("div",{className:`safe-html-content ${o}`.trim(),onClickCapture:R,onClick:P,onKeyDown:A,role:"region","aria-label":C("sharedUi.messageContent"),children:e.map((e,t)=>"collapsible"===e.type?(0,n.jsx)(k,{title:e.title||C("sharedUi.expandCollapse"),defaultExpanded:!1,isStreaming:l,children:(0,n.jsx)("div",{dangerouslySetInnerHTML:{__html:_(e.content)}})},t):(0,n.jsx)("div",{dangerouslySetInnerHTML:{__html:_(e.content)}},t))})},[t,I,o,L,O,_,P,R,A,i,s,$,m,l,C]);return I?(0,n.jsx)(n.Fragment,{children:D}):(0,n.jsx)("div",{className:`safe-html-content ${o}`.trim()})};var I=r(12227),j=r(3629);let M=I.A,N=e=>{let{content:t,className:r="",autoConvertMarkdown:o=!0,onOptionsRendered:s,onOptionSelect:i,onFillInput:l,isStreaming:d=!1,isLatestAiMessage:c=!1}=e,u=(0,a.useRef)(null),m=(0,a.useRef)(i),w=(0,a.useRef)(l),S=(0,a.useRef)(c),C=(0,a.useRef)("");(0,a.useEffect)(()=>{m.current=i},[i]),(0,a.useEffect)(()=>{w.current=l},[l]),(0,a.useEffect)(()=>{S.current=c},[c]),(0,a.useEffect)(()=>{u.current&&(0,v.PN)(u.current,!!(l&&c&&!d))},[t,l,c,d]);let I=(0,a.useCallback)(async(e,t)=>{e.preventDefault(),e.stopPropagation(),await (0,j.Vy)(t)},[]),N=(0,a.useCallback)(async(e,t)=>{e.preventDefault(),e.stopPropagation(),await (0,j.i0)(t)},[]),E=(0,a.useCallback)(e=>{if(!m.current||!S.current)return;let t=e.getAttribute("data-option"),r=e.querySelector(".option-content"),n=(null==r?void 0:r.textContent)??"";t&&m.current(t,n)},[]),_=(0,a.useCallback)(e=>{if(!m.current||!S.current)return;let t=(e.textContent??"").trim().match(/^([A-Za-z0-9])[..、::)\)]\s*(.+)$/s);if(t){let e=t[1].toUpperCase(),r=t[2].trim();m.current(e,r)}},[]),T=(0,a.useCallback)(e=>{let t=e.closest(".collapsible-status-block");t&&t.classList.toggle("collapsed")},[]),P=(0,a.useCallback)(e=>{(0,b.Q)(e)},[]),R=(0,a.useCallback)(e=>{let t=e.target,r=t.closest("[data-tooltip-id]");if(r)return void I(e,r);let n=t.closest(".code-copy-btn");if(n)return void N(e,n);let a=t.closest(".option-button");if(a)return void E(a);if(S.current&&w.current){let r=(0,v.Ax)(t,{clientX:e.clientX,clientY:e.clientY});if(r)return void w.current((0,v.mz)(r))}if(!S.current){let e=t.closest(".status-block-header");e&&T(e);return}let o=t.closest('[style*="cursor"][style*="pointer"]')||t.closest('[class*="cursor-pointer"]');if(o){let e=(o.textContent??"").trim();if(/^[A-Za-z0-9][..、::)\)]/.test(e)&&e.length<300)return void _(o)}let s=t,i=0;for(;s&&s!==e.currentTarget&&i<5;){let e=(s.textContent??"").trim();if(/^[A-Za-z0-9][..、::)\)]\s*.+/.test(e)&&e.length>=10&&e.length<300&&"A"!==s.tagName&&"pointer"===window.getComputedStyle(s).cursor)return void _(s);s=s.parentElement,i++}let l=t.closest(".status-block-header");l&&T(l)},[I,N,E,_,T]),A=(0,a.useCallback)(e=>{if("Enter"!==e.key&&" "!==e.key)return;let t=e.target,r=t.closest(".option-button");if(r){e.preventDefault(),E(r);return}let n=t.closest(".status-block-header");n&&(e.preventDefault(),T(n))},[E,T]);(0,a.useEffect)(()=>{if(d)return;let e="function"==typeof cancelIdleCallback?cancelIdleCallback:cancelAnimationFrame,t=("function"==typeof requestIdleCallback?requestIdleCallback:requestAnimationFrame)(()=>{let e;
1(e=u.current)&&e.querySelectorAll("pre").forEach(e=>{var t;if(e.hasAttribute("data-transformed"))return;let r=e.querySelector(":scope > code");if(!r)return;let n=null==(t=r.className)?void 0:t.match(/language-(\w+)/),a=n?n[1]:"",o=document.createElement("div"),s=document.createElement("div");s.className="flex justify-between h-8 items-center p-1 pl-3 border-b",s.style.borderColor="rgba(0, 0, 0, 0.05)";let i=document.createElement("div");i.className="text-[13px] text-gray-500 font-normal",i.textContent=a||"code",s.appendChild(i);let l=document.createElement("div");l.style.display="flex";let d=document.createElement("span");d.style.display="none",l.appendChild(d);let c=document.createElement("div");c.className="box-border p-0.5 flex items-center justify-center rounded-md bg-white cursor-pointer",c.setAttribute("data-tooltip-id",`copy-tooltip-${Math.random().toString(36).slice(2,8)}`);let u=document.createElement("div");u.className="w-6 h-6 rounded-md hover:bg-gray-50 not-toggle style_copyIcon__GJL9e",c.appendChild(u),l.appendChild(c),s.appendChild(l);let m=document.createElement("div");m.setAttribute("node","[object Object]");let p=window.innerWidth<768?"8px":"12px";m.style.cssText=`display: block; overflow-x: hidden; white-space: pre-wrap; word-break: break-word; overflow-wrap: anywhere; background: rgb(255, 255, 255); color: rgb(105, 93, 105); padding: ${p};`,m.appendChild(r.cloneNode(!0)),o.appendChild(s),o.appendChild(m),e.innerHTML="",e.appendChild(o),e.setAttribute("data-transformed","true")})});return()=>{e(t)}},[t,d]),(0,a.useEffect)(()=>{if(s&&!d&&t){let e=u.current;e&&s(e.querySelectorAll(".option-button").length>=3)}C.current=t},[s,d,t]);let L=(0,a.useCallback)((e,t)=>{m.current&&S.current&&m.current(e,t)},[]),O=(0,a.useMemo)(()=>{let e;return!(!t||!o||/<details/i.test(t))&&(e=t,!!/[((]点击展开[))//折叠]*[))]/.test(e))},[t,o]),F=(0,a.useMemo)(()=>{if(!O)return null;let e=[];return(e=>{let t,r=[],n=/<details[^>]*>([\s\S]*?)<\/details>/gi,a=0;for(;null!==(t=n.exec(e));){if(t.index>a){let n=e.slice(a,t.index).trim();n&&r.push({type:"html",content:n})}let n=t[1],o=/<summary[^>]*>([\s\S]*?)<\/summary>/i.exec(n),s="",i=n;o&&(s=o[1].replace(/<[^>]+>/g,"").trim(),i=n.replace(/<summary[^>]*>[\s\S]*?<\/summary>/i,"").trim()),r.push({type:"collapsible",title:s,content:i}),a=t.index+t[0].length}if(a<e.length){let t=e.slice(a).trim();t&&r.push({type:"html",content:t})}return r.length>0?r:[{type:"html",content:e}]})(t.replace(/<details\s+class\s*=\s*["'][^"']*panel[^"']*["'][^>]*>[\s\S]*?<\/details>/gi,t=>(e.push(t),`__PANEL_PLACEHOLDER_${e.length-1}__`))).map(t=>({...t,content:t.content.replace(/__PANEL_PLACEHOLDER_(\d+)__/g,(t,r)=>e[parseInt(r)])}))},[t,O]);if(!o){let e=(0,h.x_)((0,f.B)((0,g.W)(t,d))),a=M?(0,x.e1)(M.sanitize(e,y.GL)):"";return(0,n.jsx)("div",{ref:u,className:`markdown-body ${r}`.trim(),onClickCapture:P,onClick:R,onKeyDown:A,dangerouslySetInnerHTML:{__html:a}})}return F&&F.length>1?(0,n.jsx)("div",{ref:u,onClick:R,onKeyDown:A,children:F.map((e,t)=>"collapsible"===e.type?(0,n.jsx)(k,{title:e.title??"展开/折叠",defaultExpanded:!1,isStreaming:d,children:(0,n.jsx)(p.A,{content:e.content,className:r,onOptionSelect:L,isLatestMessage:c,isStreaming:d})},t):(0,n.jsx)(p.A,{content:e.content,className:r,onOptionSelect:L,isLatestMessage:c,isStreaming:d},t))}):(0,n.jsx)("div",{ref:u,onClick:R,onKeyDown:A,children:(0,n.jsx)(p.A,{content:t,className:r,onOptionSelect:L,isLatestMessage:c,isStreaming:d})})};var E=r(97685),_=r(95906);let T=a.memo(e=>{let{modelName:t,inputPoints:r,outputPoints:o,pendingSummaryPoints:s,isAbnormal:i=!1}=e,{t:l}=(0,w.Bd)("chat"),[d,c]=(0,a.useState)(!1),u=(0,a.useRef)(null),m=("number"==typeof r?r:0)+("number"==typeof s?s:0),p=m>0,h=(m+o).toFixed(2),g=m.toFixed(2),f=o.toFixed(2),v=i&&m+o===0,b=(0,a.useCallback)(()=>c(!1),[]);(0,a.useEffect)(()=>{if(!d)return;let e=e=>{u.current&&!u.current.contains(e.target)&&b()};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e,{passive:!0}),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}},[d,b]);let y=(0,a.useCallback)(e=>{e.stopPropagation(),c(e=>!e)},[]);return(0,n.jsxs)("div",{ref:u,className:"mt-1 text-[10px] leading-tight sm:text-[11px]",role:"region","aria-label":l("module.points
1Info.region"),children:[(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)("span",{className:"text-orange-600 whitespace-nowrap",children:l("module.pointsInfo.totalCost",{points:h})}),v?(0,n.jsx)("span",{className:"text-v2-text-tertiary whitespace-nowrap",children:l("module.pointsInfo.abnormalNoCharge")}):null,(0,n.jsx)("button",{type:"button",onClick:y,className:"inline-flex shrink-0 items-center justify-center rounded-full text-v2-text-tertiary hover:text-v2-text-secondary focus:outline-none focus-visible:ring-2 focus-visible:ring-v2-border-focus","aria-label":l("module.pointsInfo.tipAria"),"aria-expanded":d,title:l("module.pointsInfo.tipAria"),children:(0,n.jsx)(_.A,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5"})})]}),d?(0,n.jsx)("div",{className:"mt-1 max-w-full rounded-md border border-v2-border-primary bg-v2-bg-card px-2 py-1.5 text-v2-text-primary shadow-sm",role:"tooltip",children:(0,n.jsxs)("ul",{className:"flex flex-col gap-0.5 break-all",children:[t?(0,n.jsx)("li",{children:l("module.pointsInfo.tipModel",{modelName:t})}
1):null,p?(0,n.jsx)("li",{children:l("module.pointsInfo.tipInput",{points:g})}):null,(0,n.jsx)("li",{children:l("module.pointsInfo.tipOutput",{points:f})})]})}):null]})},(e,t)=>e.modelName===t.modelName&&e.inputTokens===t.inputTokens&&e.outputTokens===t.outputTokens&&e.inputPoints===t.inputPoints&&e.outputPoints===t.outputPoints&&e.pendingSummaryPoints===t.pendingSummaryPoints&&e.isAbnormal===t.isAbnormal);var P=r(73304),R=r(55103);let A="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary transition-[color,opacity] duration-150 hover:opacity-80 active:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-v2-border-focus touch-manipulation gap-0.5 sm:gap-1 shrink-0 ",L="inline text-[10px] leading-none sm:text-[13px]",O="inline-block flex-shrink-0 w-[1em] h-[1em] align-middle fill-current text-[12px] sm:text-base",F=a.memo(e=>{let{messageId:t,isAIMessage:r,onCopy:o,onRefresh:s,onGenerateImage:i,onSystemSpeech:l,onOpenFishSpeech:d,isSpeaking:c=!1,onEdit:u,onDelete:m,onBranchOrShare:p}=e,{t:h}=(0,w.Bd)("chat"),g=(0,a.useCallback)(()=>{s&&s(t)},[t,s]),f=(0,a.useCallback)(()=>{null==o||o()},[o]),v=(0,a.useCallback)(()=>{i&&i(t)},[t,i]),b=(0,a.useCallback)(()=>{null==u||u()},[u]),y=(0,a.useCallback)(()=>{null==m||m(t)},[t,m]),x=(0,a.useCallback)((e,t)=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),t())},[]),k={borderRadius:"6px"};return(0,n.jsxs)("div",{className:`MuiStack-root mt-1.5 flex min-w-0 max-w-full flex-wrap items-center gap-x-2.5 gap-y-2 px-0.5 sm:mt-2 sm:gap-x-5 sm:px-0${r?"":" justify-end"}`,role:"toolbar","aria-label":h("module.messageFooter.toolbar"),children:[o&&(0,n.jsxs)("button",{type:"button",onClick:f,onKeyDown:e=>x(e,f),className:A,style:k,"aria-label":h("module.messageFooter.copyAria"),title:h("module.messageFooter.copy"),tabIndex:0,children:[(0,n.jsx)(R.Td,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.copy")})]}),r&&s&&(0,n.jsxs)("button",{type:"button",onClick:g,onKeyDown:e=>x(e,g),className:A,style:k,"aria-label":h("module.messageFooter.refreshAria"),title:h("module.messageFooter.refreshAria"),tabIndex:0,children:[(0,n.jsx)(R.fN,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.refresh")})]}),r&&(i||d||l)&&(0,n.jsxs)("div",{className:"order-last flex w-full flex-wrap items-center gap-x-2.5 gap-y-2 sm:contents",children:[i&&(0,n.jsxs)("button",{type:"button",onClick:v,onKeyDown:e=>x(e,v),className:A,style:k,"aria-label":h("module.messageFooter.generateImageAria"),title:h("module.messageFooter.generateImage"),tabIndex:0,children:[(0,n.jsx)(P.A,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.generateImage")})]}),(d||l)&&(c?(0,n.jsxs)("button",{type:"button",onClick:l,className:`${A} text-v2-accent-primary`,style:k,"aria-label":h("module.messageFooter.stopReadingAria"),title:h("module.messageFooter.stopReading"),tabIndex:0,children:[(0,n.jsx)(R.jA,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.stopReading")})]}):(0,n.jsxs)("button",{type:"button",onClick:d||l,className:A,style:k,"aria-label":h("module.messageFooter.readAloudAria"),title:h("module.messageFooter.readAloud"),tabIndex:0,children:[(0,n.jsx)(R.pD,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.readAloud")})]}))]}),u&&(0,n.jsxs)("button",{type:"button",onClick:b,onKeyDown:e=>x(e,b),className:A,style:k,"aria-label":h("module.messageFooter.editAria"),title:h("module.messageFooter.edit"),tabIndex:0,children:[(0,n.jsx)(R.qU,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.edit")})]}),m&&(0,n.jsxs)("button",{type:"button",onClick:y,onKeyDown:e=>x(e,y),className:A,style:k,"aria-label":h("module.messageFooter.deleteAria"),title:h("module.messageFooter.delete"),tabIndex:0,children:[(0,n.jsx)(R.d7,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.delete")})]}),p&&(0,n.jsxs)("button",{type:"button",onClick:p,onKeyDown:e=>x(e,p),className:A,style:k,"aria-label":h("module.messageFooter.branchShareAria"),title:h("module.messageFooter.branchShare"),tabIndex:0,children:[(0,n.jsx)(R.tS,{className:O}),(0,n.jsx)("span",{className:L,children:h("module.messageFooter.branchShare")})]})]})},(e,t)=>e.messageId===t.messageId&&e.isAIMessage===t.isAIMessage&&e.onCopy===t.onCopy&&e.onRefresh===t.onRefresh&&e.onGenerateImage===t.onGenerateImage&&e.onSystemSpeech===t.onSystemSpeech&&e.onOpenFishSpeech===t.onOpenFishSpeech&&e.isSpeaking===t.isSpeaking&&e.onEdit===t.onEdit&&e.onDelete===t.onDelete&&e.onBranchOrShare===t.onBranchOrShare);var $=r(98477),D=r(65685);function B(e){let t=document.createElement("textarea");return t.innerHTML=e,t.value}let q=e=>{let{open:t,originalText:r,onClose:o,onSave:s}=e,{t:i}=(0,w.Bd)("chat"),[l,d]=(0,a.useState)(B(r));(0,a.useEffect)(()=>{d(B(r))},[r]),(0,a.useEffect)(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t]);let c=(0,a.useCallback)(()=>{let e=l.trim();e?(s(e),o()):E.default.error(i("module.messageEmpty"))},[l,s,o,i]),u=(0,a.useCallback)(()=>{o()},[o]);if((0,a.useEffect)(()=>{let e=e=>{t&&("Escape"===e.key&&(e.preventDefault(),u()),(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&(e.preventDefault(),c()))};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,u,c]),!t)return null;let m=(0,n.jsxs)("div",{className:"fixed inset-0 flex items-center justify-center p-4 sm:p-6",style:{display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},children:[(0,n.jsx)("div",{className:"absolute inset-0 chat-modal-overlay",style:{backgroundColor:"var(--v2-bg-overlay)"},onClick:u}),(0,n.jsxs)("div",{className:"chat-modal-panel relative shadow-2xl rounded-xl w-full max-w-4xl h-[70vh] flex flex-col m-auto",style:{backgroundColor:"var(--v2-bg-card)"},role:"dialog","aria-labelledby":"message-edit-dialog-title","aria-modal":"true",children:[(0,n.jsxs)("div",{id:"message-edit-dialog-title",className:"flex justify-between items-center px-4 py-3 border-b border-v2-border-primary",children:[(0,n.jsx)("h2",{className:"font-medium text-v2-text-primary",children:i("module.editMessage")}),(0,n.jsx)("button",{"aria-label":i("module.closeDialog"),onClick:u,className:"p-1 text-v2-text-tertiary hover:text-v2-text-primary hover:bg-v2-bg-hover rounded transition-colors",children:(0,n.jsx)(D.A,{className:"w-5 h-5"})})]}),(0,n.jsx)("div",{className:"flex-1 p-4 overflow-auto",children:(0,n.jsx)("textarea",{value:l,onCh
1ange:e=>d(e.target.value),placeholder:i("module.messagePlaceholder"),className:"w-full h-full px-4 py-3 text-sm text-v2-text-primary bg-v2-bg-secondary border border-v2-border-primary rounded-lg outline-none resize-none hover:border-v2-border-secondary focus:border-v2-accent-primary focus:ring-2 focus:ring-v2-accent-primary/20 placeholder:text-v2-text-tertiary",style:{WebkitUserSelect:"text",userSelect:"text"}})}),(0,n.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-t border-v2-border-primary",children:[(0,n.jsx)("p",{className:"hidden sm:block text-xs text-v2-text-tertiary",children:i("module.editShortcut")}),(0,n.jsxs)("div",{className:"flex gap-3 w-full sm:w-auto justify-center sm:justify-end",children:[(0,n.jsx)("button",{onClick:u,className:"min-w-[80px] px-4 py-2 text-sm text-v2-text-primary border border-v2-border-primary rounded-lg hover:bg-v2-bg-hover transition-colors",children:i("module.cancel")}),(0,n.jsx)("button",{onClick:c,className:"min-w-[80px] px-4 py-2 text-sm text-white bg-v2-gradient-primary hover:bg-v2-gradient-primary-hover shadow-v2-gradient rounded-lg transition-v2-interactive",children:i("module.save")})]})]})]})]});return"u"<typeof document?null:(0,$.createPortal)(m,document.body)};var H=r(69257),z=r(73647),U=r(42194),W=r(48227),K=r(35222);let V=a.memo(e=>{let{message:t,onRefresh:r,onEdit:o,onDelete:s,onBranchOrShare:i,showBranchShare:l=!1,onGenerateImage:d,onOpenFishSpeech:u,archivedBefore:m=null}=e,{t:p,i18n:h}=(0,w.Bd)("chat"),g=(0,c.useUserStore)(e=>e.user),f=(0,H.$)(m,t),[v,b]=(0,a.useState)(!1),[y,x]=(0,a.useState)(!1),k=(0,a.useSyncExternalStore)(K.i8,K.Li,()=>null),S=null!==k&&(k===String(t.id)||!!t.dbMessageId&&k===String(t.dbMessageId)),C=(0,a.useCallback)(()=>{let e=t.text??t.content??"";(0,K.mV)({messageId:t.dbMessageId||t.id,rawText:"string"==typeof e?e:JSON.stringify(e),lang:(null==h?void 0:h.language)||"zh-CN",emptyTip:p("module.messageFooter.speechEmptyTip","该消息无有效台词可朗读"),unsupportedTip:p("module.messageFooter.speechUnsupportedTip","当前浏览器不支持文字转语音")})},[null==h?void 0:h.language,t.content,t.dbMessageId,t.id,t.text,p]),I=(0,a.useCallback)(()=>{null==u||u(t.id)},[t.id,u]),M=(0,a.useCallback)(()=>{E.default.error(p("module.messageArchivedTip"))},[p]),N=(0,a.useCallback)(e=>{f?M():null==r||r(e)},[f,r,M]),_=(0,a.useCallback)(()=>{let e=(t.text??t.content??"").trim();(0,j.lW)(e).then(e=>{e?E.default.success(p("module.messageFooter.copySuccess")):E.default.error(p("module.messageFooter.copyFailed"))})},[t.content,t.text,p]),P=(0,a.useCallback)(()=>{f?M():b(!0)},[f,M]),R=(0,a.useCallback)(()=>{b(!1)},[]),A=(0,a.useCallback)(async e=>{o&&await o(t.id,e)},[t.id,o]),L=(0,a.useCallback)(e=>{f?M():null==s||s(e)},[f,s,M]),{data:O=[]}=(0,z.k)(),$=(0,a.useMemo)(()=>(0,U.p)({modelId:t.modelId,modelName:t.modelName,models:O}),[O,t.modelId,t.modelName]),D=t.text??t.content??"",B="user"!==t.sender&&"user"!==t.role,V=!!t.isStreaming||"connecting"===t.streamingStatus||"receiving"===t.streamingStatus,G=((null==g?void 0:g.totalRecharged)??0)>0||(null==g?void 0:g.hasPaidMembershipCard)===!0,Q=(0,a.useSyncExternalStore)(W.Yo,W.v2,W.v2),Y="ready"===Q.status&&Q.remaining>0&&(void 0===t.freeRecoveryRemaining||t.freeRecoveryRemaining>0),X=B&&!0===t.isTruncated&&G&&!!t.dbMessageId&&!!r&&!y&&Y;(0,a.useEffect)(()=>{"number"==typeof t.freeRecoveryRemaining&&(0,W.qP)(t.freeRecoveryRemaining)},[t.freeRecoveryRemaining]);let J=(0,a.useCallback)(()=>{if(!r||f){f&&M();return}r(t.id,{freeRecovery:!0})},[f,t.id,r,M]);if(t.isSystemMessage)return null;let Z="number"==typeof t.outputPoints,ee=("number"==typeof t.inputPoints?t.inputPoints:0)+("number"==typeof t.pendingSummaryPoints?t.pendingSummaryPoints:0)+("number"==typeof t.outputPoints?t.outputPoints:0),et=!0===t.isResponseAbnormal&&0===ee,er=B&&!t.isError&&!V&&Z&&(t.outputPoints>0||et);return!B||Z||t.isError||V||t.isOpeningStatement||console.warn("⚠️ AI 消息缺少积分信息:",{messageId:t.id,hasModelName:!!t.modelName,hasInputPoints:"number"==typeof t.inputPoints,hasOutputPoints:"number"==typeof t.outputPoints,outputPoints:t.outputPoints,hasInputTokens:"number"==typeof t.inputTokens,hasOutputTokens:"number"==typeof t.outputTokens}),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"min-w-0 max-w-full","data-chat-msg-actions":"",role:"complementary","aria-label":B?p("module.messageFooter.aiFooter"):p("module.messageFooter.userFooter"),children:[X&&(0,n.jsxs)("div",{className:"mb-2 flex max-w-full items-center gap-2 rounded-xl border border-v2-border-primary bg-v2-bg-secondary px-3 py-2 text-xs text-v2-text-secondary shadow-sm",children:[(0,n.jsx)("span",{className:"min-w-0 flex-1",children:p("module.truncatedRecoveryTitle")}),(0,n.jsx)("button",{type:"button",onClick:J,className:"shrink-0 font-medium text-v2-accent-primary hover:underline",children:p("module.truncatedRecoveryRefresh")}),(0,n.jsx)("span",{className:"hidden sm:inline",children:p("module.truncatedRecoveryHint")}),(0,n.jsx)("button",{type:"button",onClick:()=>x(!0),className:"shrink-0 text-v2-text-tertiary hover:text-v2-text-primary","aria-label":p("module.truncatedRecoveryClose"),children:"\xd7"})]}),er&&(0,n.jsx)(T,{modelName:$,inputTokens:t.inputTokens,outputTokens:t.outputTokens,inputPoints:t.inputPoints,outputPoints:t.outputPoints,pendingSummaryPoints:t.pendingSummaryPoints,isAb
1normal:t.isResponseAbnormal}),(0,n.jsx)(F,{messageId:t.id,isAIMessage:B,onCopy:_,onRefresh:B&&r&&!t.isOpeningStatement?N:void 0,onGenerateImage:B?d:void 0,onSystemSpeech:C,onOpenFishSpeech:u?I:void 0,isSpeaking:S,onEdit:o?P:void 0,onDelete:s?L:void 0,onBranchOrShare:l?i:void 0})]}),o&&(0,n.jsx)(q,{open:v,originalText:t.sourceText??D,onClose:R,onSave:A})]})},(e,t)=>{var r,n;let a=e.message.id===t.message.id&&e.message.text===t.message.text&&e.message.content===t.message.content&&e.message.sourceText===t.message.sourceText&&e.message.sender===t.message.sender&&e.message.role===t.message.role&&e.message.isStreaming===t.message.isStreaming&&e.message.streamingStatus===t.message.streamingStatus&&e.message.isError===t.message.isError&&e.message.isResponseAbnormal===t.message.isResponseAbnormal&&e.message.isTruncated===t.message.isTruncated&&e.message.freeRecoveryRemaining===t.message.freeRecoveryRemaining&&e.message.isSystemMessage===t.message.isSystemMessage&&e.message.modelName===t.message.modelName&&e.message.modelId===t.message.modelId&&e.message.inputPoints===t.message.inputPoints&&e.message.outputPoints===t.message.outputPoints&&e.message.pendingSummaryPoints===t.message.pendingSummaryPoints&&e.message.inputTokens===t.message.inputTokens&&e.message.outputTokens===t.message.outputTokens&&e.message.isFromColdArchive===t.message.isFromColdArchive&&(null==(r=e.message.sentAt)?void 0:r.getTime())===(null==(n=t.message.sentAt)?void 0:n.getTime()),o=e.archivedBefore===t.archivedBefore&&e.onRefresh===t.onRefresh&&e.onGenerateImage===t.onGenerateImage&&e.onOpenFishSpeech===t.onOpenFishSpeech&&e.onEdit===t.onEdit&&e.onDelete===t.onDelete&&e.onBranchOrShare===t.onBranchOrShare&&e.showBranchShare===t.showBranchShare;return a&&o});var G=r(6621),Q=r(80509),Y=r(43259),X=r(6892);let J=e=>{let{text:t,requestId:r,errorType:o}=e,{t:s}=(0,w.Bd)("chat"),{openPaymentModal:i}=(0,Q.h)(),l=(0,c.useUserStore)(e=>e.isAuthenticated),d=(0,c.useUserStore)(e=>e.user),[u,m]=(0,a.useState)(!1),p=(0,Y.Wj)(t,r),h=(0,X.H)({isAuthenticated:l,totalRecharged:null==d?void 0:d.totalRecharged,hasPaidMembershipCard:null==d?void 0:d.hasPaidMembershipCard,hasPublishedCharacter:null==d?void 0:d.hasPublishedCharacter,hasInvitedUser:null==d?void 0:d.hasInvitedUser,createdAt:null==d?void 0:d.createdAt},o),g=(0,a.useCallback)(async()=>{if(p.requestId){if(await (0,j.lW)(p.requestId)){m(!0),E.default.success(s("module.message.feedbackIdCopied")),window.setTimeout(()=>m(!1),1600);return}E.default.error(s("module.message.copyFeedbackFailed"))}},[p.requestId,s]);return(0,n.jsxs)("div",{className:"flex items-start gap-2",children:[(0,n.jsx)("span",{className:"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-v2-state-error/15 text-v2-state-error",children:(0,n.jsx)("svg",{className:"h-3.5 w-3.5",fill:"currentColor",viewBox:"0 0 20 20","aria-hidden":"true",children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z",clipRule:"evenodd"})})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium leading-snug text-v2-state-error",children:p.title}),h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"mt-1 text-xs leading-relaxed text-v2-text-secondary",children:s("module.message.freeTierUpgradeHint")}),(0,n.jsx)("button",{type:"button",onClick:()=>i({analyticsSource:"chat_free_tier_send_failed"}),className:"mt-2 inline-flex items-center text-xs font-medium text-v2-accent-primary hover:underline",children:s("module.message.freeTierRecharge")})]}):p.suggestion?(0,n.jsx)("p",{className:"mt-1 text-xs leading-relaxed text-v2-text-secondary",children:p.suggestion}):null,p.requestId?(0,n.jsxs)("button",{type:"button",onClick:()=>{g()},className:"mt-2 inline-flex max-w-full items-center gap-1 rounded-md px-0 py-0.5 text-[11px] leading-none text-v2-text-tertiary transition-colors hover:text-v2-text-secondary",title:s("module.message.copyFeedbackId"),"aria-label":s("module.message.copyFeedbackId"),children:[(0,n.jsx)("span",{children:s("module.message.errorFeedbackId")}),(0,n.jsx)("span",{className:"truncate font-mono",children:p.requestId}),u?(0,n.jsx)("span",{"aria-hidden":"true",children:"✓"}):null]}):null]})]})};var Z=r(45967);let ee=a.memo(e=>{let{content:t,isStreaming:r=!1}=e,{t:o}=(0,w.Bd)("chat"),[s,i]=(0,a.useState)(r),l=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{r||l.current||i(!1)},[r]),(0,n.jsxs)("div",{className:"mb-2",children:[(0,n.jsxs)("button",{onClick:()=>{l.current=!0,i(!s)},className:"flex items-center gap-1.5 text-xs text-gray-500 transition-colors py-1 hover:text-gray-700 cursor-pointer",type:"button",children:[(0,n.jsx)("svg",{className:"w-3.5 h-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})}),(0,n.jsx)("span",{children:o(r?"module.thinkingBlock.streaming":"module.thinkingBlock.done")}),(0,n.jsx)("svg",{className:`w-3 h-3 transition-transform duration-200 ${s?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),s&&(0,n.jsx)("div",{className:"mt-1 pl-3 border-l-2 border-gray-200 text-xs text-gray-500 leading-relaxed whitespace-pre-wrap",children:t})]})});function et(e){let{isConnecting:t=!1}=e,{t:r}=(0,w.Bd)("common");return(0,n.jsx)("p",{role:"status",className:"text-sm text-v2-text-secondary",children:r(t?"chatRecovery.reconnecting":"chatRecovery.checking")})}var er=r(90376),en=r(59103),ea=r(75730),eo=r(28975);function es(e,t,r){return!e||e.startsWith(t)||!r.has(e)?e:`${t}${e}`}function ei(e,t){if(!e||!/\b(?:id|for|name)\s*=/i.test(e)||e.includes(`id="${t}`)||e.includes(`id='${t}`))return e;let r=function(e){let t,r=new Set,n=/\bid\s*=\s*(["'])([^"']+)\1/gi;for(;null!==(t=n.exec(e));){var a;let e=null==(a=t[2])?void 0:a.trim();e&&r.add(e)}return r}(e),n=e.replace(/\bid\s*=\s*(["'])([^"']+)\1/gi,(e,n,a)=>`id=${n}${es(a,t,r)}${n}`);for(let e of(n=n.replace(/\bfor\s*=\s*(["'])([^"']+)\1/gi,(e,n,a)=>`for=${n}${es(a,t,r)}${n}`),["aria-labelledby","aria-describedby","aria-controls","aria-owns","aria-activedescendant"])){let a=RegExp(`\\b${e}\\s*=\\s*(["'])([^"']*)\\1`,"gi");n=n.replace(a,(n,a,o)=>
1{let s=o.split(/\s+/).filter(Boolean).map(e=>es(e,t,r)).join(" ");return`${e}=${a}${s}${a}`})}return n.replace(/\bname\s*=\s*(["'])([^"']+)\1/gi,(e,r,n)=>!n||n.startsWith(t)?`name=${r}${n}${r}`:`name=${r}${t}${n}${r}`)}let el=[/i appreciate.{0,60}but i('m| am) not able to (engage|assist|help|respond)/i,/i('m| am) not able to engage with this (type|kind) of (content|request)/i,/i('m| am) designed to be helpful,?\s*harmless,?\s*and\s*honest/i,/i (cannot|can't) and (will|would) not\s+(generate|create|produce|assist|help)/i,/\bi will not\s+(generate|create|produce|assist|help|engage|roleplay)\b/i,/bypass(ing)?\s+(safety|my)\s+(guidelines?|policies?)/i,/safety guidelines? don't apply to me/i],ed=[/^i('m| am) sorry,?\s*(but\s+)?i\s+(cannot|can't|am unable to|am not able to)\s+(assist|help|respond|fulfill|process|generate)/i,/^i\s+(cannot|can't)\s+(assist|help|respond|fulfill|process|generate)\s+with\s+(that|this)\s+request/i,/\b(inappropriate|harmful|violat(es?|ing)|against\s+(my|our)\s+(guidelines|policies|terms))\b/i,/\bcontent\s+policy\b/i,/^(抱歉|很抱歉|对不起|不好意思).{0,20}(无法|不能|不可以)(参与|回答|回复|处理|生成|协助|帮助|给到|提供)/,/^(你好[,,。!! ]*)?我无法(给到|提供)相关内容/,/无法(给到|提供)相关内容/,/请提出其他合规的问题/,/违反.{0,10}(政策|规定|准则|条款)/,/(不当|不适当|违规|敏感).{0,5}(内容|信息|请求)/],ec=[/^(?:(?:i(?:['’]m| am)\s+)?sorry[,,]?\s*(?:but\s+)?)?i\s+(?:cannot|can['’]t|am unable to|am not able to)\s+(?:fulfill|fulfil|complete|process|comply with|assist with|help with|respond to)\s+(?:this|that|your)\s+request(?=[.!?\s]|$)/i,/^(?:(?:很抱歉|抱歉|对不起|不好意思)[,,。!!\s]*)?我(?:无法|不能|不会|不可以)(?:(?:满足|完成|执行|继续|回应|参与|写|撰写)(?:这个|这一|该|此)(?:请求|要求|角色扮演(?:场景)?|剧情|场景|内容)|(?:为你|为您)撰写(?:这个|该)内容|按(?:照)?(?:这个|该)(?:设定|配置)(?:来)?(?:生成内容|进行创作))(?=[。!!??\s]|$)/,/^(?:(?:很抱歉|抱歉|对不起|不好意思)[,,。!!\s]*)?我(?:无法|不能|不会)(?:继续)?(?:参与|提供|回应|生成|描写|描述|创作|写)[^。!?\n]{0,100}(?:露骨|色情|性暴力|性侵|非自愿|性内容|性描写|性感官)[^。!?\n]{0,100}(?:[。!?]|$)/,/^我注意到你要求的内容[^。!?\n]{0,150}(?:性侵|性暴力|色情|露骨)[^。!?\n]{0,150}我(?:也)?(?:不能|无法)(?:生成|创作|描写)这类内容(?:[。!?]|$)/];function eu(e,t){let r=t.index??0;return e.slice(r+t[0].length).replace(/^[。!?.!?,,;;::\s]+/,"").length>400}let em=/<\s*galgame\b|<\s*sprite\b|galgame-step|<\s*(?:input|sprite|galgame)/i,ep=/<[^<>]{0,200}[“”‘’=<>—- ][^<>]{0,200}>/,eh=/<\s*[a-z]/i,eg=/<\s*\/?\s*(?:[a-z]\s+){3,}[a-z]/i,ef=/<!—/,ev="bubble-message-body",eb="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeSmall MuiButton-textSizeSmall MuiButton-colorPrimary transition-[color,opacity] duration-150 hover:opacity-80 active:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-v2-border-focus touch-manipulation gap-0.5 sm:gap-1 shrink-0",ey="chat:image-upsell:dismiss-until:v1",ex="chat:jailbreak-upsell:dismiss-until:v1",ew=a.memo(function(){return(0,n.jsx)("div",{className:"flex items-center justify-center w-6 h-5",children:(0,n.jsx)("div",{className:"style_dot-flashing__8L91Q style_text__zGhNq"})})}),ek=a.memo(function(){let{t:e}=(0,w.Bd)("chat"),[t,r]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=window.setTimeout(()=>r(!0),1500);return()=>window.clearTimeout(e)},[]),(0,n.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,n.jsx)(ew,{}),t&&(0,n.jsxs)("p",{role:"status",className:"text-xs text-v2-text-tertiary",children:[e("module.message.connecting"),(0,n.jsxs)("span",{className:"waiting-reply-ellipsis","aria-hidden":"true",children:[(0,n.jsx)("span",{children:"."}),(0,n.jsx)("span",{children:"."}),(0,n.jsx)("span",{children:"."})]})]})]})}),eS=a.memo(e=>{let{message:t,character:r,className:o="",builtInCss:l,onRefreshMessage:u,onEditMessage:p,onDeleteMessage:h,onGenerateImageFromMessage:g,onOpenFishSpeech:f,onOpenJailbreakMods:b,onSendMessage:y,onFillInput:x,isLoading:k=!1,isLatestAiMessage:S=!1,openingStatements:I=[],currentOpeningIndex:j=0,onSwitchOpeningStatement:M,streamingTextDraft:E,onOpenQuickStartSettings:_,archivedBefore:T=null,isLastMessage:P=!1,onBranchOrShare:A,cgBookHit:F}=e,{t:$}=(0,w.Bd)("chat"),D=P&&!!A&&!t.isStreaming&&!t.isOpeningStatement,B=!!(l&&""!==l.trim()),q=(0,
1c.useUserStore)(e=>e.user),{preferences:H,renderMode:z}=s(),[U,W]=(0,a.useState)(null),[K]=(0,a.useState)(!1),[Q]=(0,a.useState)(null),[Y,X]=(0,a.useState)(!1),[es,ew]=(0,a.useState)(0),[eS,eC]=(0,a.useState)(0),eI=(0,a.useMemo)(()=>{let e=void 0!==E?E:t.text;return"string"==typeof e?e:"object"==typeof e&&null!==e?JSON.stringify(e):String(e??"")},[E,t.text]),ej=(0,a.useMemo)(()=>{let e=eI;return e=e.replace(/<Disclaimer>[\s\S]*?<\/Disclaimer>/gi,""),e=(0,er.EX)(e,!!t.isStreaming,"character"===t.sender),("comfyai"===("string"==typeof t.modelName?t.modelName.trim().toLowerCase():"")||e.includes("COMFY_INLINE_IMAGE_START")||e.includes("COMFY_INLINE_IMAGE_END")||e.includes("comfy://loading/")||e.includes("![生成图片](")||e.includes("/install-emtry.webp"))&&(e=e.replace(/^⏳\s*正在生成图片,请稍候…\s*$/gm,"").replace(/^⏳\s*正在生成图片,请稍候\.\.\.\s*$/gm,"").replace(/^正在生成图片,请稍候…\s*$/gm,"").replace(/^正在生成图片,请稍候\.\.\.\s*$/gm,"").replace(/^####\s*生图\s*\d+\s*$/gm,"").replace(/^生图\s*\d+\s*$/gm,"").replace(/\n{3,}/g,"\n\n").trim(),/!\[[^\]]*生成图片[^\]]*\]\([^)\n]*\/comfyai\/results\/[^)\n]*\)/.test(e)&&(e=e.replace(/^!\[(?:生成中|Generating|생성 중|画像生成中)\]\((?:comfy:\/\/loading\/[^)\s]+|\/install-emtry\.webp)\)\s*$/gmi,"").replace(/\n{3,}
1/g,"\n\n").trim())),e.replace(/\\n/g,"\n")},[eI,t.isStreaming,t.sender]),eM=(0,a.useMemo)(()=>"user"===t.sender?ej:function(e,t){if(!e||!t||!/\b(?:id|for|name)\s*=/i.test(e))return e;let r=t.replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,80);if(!r)return e;let n=`ns_${r}_`;if(e.includes(`id="${n}`)||e.includes(`id='${n}`))return e;if(/<galgame\b/i.test(e)){let t,a=0,o=0,s="",i=/<galgame\b[^>]*>/gi;for(;null!==(t=i.exec(e));){let l=t.index,d=l+t[0].length,c=e.toLowerCase().indexOf("</galgame>",d);if(-1===c)break;let u=c+10;s+=ei(e.slice(o,l),n),s+=ei(e.slice(l,u),`ns_${r}_g${a}_`),a+=1,o=u,i.lastIndex=u}return s+ei(e.slice(o),n)}return ei(e,n)}(ej&&/<sprite\b/i.test(ej)?ej.replace(/(<sprite\b[^>]*\bclass\s*=\s*)(["'])([^"']*)(\2)/gi,(e,t,r,n,a)=>{let o=n.split(/\s+/).filter(Boolean).map(e=>{let t=/^(char-[a-z0-9]+(?:-[a-z0-9]+)*)-pose-([a-z0-9-]+)$/i.exec(e);if(!t)return e;let[,r,n]=t;return`${r} pose-${n}`});return`${t}${r}${o.join(" ")}${a}`}):ej,String(t.id)),[t.sender,t.id,ej]),eN=(0,a.useMemo)(()=>(0,en.Vn)(eI,!!t.isStreaming),[eI,t.isStreaming]),eE=(0,a.useMemo)(()=>(0,en.N)(eI)||eN.length>0,[eI,eN]),e_=(0,a.useMemo)(()=>/<[^>]+>/.test(ej),[ej]),eT=(0,a.useMemo)(()=>"character"===t.sender&&!!(l&&""!==l.trim()||/style\s*=\s*["'][^"']*["']/.test(ej)||/<div\s+class=["']content-block["']/.test(ej)||/<details\s+class=["']panel["']/.test(ej)||/<ul\s+class=["']options-list["']/.test(ej)),[ej,t.sender,l]),eP=(0,a.useMemo)(()=>"character"!==t.sender||t.isStreaming?[]:(0,v.tl)(ej),[ej,t.sender,t.isStreaming]),eR=(0,a.useMemo)(()=>H.enableHTMLRendering?"auto"===z?e_?"html":"text":z:"text",[H.enableHTMLRendering,z,e_]),eA=(0,a.useCallback)(()=>{e_&&"text"!==eR&&W({id:String(t.id),originalContent:ej,contentType:e_?"html":"text",processedContent:ej,metadata:{processingTime:0,hasHTML:e_,securityWarnings:[],renderingMode:eR}})},[t.id,ej,e_,eR]);a.useEffect(()=>{e_&&"html"===eR&&eA()},[e_,eR,eA]),(0,a.useCallback)(e=>{y&&!k&&y(`${e.letter}. ${e.content}`)},[y,k]);let eL=(0,a.useCallback)((e,t)=>{y&&!k&&y(`${e}. ${t}`)},[y,k]),eO=(0,a.useCallback)(e=>{x&&(x(e),requestAnimationFrame(()=>{var e;null==(e=document.getElementById("ai-chat-input"))||e.focus()}))},[x]),eF=(0,a.useCallback)(()=>{h&&h(t.id)},[h,t.id]),e$=(0,a.useMemo)(()=>"character"===t.sender&&!t.isStreaming&&!!ej&&!!em.test(ej)&&(ep.test(ej)||eh.test(ej)||eg.test(ej)||ef.test(ej)),[t.sender,t.isStreaming,ej]),eD=()=>(0,n.jsx)(G.A,{messageId:t.id,fallbackText:ej,onDelete:h&&!t.isStreaming?h:void 0,forceFallback:e$,children:(()=>{let e="user"===t.sender;if(!e&&t.isStreaming&&!ej)return t.isPendingResume?(0,n.jsx)(et,{isConnecting:"connecting"===t.streamingStatus}):eE?(0,n.jsx)(ee,{content:eN,isStreaming:!0}):(0,n.jsx)(ek,{});if(t.isError)return(0,n.jsx)(J,{text:ej,requestId:t.errorRequestId,errorType:t.errorType});if(!e&&!t.isStreaming&&!ej)return eE?(0,n.jsx)(ee,{content:eN,isStreaming:!1}):null;let r=!e&&eE?(0,n.jsx)(ee,{content:eN,isStreaming:!!t.isStreaming}):null;if(eT&&e_)try{return(0,n.jsxs)("div",{style:{overflow:"hidden",overflowWrap:"break-word",wordBreak:"break-word"},children:[r,(0,n.jsx)(N,{content:eM,className:`${B?"markdown-body ":""}text-sm ${ev}`.trim(),onOptionsRendered:X,onOptionSelect:eL,onFillInput:eO,isStreaming:t.isStreaming,isLatestAiMessage:S})]})}catch(e){return console.error("[EnhancedMessageComponent] BuiltInCssRenderer 渲染失败:",{error:e instanceof Error?e.message:e,messageId:t.id,contentLength:(null==ej?void 0:ej.length)||0,sender:t.sender,timestamp:t.timestamp}),(0,n.jsx)(m,{children:(0,n.jsx)("p",{className:`text-sm ${ev}`,children:ej})})}if("text"===eR||!e_)try{let e="user"===t.sender;return(0,n.jsxs)(m,{children:[r,(0,n.jsx)("div",{className:[e?"markdown-body":"",ev].filter(Boolean).join(" "),style:{overflow:"hidden",overflowWrap:"break-word",wordBreak:"break-word"},children:(0,n.jsx)(C,{content:eM,className:`${B&&"character"===t.sender?"markdown-body ":""}text-sm`.trim(),autoConvertMarkdown:!0,onOptionSelect:"character"===t.sender?eL:void 0,onFillInput:"character"===t.sender?eO:void 0,isLatestAiMessage:"character"===t.sender&&S,onOptionsRendered:"character"===t.sender?X:void 0,isStreaming:"character"===t.sender&&t.isStreaming})})]})}catch(e){return console.error("[EnhancedMessageComponent] SafeHtmlRenderer 渲染失败 (文本模式):",{error:e instanceof Error?e.message:e,messageId:t.id,contentLength:(null==ej?void 0:ej.length)||0,sender:t.sender,timestamp:t.timestamp}),(0,n.jsx)(m,{children:(0,n.jsx)("p",{className:`text-sm ${ev}`,children:ej})})}
1if("html"===eR&&e_){U||eA();try{return(0,n.jsxs)(m,{children:[r,(0,n.jsxs)("div",{className:`html-message-content chat-message ${ev} ${e?"user-message":""}`,children:[(0,n.jsx)(C,{content:eM,className:"prose prose-sm max-w-none",autoConvertMarkdown:!0,onOptionSelect:"character"===t.sender?eL:void 0,onFillInput:"character"===t.sender?eO:void 0,isLatestAiMessage:"character"===t.sender&&S,onOptionsRendered:"character"===t.sender?X:void 0,isStreaming:"character"===t.sender&&t.isStreaming}),K&&(0,n.jsxs)("div",{className:"flex items-center space-x-2 text-xs text-v2-text-tertiary mt-2",children:[(0,n.jsx)("div",{className:"animate-spin w-3 h-3 border border-v2-border-primary border-t-transparent rounded-full"}),(0,n.jsx)("span",{children:"Rendering HTML..."})]}),Q&&(0,n.jsxs)("div",{className:"text-xs text-v2-error mt-2 p-2 bg-v2-error-bg rounded border border-v2-border-error/30",children:["Render error: ",Q]})]})]})}catch(r){return console.error("[EnhancedMessageComponent] SafeHtmlRenderer 渲染失败 (HTML 模式):",{error:r instanceof Error?r.message:r,messageId:t.id,contentLength:(null==ej?void 0:ej.length)||0,sender:t.sender,timestamp:t.timestamp,containsHTML:e_}),(0,n.jsx)(m,{children:(0,n.jsxs)("div",{className:`html-message-content chat-message ${ev} ${e?"user-message":""}`,children:[(0,n.jsx)("p",{className:`text-sm ${ev}`,children:ej}),K&&(0,n.jsxs)("div",{className:"flex items-center space-x-2 text-xs text-v2-text-tertiary mt-2",children:[(0,n.jsx)("div",{className:"animate-spin w-3 h-3 border border-v2-border-primary border-t-transparent rounded-full"}),(0,n.jsx)("span",{children:"Rendering HTML..."})]}),Q&&(0,n.jsxs)("div",{className:"text-xs text-v2-error mt-2 p-2 bg-v2-error-bg rounded border border-v2-border-error/30",children:["Render error: ",Q]}),(0,n.jsx)("div",{className:"text-xs text-v2-warning mt-2 p-2 bg-v2-warning-bg rounded border border-v2-warning/25",children:"渲染器不可用,已回退到纯文本显示"})]})})}}return null})()}),eB="character"===t.sender&&t.isStreaming&&!t.text,eq="character"===t.sender&&t.isStreaming,eH=(0,a.useMemo)(()=>!!t.isPendingResume&&!!t.isStreaming||"comfyai"===("string"==typeof t.modelName?t.modelName.trim().toLowerCase():"")||ej.includes("\x3c!-- COMFY_INLINE_IMAGE_START --\x3e")||ej.includes("\x3c!-- COMFY_INLINE_IMAGE_END --\x3e")||ej.includes("#### 生图")||ej.includes("comfy://loading/"),[t.modelName,t.isPendingResume,t.isStreaming,ej]),ez=(0,a.useMemo)(()=>{if(!b||"character"!==t.sender||!S||t.isStreaming||eB||t.isError||"error"===t.streamingStatus||t.isOpeningStatement||t.isQuickStartProfile||eH||eS>Date.now())return!1;let e=(!ej?"":ej.replace(/<[^>]*>/g,"")).replace(/\s+/g," ").trim();return!!e&&function(e){let t=(function(e){let t=e.trim();if(!t.startsWith("["))return e;try{let r=JSON.parse(t);if(!Array.isArray(r)||!r.every(e=>"string"==typeof e))return e;return r.join("")}catch{return e}})(e??"").trim();if(!t||/^the\s+request\s+was\s+rejected\s+because\s+it\s+was\s+considered\s+high\s+risk[.!。!]?$/i.test(t.trim()))return!0;let r=t.slice(0,600);for(let e of el){let n=r.match(e);if(n){if(eu(t,n))return!1;return!0}}if(t.length<500)for(let e of ed){let r=t.match(e);if(r){if(eu(t,r))return!1;return!0}}for(let e of ec){let n=r.match(e);if(n){if(eu(t,n))return!1;return!0}}return!1}(e)},[S,eB,eS,t.isError,t.isOpeningStatement,t.isQuickStartProfile,t.isStreaming,t.sender,t.streamingStatus,ej,b,eH]),eU=(0,a.useMemo)(()=>!("character"!==t.sender||!S||!g||t.isStreaming||eB||t.isError||"error"===t.streamingStatus||!ej.trim()||es>Date.now()||eH||(0,eo.Z)(ej))&&!ez,[es,S,eB,t.isError,t.isStreaming,t.sender,t.streamingStatus,ej,g,eH,ez]);(0,a.useEffect)(()=>{try{let e=window.localStorage.getItem(ey),t=Number(e??0);Number.isFinite(t)&&t>0&&ew(t);let r=window.localStorage.getItem(ex),n=Number(r??0);Number.isFinite(n)&&n>0&&eC(n)}catch{}},[]);let eW=(0,a.useCallback)(()=>{let e=Date.now()+2592e5;ew(e);try{window.localStorage.setItem(ey,String(e))}catch{}},[]),eK=(0,a.useCallback)(()=>{let e=Date.now()+2592e5;eC(e);try{window.localStorage.setItem(ex,String(e))}catch{}},[]),eV=(0,a.useRef)(null);(0,a.useEffect)(()=>
1{if(!eq)return;let e=()=>{let e=eV.current;if(!e)return;let t=e.querySelectorAll("details");if(t.forEach((e,r)=>{r===t.length-1?e.setAttribute("data-streaming-active","true"):e.setAttribute("data-streaming-active","false"),e.hasAttribute("open")||(e.open=!1)}),0===t.length)return;t.forEach((e,r)=>{r<t.length-1&&e.querySelectorAll(".streaming-spinner").forEach(e=>e.remove())});let r=t[t.length-1].querySelector("summary");if(!r||r.querySelector(".streaming-spinner"))return;let n=document.createElement("span");n.className="streaming-spinner",n.style.animation="streaming-spinner 0.8s linear infinite",r.appendChild(n)};e();let t=eV.current;if(!t)return;let r=0,n=new MutationObserver(()=>{0===r&&(r=requestAnimationFrame(()=>{r=0,e()}))});return n.observe(t,{childList:!0,subtree:!0,characterData:!0}),()=>{n.disconnect(),0!==r&&(cancelAnimationFrame(r),r=0),t.querySelectorAll(".streaming-spinner").forEach(e=>e.remove()),t.querySelectorAll("details").forEach(e=>{e.removeAttribute("data-streaming-active"),e.open=!1})}},[eq]);let eG="character"===t.sender&&S&&eP.length>0&&!Y&&!t.isStreaming,eQ="character"===t.sender&&!!F&&!t.isStreaming,eY=()=>{var e;return(0,n.jsx)("div",{className:`shrink-0 relative w-8 h-8 ${"user"===t.sender?"bg-white":"bg-gray-100/90"} rounded-full`,children:"user"===t.sender?(0,n.jsx)("div",{className:"w-full h-full rounded-full overflow-hidden shadow-md hover:shadow-lg transition-shadow duration-200 border border-blue-100 bg-white",children:(0,n.jsx)("img",{src:(null==q?void 0:q.avatar)?(0,ea.X)(q.avatar):i.kv,alt:$("module.message.userAvatar"),className:"w-full h-full object-cover not-toggle"})}):(0,n.jsx)("div",{className:"w-full h-full rounded-full overflow-hidden shadow-md hover:shadow-lg transition-shadow duration-200 border border-blue-100 bg-white",children:t.avatar||(null==r?void 0:r.thumbnail)?(0,n.jsx)("img",{src:(0,i.C5)(t.avatar??(null==r?void 0:r.thumbnail)),alt:"Character",className:"w-full h-full object-cover not-toggle"}):(0,n.jsx)("div",{className:"w-full h-full flex items-center justify-center bg-gradient-to-r from-blue-500 to-cyan-500 text-white font-semibold text-xs",children:(null==r||null==(e=r.title)?void 0:e.charAt(0))??"AI"})})})};return"character"===t.sender?(0,n.jsxs)("div",{id:"ai-chat-answer",className:`flex flex-row-reverse mb-1.5 md:mb-2 last:mb-0 ${o}`,style:{overflow:"visible",zIndex:1},children:[(0,n.jsxs)("div",{className:"chat-answer-container group grow w-0 ml-1 md:ml-4",style:{minWidth:0,overflow:"visible",position:"relative"},children:[(0,n.jsx)("div",{className:"group relative",children:(0,n.jsxs)("div",{ref:eV,className:"relative inline-block px-2.5 py-2.5 md:px-4 md:py-3 w-fit max-w-full bg-gray-100/90 rounded-xl text-gray-900 chat-message","data-streaming":eq?"true":"false",style:{overflowWrap:"break-word",wordWrap:"break-word",wordBreak:"break-word",hyphens:"auto",overflow:"hidden"},children:[eD(),ej&&(()=>{if("character"!==t.sender)return null;if(t.isStreaming){let e={connecting:$("module.message.connecting"),receiving:$("module.message.receiving"),completed:$("module.message.completed"),error:$("module.message.transferError")},r=t.streamingStatus??"receiving";return"receiving"===r?null:(0,n.jsx)("div",{className:"flex items-center space-x-2 mt-2",children:(0,n.jsxs)("div",{className:`flex items-center space-x-1 text-xs ${{connecting:"text-v2-info",receiving:"text-v2-success",completed:"text-v2-text-tertiary",error:"text-v2-error"}[r]}`,children:["connecting"===r&&(0,n.jsx)("div",{className:"w-3 h-3 border border-current border-t-transparent rounded-full animate-spin"}),"completed"===r&&(0,n.jsx)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 20 20",children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})}),"error"===r&&(0,n.jsx)("svg",{className:"w-3 h-3",fill:"currentColor",viewBox:"0 0 20 20",children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z",clipRule:"evenodd"})}),(0,n.jsx)("span",{children:e[r]})]})})}return null})(),eQ&&F?(0,n.jsx)(d,{rule:F,className:"mt-1.5 md:mt-2"}):null,t.isOpeningStatement&&I.length>1&&M||t.responseSource&&0?(0,n.jsxs)("div",{className:"flex items-center justify-end mt-0.5 md:mt-1",children:[t.isOpeningStatement&&I.length>1&&M&&(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)("button",{onClick:()=>(0,a.startTransition)(()=>M("prev")),className:"p-1 rounded hover:bg-black/10 transition-colors","aria-label":$("module.message.previousOpening"),title:$("module.message.previousOpening"),children:(0,n.jsx)("svg",{className:"w-4 h-4 text-v2-text-secondary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})})}),(0,n.jsxs)("span",{className:"text-xs text-v2-text-tertiary min-w-[32px] text-center",children:[j+1,"/",I.length]}),(0,n.jsx)("button",{onClick:()=>(0,a.startTransition)(()=>M("next")),className:"p-1 rounded hover:bg-black/10 transition-colors","aria-label":$("module.message.nextOpening"),title:$("module.message.nextOpening"),children:(0,n.jsx)("svg",{className:"w-4 h-4 text-v2-text-secondary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})})})]}),t.responseSource&&!1]}):null,eH&&h&&!t.isStreaming&&(0,n.jsxs)("div",{className:"mt-1 flex justify-end gap-2.5 sm:gap-5","data-chat-msg-actions":"",children:[(0,n.jsxs)("button",{type:"button",onClick:eF,className:eb,style:{borderRadius:"6px"},"aria-label":$("module.messageFooter.deleteAria"),title:$("module.messageFooter.delete"),children:[(0,n.jsx)(R.d7,{
1className:O}),(0,n.jsx)("span",{className:L,children:$("module.messageFooter.delete")})]}),D&&A?(0,n.jsxs)("button",{type:"button",onClick:A,className:eb,style:{borderRadius:"6px"},"aria-label":$("module.messageFooter.branchShareAria"),title:$("module.messageFooter.branchShare"),children:[(0,n.jsx)(R.tS,{className:O}),(0,n.jsx)("span",{className:L,children:$("module.messageFooter.branchShare")})]}):null]}),!eH&&(0,n.jsx)(V,{message:t,onRefresh:u,onGenerateImage:g,onOpenFishSpeech:f,onEdit:p,onDelete:h,onBranchOrShare:A,showBranchShare:D,archivedBefore:T})]})}),ez&&b&&(0,n.jsxs)("p",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[(0,n.jsxs)("span",{className:"quick-start-profile-hint inline-block max-w-full px-2.5 py-1 rounded-lg text-xs text-v2-text-secondary leading-relaxed shadow-sm border border-white/40 whitespace-nowrap",style:{backgroundColor:"rgba(255, 255, 255, 0.8)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)"},children:[$("module.jailbreakUpsell.hintPrefix"),(0,n.jsx)("button",{type:"button",onClick:b,className:"text-v2-accent-primary hover:underline cursor-pointer",children:$("module.jailbreakUpsell.hintLink")})]}),(0,n.jsx)("button",{type:"button",onClick:eK,className:"quick-start-profile-hint inline-flex items-center px-2.5 py-1 rounded-lg text-xs text-v2-text-tertiary leading-relaxed shadow-sm border border-white/40 hover:text-v2-text-primary cursor-pointer",style:{backgroundColor:"rgba(255, 255, 255, 0.8)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)"},children:$("module.jailbreakUpsell.hintClose")})]}),eU&&g&&(0,n.jsxs)("p",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[(0,n.jsxs)("span",{className:"quick-start-profile-hint inline-block max-w-full px-2.5 py-1 rounded-lg text-xs text-v2-text-secondary leading-relaxed shadow-sm border border-white/40 whitespace-nowrap",style:{backgroundColor:"rgba(255, 255, 255, 0.8)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)"},children:[$("module.imageUpsell.hintPrefix"),(0,n.jsx)("button",{type:"button",onClick:()=>g(t.id),className:"text-v2-accent-primary hover:underline cursor-pointer",children:$("module.imageUpsell.hintLink")})]}),(0,n.jsx)("button",{type:"button",onClick:eW,className:"quick-start-profile-hint inline-flex items-center px-2.5 py-1 rounded-lg text-xs text-v2-text-tertiary leading-relaxed shadow-sm border border-white/40 hover:text-v2-text-primary cursor-pointer",style:{backgroundColor:"rgba(255, 255, 255, 0.8)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)"},children:$("module.imageUpsell.hintClose")})]}),eG&&y&&(0,n.jsx)(Z.A,{options:eP,onSelectOption:e=>{y(e.content)},className:"mt-1.5 md:mt-2"})]}),eY()]}):(0,n.jsxs)("div",{className:`group flex flex-row-reverse mb-1.5 md:mb-2 last:mb-0 ${o}`,style:{overflow:"visible",zIndex:1},children:[eY(),(0,n.jsxs)("div",{className:"group relative mr-0.5 md:mr-4 ml-1.5 md:ml-0",style:{minWidth:0,overflow:"visible",position:"relative",maxWidth:"min(632px, 100%)"},children:[(0,n.jsxs)("div",{className:"relative inline-block px-2.5 py-2.5 md:px-4 md:py-3 max-w-full text-gray-900 bg-gray-100/90 rounded-xl chat-message user-message",style:{overflowWrap:"break-word",wordWrap:"break-word",wordBreak:"break-word",hyphens:"auto",overflow:"hidden"},children:[eD(),(t.responseSource,null),eH&&h&&!t.isStreaming&&(0,n.jsxs)("div",{className:"mt-1 flex justify-end gap-2.5 sm:gap-5","data-chat-msg-actions":"",children:[(0,n.jsxs)("button",{type:"button",onClick:eF,className:eb,style:{borderRadius:"6px"},"aria-label":$("module.messageFooter.deleteAria"),title:$("module.messageFooter.delete"),children:[(0,n.jsx)(R.d7,{className:O}),(0,n.jsx)("span",{className:L,children:$("module.messageFooter.delete")})]}),D&&A?(0,n.jsxs)("button",{type:"button",onClick:A,className:eb,style:{borderRadius:"6px"},"aria-label":$("module.messageFooter.branchShareAria"),title:$("module.messageFooter.branchShare"),children:[(0,n.jsx)(R.tS,{className:O}),(0,n.jsx)("span",{className:L,children:$("module.messageFooter.branchShare")})]}):null]}),!eH&&(0,n.jsx)(V,{message:t,onRefresh:u,onGenerateImage:g,onOpenFishSpeech:f,onEdit:p,onDelete:h,onBranchOrShare:A,showBranchShare:D,archivedBefore:T})]}),t.isQuickStartProfile&&_&&(0,n.jsx)("p",{className:"mt-1.5 flex justify-end",children:(0,n.jsxs)("span",{className:"quick-start-profile-hint inline-block max-w-full px-2.5 py-1 rounded-lg text-xs text-v2-text-secondary leading-relaxed shadow-sm border border-white/40",style:{backgroundColor:"rgba(255, 255, 255, 0.8)",WebkitBackdropFilter:"blur(8px)",backdropFilter:"blur(8px)"},children:[$("module.quickStart.editAfterSendPrefix"),(0,n.jsx)("button",{type:"button",onClick:_,className:"text-v2-accent-primary hover:underline cursor-pointer",children:$("module.quickStart.editAfterSendLink")})]})})]})]})},(e,t)=>{var r,n,a,o,s,i;if(["inputTokens","outputTokens","inputPoints","outputPoints","pen
1dingSummaryPoints","modelId","modelName","streamingStatus","isPendingResume"].some(r=>e.message[r]!==t.message[r]))return!1;let l=e.message.isStreaming||"receiving"===e.message.streamingStatus,d=t.message.isStreaming||"receiving"===t.message.streamingStatus;if(!l&&!d&&e.message.id===t.message.id&&e.message.text===t.message.text&&e.message.isError===t.message.isError&&e.message.errorType===t.message.errorType&&e.message.errorRequestId===t.message.errorRequestId&&e.message.isTruncated===t.message.isTruncated&&e.message.dbMessageId===t.message.dbMessageId&&e.message.freeRecoveryRemaining===t.message.freeRecoveryRemaining&&e.streamingTextDraft===t.streamingTextDraft)return e.isLatestAiMessage===t.isLatestAiMessage&&e.isLoading===t.isLoading&&e.onRefreshMessage===t.onRefreshMessage&&e.onGenerateImageFromMessage===t.onGenerateImageFromMessage&&e.onOpenFishSpeech===t.onOpenFishSpeech&&e.onOpenJailbreakMods===t.onOpenJailbreakMods&&e.onEditMessage===t.onEditMessage&&e.onDeleteMessage===t.onDeleteMessage&&e.onSendMessage===t.onSendMessage&&e.onFillInput===t.onFillInput&&e.onOpenQuickStartSettings===t.onOpenQuickStartSettings&&e.archivedBefore===t.archivedBefore&&e.isLastMessage===t.isLastMessage&&e.onBranchOrShare===t.onBranchOrShare&&(null==(s=e.cgBookHit)?void 0:s.id)===(null==(i=t.cgBookHit)?void 0:i.id);let c=e.message.id===t.message.id&&e.message.text===t.message.text&&e.message.sender===t.message.sender&&e.message.isStreaming===t.message.isStreaming&&e.message.streamingStatus===t.message.streamingStatus&&e.message.isError===t.message.isError&&e.message.errorRequestId===t.message.errorRequestId&&e.message.isTruncated===t.message.isTruncated&&e.message.dbMessageId===t.message.dbMessageId&&e.message.freeRecoveryRemaining===t.message.freeRecoveryRemaining&&e.message.isResponseAbnormal===t.message.isResponseAbnormal&&e.message.isOpeningStatement===t.message.isOpeningStatement&&e.message.isQuickStartProfile===t.message.isQuickStartProfile,u=(null==(r=e.character)?void 0:r.id)===(null==(n=t.character)?void 0:n.id)&&(null==(a=e.character)?void 0:a.title)===(null==(o=t.character)?void 0:o.title),m=e.className===t.className,p=e.isLoading===t.isLoading,h=e.isLatestAiMessage===t.isLatestAiMessage,g=e.isLastMessage===t.isLastMessage,f=e.openingStatements===t.openingStatements&&e.currentOpeningIndex===t.currentOpeningIndex&&e.onSwitchOpeningStatement===t.onSwitchOpeningStatement,v=e.onRefreshMessage===t.onRefreshMessage&&e.onGenerateImageFromMessage===t.onGenerateImageFromMessage&&e.onOpenFishSpeech===t.onOpenFishSpeech&&e.onOpenJailbreakMods===t.onOpenJailbreakMods&&e.onEditMessage===t.onEditMessage&&e.onDeleteMessage===t.onDeleteMessage&&e.onSendMessage===t.onSendMessage&&e.onFillInput===t.onFillInput&&e.onOpenQuickStartSettings===t.onOpenQuickStartSettings&&e.archivedBefore===t.archivedBefore&&e.isLastMessage===t.isLastMessage&&e.onBranchOrShare===t.onBranchOrShare,b=e.streamingTextDraft===t.streamingTextDraft;return c&&b&&u&&m&&p&&h&&g&&f&&v})},6621:(e,t,r)=>{r.d(t,{A:()=>i});var n=r(37876),a=r(14232),o=r(97445);class s extends a.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){var r,n;let a=this.props.fallbackText??"";console.error("[MessageErrorBoundary] 消息渲染失败:",{messageId:this.props.messageId,error:e.message,stack:null==(r=e.stack)?void 0:r.split("\n").slice(0,3).join("\n"),componentStack:null==(n=t.componentStack)?void 0:n.split("\n").slice(0,5).join("\n"),fallbackPreview:a.slice(0,160)})}render(){if(this.state.hasError||this.props.forceFallback){let{messageId:e,onDelete:t}=this.props,r="function"==typeof t&&null!=e&&""!==e;return(0,n.jsxs)("div",{className:"rounded-lg border border-v2-border-primary bg-v2-bg-secondary px-3 py-2","data-chat-msg-actions":"",children:[(0,n.jsx)("p",{className:"text-sm text-v2-text-secondary",children:this.props.t("module.messageError.renderFailed")}),r?(0,n.jsx)("button",{type:"button",className:"mt-2 text-sm text-v2-state-error hover:underline cursor-pointer",onClick:()=>t(e),"aria-label":this.props.t("module.messageFooter.deleteAria"),children:this.props.t("module.messageError.deleteBroken")}):null]})}return this.props.children}}let i=(0,o.CI)("chat")(s)},6892:(e,t,r)=>{r.d(t,{H:()=>s});var n=r(34978),a=r(28157);let o=new Set(["insufficient_points","session_busy","unauthorized","bad_request","forbidden","not_found","rate_limit","network_error"]);function s(e,t){return!(!(0,a.qn)((0,n.MT)(e.isAuthenticated,e.totalRecharged,e.hasPaidMembershipCard,e.hasPublishedCharacter,e.hasInvitedUser),e.createdAt,e.now)||t&&o.has(t))}},7600:(e,t,r)=>{r.d(t,{c:()=>h});var n=r(14232),a=r(97685),o=r(34081),s=r(8779),i=r(92699);let l={summaryThreshold:10,bgEnabled:!0,customOpacity:!0,bubbleOpacity:86,temperature:.7,topP:.8,presencePenalty:0,frequencyPenalty:0,maxTokens:null,preText:"",postText:"",prePrompt:"",worldBook:"[]",bgImage:"",bgMobile:"",memoryPalaceMode:"disabled"};function d(e){let t;return{summaryThreshold:e.summary_threshold,bgEnabled:e.bg_enabled,customOpacity:e.custom_opacity,bubbleOpacity:e.bubble_opacity,temperature:e.temperature,topP:e.top_p,presencePenalty:e.presence_penalty,frequencyPenalty:e.frequency_penalty,maxTokens:e.max_tokens??null,preText:e.pre_text??"",postText:e.post_text??"",prePrompt:e.pre_prompt??"",worldBook:e.world_book??"[]",bgImage:e.bg_image,bgMobile:e.bg_mobile,memoryPalaceMode:(t=e.memory_palace_mode)&&"disabled"!==t?"auto":"disabled"}}async function c(e){try{var t;
1let r=await s.default.get(`/api/user-character-settings/${e}`);if((null==(t=r.data)?void 0:t.success)&&r.data.data)return d(r.data.data);return{...l}}catch(e){return console.error("[getCharacterSettings] 请求失败:",e),{...l}}}async function u(e,t){var r;let n,a=(n={},void 0!==t.summaryThreshold&&(n.summary_threshold=t.summaryThreshold),void 0!==t.bgEnabled&&(n.bg_enabled=t.bgEnabled),void 0!==t.customOpacity&&(n.custom_opacity=t.customOpacity),void 0!==t.bubbleOpacity&&(n.bubble_opacity=t.bubbleOpacity),void 0!==t.temperature&&(n.temperature=t.temperature),void 0!==t.topP&&(n.top_p=t.topP),void 0!==t.presencePenalty&&(n.presence_penalty=t.presencePenalty),void 0!==t.frequencyPenalty&&(n.frequency_penalty=t.frequencyPenalty),void 0!==t.maxTokens&&(n.max_tokens=t.maxTokens),void 0!==t.preText&&(n.pre_text=t.preText),void 0!==t.postText&&(n.post_text=t.postText),void 0!==t.prePrompt&&(n.pre_prompt=t.prePrompt),void 0!==t.worldBook&&(n.world_book=t.worldBook),void 0!==t.bgImage&&(n.bg_image=t.bgImage),void 0!==t.bgMobile&&(n.bg_mobile=t.bgMobile),void 0!==t.memoryPalaceMode&&(n.memory_palace_mode=t.memoryPalaceMode),n),o=await s.default.put(`/api/user-character-settings/${e}`,a);if((null==(r=o.data)?void 0:r.success)&&o.data.data)return d(o.data.data);throw Error((0,i.p4)("userCharacterSettings.updateFailed","更新设置失败"))}var m=r(5975),p=r(97445);function h(e,t,r){let s=(null==r?void 0:r.skipInitialStateCache)??!1,{isAuthenticated:i,user:h}=(0,m.rR)(),g=(0,n.useMemo)(()=>({characterId:e,userId:null==h?void 0:h.id,isAuthenticated:i}),[e,null==h?void 0:h.id,i]),f=(0,n.useRef)(g);f.current=g;let v=(0,n.useRef)(0),b=(0,n.useMemo)(()=>({scope:g,pending:null}),[g]),y=(0,n.useRef)(g).current===g,x=y?t:void 0,[w,k]=(0,n.useState)(()=>t?d(t):{...l}),[S,C]=(0,n.useState)(()=>!!(!t&&i)),[I,j]=(0,n.useState)(null),{t:M}=(0,p.Bd)("chat"),N=(0,n.useRef)(x);N.current=x;let E=(0,n.useRef)(!1),_=(0,n.useRef)(w);_.current=w;let T=(0,n.useCallback)(async e=>{if(f.current!==g)return;if(!e||!i){k({...l}),C(!1);return}if(E.current)return;E.current=!0;let t=++v.current,r=()=>f.current===g&&v.current===t;C(!0),j(null);let n=!N.current;try{let t=s||!y?null:(0,o.l4)(e);if(t){let e=await t;if(!r())return;if(null==e?void 0:e.settings)return void k(d(e.settings))}let a=await c(e);if(r()){if(n&&N.current)return;k(a)}}catch(e){if(r()){if(n&&N.current)return;j(e instanceof Error?e:Error(M("module.loadFailed"))),k({...l})}}finally{r()&&(C(!1),E.current=!1)}},[i,M,s,g,y]);(0,n.useEffect)(()=>{if(++v.current,E.current=!1,j(null),!e||!i){k({...l}),C(!1);return}if(x){k(d(x)),C(!1);return}return k({...l}),T(e),()=>{++v.current}},[e,i,T,x]);let P=(0,n.useCallback)(async t=>{if(!e||!i)return{ok:!1,reason:"unavailable"};if(f.current!==g)return{ok:!1,reason:"scope_changed"};let r=b.pending,n=(async()=>{if(r&&await r,f.current!==b.scope)return{ok:!1,reason:"scope_changed"};let n={..._.current};_.current={...n,...t},k(_.current);try{if(await u(e,t),f.current!==g)return{ok:!1,reason:"scope_changed"};return{ok:!0}}catch{if(f.current!==g)return{ok:!1,reason:"scope_changed"};return _.current=n,k(n),a.default.error(M("module.customConfig.saveFailedRetry")),{ok:!1,reason:"save_failed"}}})();b.pending=n;let o=await n;return b.pending===n&&(b.pending=null),o},[e,i,M,g,b]),R=(0,n.useCallback)(async()=>{let e={temperature:l.temperature,topP:l.topP,presencePenalty:l.presencePenalty,frequencyPenalty:l.frequencyPenalty,maxTokens:null};await P(e)},[P]),A=(0,n.useCallback)(async()=>{E.current=!1,await T(e)},[e,T]),L=(0,n.useMemo)(()=>{let e=w.worldBook;if(!e||"[]"===e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return console.error("[useCharacterSettings] world_book JSON 解析失败:",e),[]}},[w.worldBook]);return{settings:w,parsedWorldBook:L,isLoading:S,error:I,updateSettings:P,resetModelParams:R,refresh:A}}},8420:(e,t,r)=>{r.r(t),r.d(t,{default:()=>rk});var n=r(37876),a=r(14232),o=r(98477),s=r(18847),i=r.n(s),l=r(67768),d=r(67914),c=r(71860),u=r(70143),m=r(89099),p=r(16146),h=r(16429);function g(e){return e.trim().toLowerCase()}function f(e,t){let r=g(e),n=g(t);return!!r&&!!n&&r.includes(n)}function v(e){let t="string"==typeof e.text?e.text:e.content;return"string"==typeof t?t:""}var b=r(86517),y=r(68587),x=r(70197),w=r(30318),k=r(34978),S=r(12775),C=r(84421),I=r(52605),j=r(2205),M=r(38166),N=r(76827),E=r(97685);let _={姓名:["姓名","名字","名称","昵称"],性别:["性别"],年龄:["年龄"],外貌:["外貌","外形","外观","长相","容貌"],性格:["性格","个性","性情"],职业:["职业","身份","工作"]},T=["未命名","未知","未设定","未设置","未填","暂无","无","空","待定","待填","待补充","n/a","none","null","-","—","...","…"],P=["未填写","等待输入","待填写","待输入","请填写","请输入","请选择","暂无背景"],R=/^([^::\n]+)([::]\s*)(.*)$/;function A(e){let t=e.trim();for(let[e,r]of Object.entries(_))if(r.some(e=>e===t||t.includes(e)))return e;return null}function L(e){let t=new Map;for(let r of e.split("\n")){let e=r.trim();if(!e)continue;let n=e.match(R);if(!n)continue;let a=A(n[1]);a&&t.set(a,n[3].trim())}return t}function O(e){let t=e.trim();if(!t)return!0;let r=t.toLowerCase();return!!T.includes(r)||P.some(e=>t.includes(e))}function F(e){return e.replace(/<br\s*\/?>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<[^>]+>/g,"").replace(/&nbsp;/g," ").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").trim()}var $=r(98475),D=r(43259),B=r(55995),q=r(72594),H=r(8075),z=r(20998);let U=!1,W=!1;function K(e,t){try{let r={platform:(0,z.detectPlatform)()},n=(0,q.getReferralCode)();
1(null==n?void 0:n.code)&&(r.ref_code=n.code.toUpperCase()),(null==n?void 0:n.source)&&(r.ref_source=n.source),(null==n?void 0:n.refFirstTouchHost)&&(r.ref_first_touch_host=n.refFirstTouchHost);let a=(0,H.getUtmFirstTouch)();(null==a?void 0:a.utm_source)&&(r.utm_source=a.utm_source),(null==a?void 0:a.utm_medium)&&(r.utm_medium=a.utm_medium),(null==a?void 0:a.utm_campaign)&&(r.utm_campaign=a.utm_campaign),(null==a?void 0:a.utm_content)&&(r.utm_content=a.utm_content),(null==a?void 0:a.utm_term)&&(r.utm_term=a.utm_term),(null==a?void 0:a.first_touch_host)&&(r.utm_first_touch_host=a.first_touch_host),(null==a?void 0:a.first_touch_path)&&(r.utm_first_touch_path=a.first_touch_path),(0,B.capturePosthog)(e,{...r,...t??{}})}catch{}}function V(e){W||(W=!0,K("Guest Quota Hit",e))}var G=r(16921),Q=r(92699),Y=r(6892),X=r(48227);function J(e){return"object"==typeof e&&null!==e&&"code"in e&&"FREE_RECOVERY_LIMIT_REACHED"===e.code}function Z(e,t){(0,X.qP)(0);let{messageIndex:r,isRefresh:n,originalMessage:a}=e;n&&a&&t&&void 0!==r&&t(e=>e.map((e,t)=>t===r?{...a,isStreaming:!1,isError:!1,freeRecoveryRemaining:0}:e))}function ee(e){if(null==e)return(0,Q.p4)("chatHook.unknownError","发生未知错误");if("string"==typeof e)return e;if("object"==typeof e){if(void 0!==e.error){if("string"==typeof e.error)return e.error;if("object"==typeof e.error&&null!==e.error){let t=e.error;if("string"==typeof t.message)return t.message;if("string"==typeof t.code)return t.code}}if("string"==typeof e.message)return e.message;if("string"==typeof e.msg)return e.msg}return(0,Q.p4)("chatHook.unknownError","发生未知错误")}function et(e){var t,r,n,a,o;let s=C.useUserStore.getState();return(0,Y.H)({isAuthenticated:s.isAuthenticated,totalRecharged:null==(t=s.user)?void 0:t.totalRecharged,hasPaidMembershipCard:null==(r=s.user)?void 0:r.hasPaidMembershipCard,hasPublishedCharacter:null==(n=s.user)?void 0:n.hasPublishedCharacter,hasInvitedUser:null==(a=s.user)?void 0:a.hasInvitedUser,createdAt:null==(o=s.user)?void 0:o.createdAt},e)?(0,G.P)((0,Q.ns)(),"chat:module.message.freeTierUpgradeHint",{defaultValue:"这次回复失败了。充值后可以换成其他模型再试。"}):null}function er(e){return"upstream_api"===e?"upstream_api":"platform"===e?"platform":"network"===e||"stream_transport"===e?"network":"unknown"}function en(e){if(!e||"object"!=typeof e)return!1;if("string"==typeof e.message&&""!==e.message.trim()||"string"==typeof e.msg&&""!==e.msg.trim()||"string"==typeof e.error&&""!==e.error.trim())return!0;if(e.error&&"object"==typeof e.error){let t=e.error;if("string"==typeof t.message&&""!==t.message.trim())return!0}return!1}function ea(e,t){let r=function(e,t){let r=e[t];if("string"==typeof r)return r.trim()||void 0}(e,"requestId");if(r)return r;let n=null==t?void 0:t.trim();return n&&n.length>0?n:void 0}var eo=r(56339),es=r(8779),ei=r(65229),el=r(82926),ed=r(77571),ec=r(78626),eu=r(9886),em=r(77711),ep=r(90777);async function eh(e){await new Promise(t=>setTimeout(t,e))}var eg=r(37481),ef=r(42109),ev=r(34081),eb=r(29533),ey=r(69257),ex=r(90376);async function ew(e,t){let r=(0,ei.L1)().replace(/\/api\/(?:backends\/chat-completions\/generate|chat\/completions)$/,"/api/chat/relay/resume"),n=new URLSearchParams({sessionId:e.sessionId,assistantMessageId:e.assistantMessageId});return fetch(`${r}?${n}`,{method:"GET",headers:(0,ed.getSessionTokenHeaders)(),credentials:"include",cache:"no-store",signal:t})}var ek=r(60181);let eS=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function eC(e,t){let r=e.getReader(),n=new TextDecoder,a=new ek.ZZ,o="",s="",i={},l=!1,d=!1,c=()=>{r.cancel().catch(()=>{})};t.signal.addEventListener("abort",c,{once:!0});let u=e=>{let t=(0,ek.RW)(e);"content"===t.type?o+=t.content??"":"reasoning"===t.type?s+=t.content??"":"metadata"===t.type?i={...i,...t.metadata}:"done"===t.type?l=!0:"error"===t.type&&(d=!0)},m=()=>`${s?`<think>${s}</think>`:""}${o}`;try{for(;;){if(t.signal.aborted)throw new DOMException("Cancelled","AbortError");let e=await r.read();if(t.signal.aborted)throw new DOMException("Cancelled","AbortError");
1if(e.done)break;for(let t of a.processChunk(n.decode(e.value,{stream:!0})))u(t);let o=m();o&&t.onUpdate({text:(0,eb.D)(o,{fixUnclosedFences:!1}),isStreaming:!0,streamingStatus:"receiving",isPendingResume:!1,isError:!1})}let e=a.flush();if(e&&u(e),!l||d||!m())return!1;return t.onUpdate({text:(0,eb.D)(m(),{fixUnclosedFences:!0}),isStreaming:!1,streamingStatus:"completed",isPendingResume:!1,isError:!1,dbMessageId:i.assistantMessageId??t.assistantMessageId,inputTokens:i.inputTokens,outputTokens:i.outputTokens,inputPoints:i.inputPoints,outputPoints:i.outputPoints,pendingSummaryPoints:i.pendingSummaryPoints,modelName:i.modelName,modelId:i.modelId,isTruncated:!0===i.truncated,isResponseAbnormal:!0===i.response_abnormal,freeRecoveryRemaining:i.freeRecoveryRemaining}),!0}finally{t.signal.removeEventListener("abort",c),await r.cancel().catch(()=>{}),r.releaseLock()}}async function eI(e){for(let o=0;o<3&&!(e.signal.aborted||Date.now()>=e.deadlineMs);o+=1){let s=new AbortController,i=()=>s.abort();e.signal.addEventListener("abort",i,{once:!0});let l=setTimeout(i,Math.max(0,e.deadlineMs-Date.now())),d=setTimeout(i,5e3);try{var t,r,n,a;let o=await ew(e,s.signal);if(clearTimeout(d),s.signal.aborted)return await (null==(r=o.body)?void 0:r.cancel()),!1;let i=o.headers.get("x-request-id");if(o.ok&&e.expectedRequestId&&i!==e.expectedRequestId)return await (null==(n=o.body)?void 0:n.cancel()),!1;if(o.ok&&o.body&&(null==(t=o.headers.get("content-type"))?void 0:t.includes("text/event-stream"))&&i&&eS.test(i)){if(e.onRequestId(i),await eC(o.body,{...e,signal:s.signal}))return!0}else if(await (null==(a=o.body)?void 0:a.cancel()),![404,502,503,504].includes(o.status))return!1}catch{if(e.signal.aborted)break}finally{clearTimeout(d),clearTimeout(l),e.signal.removeEventListener("abort",i)}o<2&&!e.signal.aborted&&await new Promise(t=>{let r,n=()=>{clearTimeout(r),e.signal.removeEventListener("abort",n),t()};r=setTimeout(n,250*(o+1)),e.signal.addEventListener("abort",n,{once:!0})})}return!1}var ej=r(82408),eM=r(58180);function eN(e){var t;return(null==(t=e.get("X-Request-ID"))?void 0:t.trim())||null}function eE(e){if("string"!=typeof e)return!1;let t=e.trim();return!(""===t||/^[{}[\]\s]+$/.test(t))}function e_(e,t,r){if(!t&&!r.current&&e)try{let t=JSON.parse(e),n=t.session_id??t.sessionId;"string"==typeof n&&n.trim().length>0&&(r.current=n)}catch{}}async function eT(e){if(!e)return;let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{done:e,value:a}=await t.read();if(e)break;a&&(n+=r.decode(a,{stream:!0}))}return(n+=r.decode())||void 0}finally{t.releaseLock()}}function eP(e,t){return 0===t.length||t.some(t=>e.some(e=>e.id===t.id))?e:[...e,...t]}var eR=r(99586),eA=r(77686),eL=r(97445);function eO(e){let{loading:t,onRetry:r}=e,{t:a}=(0,eL.Bd)("common");return(0,n.jsxs)("div",{role:"alert",className:"flex items-center justify-between gap-3 px-3 py-2 text-sm",style:{background:"var(--v2-bg-secondary)",color:"var(--v2-text-primary)"},children:[(0,n.jsx)("span",{children:a("branchHistory.failed")}),(0,n.jsx)("button",{type:"button",className:"btn-v2-secondary shrink-0",disabled:t,onClick:()=>void r(),children:a("branchHistory.retry")})]})}var eF=r(44147),e$=r(63328),eD=r(1259);function eB(e){return[...eD.Z3.dailyTasks.withStages(),"chat",e??"anonymous"]}function eq(e){return`yeyu_chat_daily_tasks_skip_bj_ymd:${e}`}function eH(e){let t=[];for(let r of e)for(let e of r.stages)t.push({stageId:e.id,taskTitle:r.title,stageNumber:e.stageNumber,targetCount:e.targetCount,rewardPoints:e.rewardPoints,isCompleted:e.isCompleted,canClaim:e.canClaim,isClaimed:e.isClaimed});return t}var ez=r(77497);let eU="data-chat-no-referrer";var eW=r(69691),eK=r(74195),eV=r(17308),eG=r(71673),eQ=r(90935),eY=r(80666),eX=r(67682),eJ=r(42939),eZ=r(11674),e0=r(69475);let e1=e=>{let{children:t,bottomSlot:r,backgroundImageUrl:o,showBackgroundImage:s=!0,enabled:i=!0,style:l,sidebarOffset:d=0}=e,c=(0,a.useRef)(null),[u,m]=(0,a.useState)(110),p=(0,a.useCallback)(()=>{c.current&&m(Math.max(Math.ceil(c.current.getBoundingClientRect().height)+2,88))},[]);if((0,a.useLayoutEffect)(()=>{p();let e=requestAnimationFrame(()=>p());return()=>cancelAnimationFrame(e)},[p]),(0,a.useEffect)(()=>
1{let e=c.current;if(!e||(p(),"u"<typeof ResizeObserver))return;let t=new ResizeObserver(()=>{p()});return t.observe(e),()=>{t.disconnect()}},[p]),!i)return(0,n.jsx)(n.Fragment,{children:t});let h={...l,"--sidebar-offset":(null==l?void 0:l["--sidebar-offset"])??`${d}px`};return(0,n.jsxs)("div",{id:"installedBuiltInCss",className:"relative w-full h-full min-h-0 overflow-x-hidden overflow-y-clip",style:h,children:[o&&s&&(0,n.jsx)("img",{src:o,alt:"",className:"chat-background-image not-toggle pointer-events-none",style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"center",opacity:0,transition:"opacity 0.5s ease-in-out"},onLoad:e=>{e.target.style.opacity="1"},ref:e=>{(null==e?void 0:e.complete)&&e.naturalWidth>0&&(e.style.transition="none",e.style.opacity="1")},"aria-hidden":"true",loading:"eager",decoding:"async",fetchPriority:"low"}),(0,n.jsx)("div",{className:"relative h-full min-h-0 flex flex-col","data-chat-content-area":"",style:{paddingBottom:r?`${u}px`:void 0},children:t}),r&&(0,n.jsx)("div",{ref:c,className:"bg-gradient-to-t from-white via-white to-transparent absolute w-full bottom-0 left-0 right-0 pb-[calc(0.375rem+var(--mobile-keyboard-safe-bottom,env(safe-area-inset-bottom,0px)))] md:pb-[calc(1rem+var(--mobile-keyboard-safe-bottom,env(safe-area-inset-bottom,0px)))]",children:(0,n.jsx)("div",{className:"relative z-[1] mx-auto w-full max-w-[720px] px-3 md:px-4",children:r})})]})};var e2=r(3631);let e4="guest_chat";function e5(){return{v:2,byCharacter:{}}}function e3(){try{var e=localStorage.getItem(e4);if(!e)return e5();try{let t=JSON.parse(e);if(t&&"object"==typeof t&&2===t.v&&"object"==typeof t.byCharacter&&null!==t.byCharacter)return t;if(t&&"object"==typeof t&&"string"==typeof t.characterId&&Array.isArray(t.messages))return{v:2,byCharacter:{[t.characterId]:{characterId:t.characterId,characterName:t.characterName??"",messages:t.messages}}}}catch{}return e5()}catch{return e5()}}function e8(e,t,r,n){let a=e3(),o=a.byCharacter[e];o?(t&&o.characterName!==t&&(o.characterName=t),o.messages.push({role:r,content:n,sentAt:Date.now()})):a.byCharacter[e]={characterId:e,characterName:t,messages:[{role:r,content:n,sentAt:Date.now()}]};try{localStorage.setItem(e4,JSON.stringify(a))}catch{}}function e6(e){let t=e3().byCharacter[e];return t&&0!==t.messages.length?t:null}function e7(e,t){if("{"!==e[t])return"";let r=0,n=t;for(;n<e.length;){if("{"===e[n])r++;else if("}"===e[n]&&0==--r)return e.slice(t,n+1);n++}return e.slice(t)}var e9=r(32655),te=r(84880),tt=r.n(te);function tr(e,t){let r=e.replace(/\\(?:([0-9a-fA-F]{1,6})[ \t\r\n\f]?|(\r\n|[\n\r\f])|([\s\S]))/g,(e,t,r,n)=>{if(t){let e=Number.parseInt(t,16);return 0===e||e>1114111||e>=55296&&e<=57343?"�":String.fromCodePoint(e)}return r?"":n??""});if(!r||r.startsWith("#")||/^[a-z][a-z\d+.-]*:/i.test(r))return null;try{return new URL(r,t).href.replace(/[\\"]/g,"\\$&")}catch{return null}}var tn=r(48230),ta=r.n(tn);function to(e){let{error:t}=e,r=(0,m.useRouter)(),{t:a}=(0,eL.Bd)("chat"),o=(null==t?void 0:t.message)??a("module.chatErrorPage.notFoundMessage"),s="string"==typeof o?o:a("module.chatErrorPage.loadFailed"),i=(null==t?void 0:t.code)==="UNAUTHORIZED",l=`/user/login?redirect=${encodeURIComponent(r.isReady?r.asPath:"/")}`;return(0,n.jsx)("div",{className:"min-h-screen flex items-center justify-center",style:{background:"var(--v2-bg-primary)"},children:(0,n.jsxs)("div",{className:"text-center max-w-md px-6",children:[(0,n.jsx)("h1",{className:"text-2xl font-bold text-v2-state-error mb-4",children:a(t?"module.chatErrorPage.loadCharacterFailed":"module.chatErrorPage.characterNotFound")}),(0,n.jsx)("p",{className:"text-v2-text-secondary mb-6",children:s}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-center gap-3",children:[i&&(0,n.jsx)(ta(),{href:l,children:(0,n.jsx)("button",{type:"button",className:"px-4 py-2 rounded-lg text-white hover:opacity-90 transition-opacity",style:{background:"var(--v2-btn-primary-bg)",boxShadow:"var(--v2-btn-primary-shadow)"},children:a("module.chatErrorPage.login")})}),(0,n.jsx)(ta(),{href:"/",children:(0,n.jsx)("button",{className:"px-4 py-2 bg-v2-accent text-white rounded-lg hover:bg-v2-accent-hover transition-colors",children:a("module.chatErrorPage.backHome")})})]})]})})}var ts=r(19114),ti=r(95224),tl=r(5716),td=r(45137),tc=r(92789),tu=r(31372),tm=r(71585);let tp=(0,a.memo)(function(e){let{characterName:t="",suggestedQuestions:r=[],onSelectQuestion:o,disabled:s=!1,suggestedTourKeepOpen:i,characterId:l,initialFavorited:d,onOpenRecharge:c,onBack:u}=e,{t:m}=(0,eL.Bd)("chat"),p=(0,tm.H)(),{isFavorited:h,isLoading:g,toggleFavorite:f}=(0,tu.h)(l??"",d),v=(0,a.useCallback)(()=>
1{if(u)return void u();let e=()=>{clearTimeout(t),window.removeEventListener("popstate",e)};window.addEventListener("popstate",e),window.history.back();let t=setTimeout(()=>{window.removeEventListener("popstate",e),window.location.href="/"},300)},[u]),b=r&&r.length>0,y=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{let e,t=y.current;if(!t)return;let r=t.closest("#chat-module-container");if(!r)return;let n=()=>{let e=Math.ceil(t.getBoundingClientRect().height);e>0&&r.style.setProperty("--chat-header-offset",`${e}px`)};n(),"u">typeof ResizeObserver&&(e=new ResizeObserver(n)).observe(t),window.addEventListener("resize",n),window.addEventListener("orientationchange",n);let a=window.visualViewport;return null==a||a.addEventListener("resize",n),null==a||a.addEventListener("scroll",n),()=>{null==e||e.disconnect(),window.removeEventListener("resize",n),window.removeEventListener("orientationchange",n),null==a||a.removeEventListener("resize",n),null==a||a.removeEventListener("scroll",n),r.style.removeProperty("--chat-header-offset")}},[]),(0,n.jsx)("header",{ref:y,className:"absolute top-0 left-0 right-0",style:{paddingTop:p.inset,background:"var(--v2-bg-primary)",borderBottom:"1px solid var(--v2-border-primary)",zIndex:999},children:(0,n.jsxs)("div",{className:"h-11 flex items-center justify-between px-2",children:[(0,n.jsx)("button",{type:"button",onClick:v,className:"mobile-compact flex items-center justify-center w-8 h-8 rounded-lg transition-v2-interactive duration-200 hover:bg-v2-bg-hover active:scale-95",style:{color:"var(--v2-text-secondary)"},"aria-label":m("module.chatHeader.back"),children:(0,n.jsx)(ts.A,{className:"w-5 h-5",strokeWidth:2.5})}),(0,n.jsx)("div",{className:"flex-1 flex justify-center items-center min-w-0 px-2",children:b&&o?(0,n.jsx)(tc.A,{questions:r,onSelectQuestion:o,disabled:s,tourKeepOpen:i}):(0,n.jsx)("h1",{className:"text-sm font-medium truncate",style:{color:"var(--v2-text-primary)"},children:t||m("module.chatHeader.fallbackTitle")})}),(0,n.jsxs)("div",{className:"flex items-center gap-0.5",children:[l&&(0,n.jsx)("button",{type:"button",onClick:f,disabled:g,className:"mobile-compact flex items-center justify-center w-8 h-8 rounded-lg transition-v2-interactive duration-200 hover:bg-v2-bg-hover active:scale-95 disabled:opacity-50","aria-label":h?"取消收藏":"收藏",children:h?(0,n.jsx)(td.A,{className:"w-5 h-5 text-red-500"}):(0,n.jsx)(ti.A,{className:"w-5 h-5",style:{color:"var(--v2-text-secondary)"},strokeWidth:2.2})}),(0,n.jsx)("button",{type:"button",onClick:c,className:"mobile-compact flex items-center justify-center w-8 h-8 rounded-lg transition-v2-interactive duration-200 hover:bg-v2-bg-hover active:scale-95 disabled:opacity-50",style:{color:"var(--v2-text-secondary)"},"aria-label":"充值礼包",title:"充值礼包",disabled:!c,children:(0,n.jsx)(tl.A,{className:"w-5 h-5",strokeWidth:2.2})})]})]})})});var th=r(35529),tg=r(58777),tf=r(79679),tv=r(39688),tb=r(69291),ty=r(7558),tx=r(2744),tw=r(27145),tk=r(67452);let tS=[{id:"quick-start",label:"Character settings",labelKey:"module.floatingSettings.quickStart",icon:(0,n.jsx)(tg.A,{className:"w-5 h-5"})},{id:"share",label:"Share work",labelKey:"module.floatingSettings.share",icon:(0,n.jsx)(tf.A,{className:"w-5 h-5"})},{id:"memory",label:"Memory settings",labelKey:"module.floatingSettings.memory",icon:(0,n.jsx)(tv.A,{className:"w-5 h-5"})},{id:"custom-config",label:"Custom config",labelKey:"module.floatingSettings.customConfig",icon:(0,n.jsx)(tb.A,{className:"w-5 h-5"})},{id:"mod",label:"Mod settings",labelKey:"module.floatingSettings.mod",icon:(0,n.jsx)(ty.A,{className:"w-5 h-5"})},{id:"page-settings",label:"Page settings",labelKey:"module.floatingSettings.pageSettings",icon:(0,n.jsx)(tx.A,{className:"w-5 h-5"})},{id:"model-params",label:"Model parameters",labelKey:"module.floatingSettings.modelParams",icon:(0,n.jsx)(tw.A,{className:"w-5 h-5"})}],tC=(0,a.memo)(function(e){let{onMenuItemClick:t,menuItems:r=tS,showOnMobile:s=!1}=e,{t:i}=(0,eL.Bd)("chat"),[l,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(!1),m=(0,a.useRef)(null),p=(0,a.useRef)(null),h=(0,a.useRef)({isDragging:!1,hasMoved:!1,startX:0,startY:0,startRight:4,startTop:0});(0,a.useEffect)(()=>{d(!0)},[]),(0,a.useEffect)(()=>
1{if(!l||!m.current)return;let e=(window.innerHeight-40)/2;h.current.startTop=e,m.current.style.top=e+"px",m.current.style.right="4px"},[l]),(0,a.useEffect)(()=>{let e=m.current;if(!e)return;let t=(t,r)=>{h.current.isDragging=!0,h.current.hasMoved=!1,h.current.startX=t,h.current.startY=r;let n=e.getBoundingClientRect();h.current.startRight=window.innerWidth-n.right,h.current.startTop=n.top},r=(t,r)=>{if(!h.current.isDragging)return;let n=h.current.startX-t,a=r-h.current.startY;(Math.abs(n)>5||Math.abs(a)>5)&&(h.current.hasMoved=!0);let o=Math.max(0,Math.min(window.innerWidth-40,h.current.startRight+n)),s=Math.max(0,Math.min(window.innerHeight-40,h.current.startTop+a));e.style.right=o+"px",e.style.top=s+"px"},n=()=>{h.current.isDragging=!1},a=e=>{e.preventDefault(),t(e.clientX,e.clientY)},o=e=>{t(e.touches[0].clientX,e.touches[0].clientY)},s=e=>r(e.clientX,e.clientY),i=e=>r(e.touches[0].clientX,e.touches[0].clientY);return e.addEventListener("mousedown",a),e.addEventListener("touchstart",o,{passive:!0}),document.addEventListener("mousemove",s),document.addEventListener("touchmove",i,{passive:!0}),document.addEventListener("mouseup",n),document.addEventListener("touchend",n),()=>{e.removeEventListener("mousedown",a),e.removeEventListener("touchstart",o),document.removeEventListener("mousemove",s),document.removeEventListener("touchmove",i),document.removeEventListener("mouseup",n),document.removeEventListener("touchend",n)}},[l]);let g=(0,a.useCallback)(()=>{h.current.hasMoved||u(e=>{let t=!e;return t&&(0,th.HZ)("floating_settings_menu_open",{}),t})},[]);(0,a.useEffect)(()=>{if(!c)return;let e=e=>{p.current&&!p.current.contains(e.target)&&m.current&&!m.current.contains(e.target)&&u(!1)},t=e=>{"Escape"===e.key&&u(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e,{passive:!0}),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("keydown",t)}},[c]);let f=(0,a.useCallback)(e=>{(0,th.HZ)("floating_settings_menu_item_click",{item_id:e}),u(!1),t(e)},[t]);if(!l)return null;let v=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{ref:m,className:`fixed ${s?"":"hidden md:block"} touch-none select-none`,style:{zIndex:9998,right:"4px"},children:(0,n.jsx)("button",{type:"button",onClick:g,className:"flex items-center justify-center rounded-full cursor-grab active:cursor-grabbing transition-[box-shadow,transform,border-color,background-color,color] duration-200 hover:scale-[1.06] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--v2-border-focus)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--v2-bg-primary)]",style:{width:40,height:40,backgroundColor:c?"var(--v2-state-info-bg)":"var(--v2-bg-card)",color:c?"var(--v2-accent-primary)":"var(--v2-text-secondary)",backdropFilter:"blur(10px)",border:c?"1px solid var(--v2-border-focus)":"1px solid var(--v2-border-primary)",boxShadow:c?"0 2px 8px color-mix(in srgb, var(--v2-accent-primary) 28%, transparent), 0 1px 2px rgba(0,0,0,0.06)":"0 1px 2px rgba(0,0,0,0.06), 0 4px 16px rgba(0,0,0,0.12), 0 0 0 1px rgba(255,255,255,0.85) inset"},"aria-label":i("module.floatingSettings.menu"),"aria-expanded":c,"aria-haspopup":"menu",children:(0,n.jsx)(tk.A,{className:"w-5 h-5 shrink-0",strokeWidth:2})})}),c&&(0,n.jsx)("div",{ref:p,role:"menu",className:"fixed py-1.5 min-w-[160px] rounded-lg border border-v2-border-primary bg-v2-bg-card shadow-v2-md animate-menu-fade-in-down",style:{zIndex:9999,top:m.current?m.current.getBoundingClientRect().top+40+4:"50%",right:m.current?window.innerWidth-m.current.getBoundingClientRect().right:4},children:r.map(e=>(0,n.jsxs)("button",{role:"menuitem",type:"button",onClick:()=>f(e.id),className:"w-full flex items-center gap-2.5 px-3.5 py-2 text-sm cursor-pointer transition-colors duration-200 hover:bg-v2-bg-hover active:bg-v2-bg-active",style:{color:"var(--v2-text-primary, #0f172a)"},children:[(0,n.jsx)("span",{className:"flex-shrink-0",style:{color:"var(--v2-text-secondary, #64748b)"},children:e.icon}),(0,n.jsx)("span",{children:e.labelKey?i(e.labelKey):e.label})]},e.id))})]});return(0,o.createPortal)(v,document.body)});var tI=r(97423),tj=r(29757),tM=r(85675),tN=r(65685),tE=r(53731),t_=r(67424),tT=r(27972),tP=r(60659),tR=r(63470),tA=r(17546
1),tL=r(51988),tO=r(24749),tF=r(55103);let t$=[{mode:"system",label:"module.speechModal.modeSystemTitle"},{mode:"community",label:"module.speechModal.modeCommunityTitle"},{mode:"custom",label:"module.speechModal.modeCustomTitle"}],tD=e=>{let{open:t,messageId:r,rawContent:s,onClose:i,onSuccess:l,onStartGenerating:d,onErrorOrCancel:c,onPlaySystemSpeech:u}=e,{t:m,i18n:p}=(0,eL.Bd)("chat"),[h,g]=(0,a.useState)("community"),[f,v]=(0,a.useState)(""),[b,y]=(0,a.useState)(!1),[x,w]=(0,a.useState)(!1),[k,S]=(0,a.useState)(!1),[C,I]=(0,a.useState)(!1),[j,M]=(0,a.useState)([]),[N,_]=(0,a.useState)(!1),[T,P]=(0,a.useState)(""),[R,A]=(0,a.useState)(""),[L,O]=(0,a.useState)(""),[F,$]=(0,a.useState)(!1),D=F||b,B=(0,a.useRef)(null),q=(0,a.useMemo)(()=>(0,tL.jQ)(s),[s]),H=q.length,z=(0,a.useMemo)(()=>(0,tO.xV)({charCount:H}),[H]);(0,a.useEffect)(()=>{if(!t||"custom"!==h||k)return;let e=!1;return I(!1),(0,tP.B0)(p).then(()=>{e||S(!0)}).catch(t=>{console.error("[ChatFishSpeechModal] load custom voice labels failed:",t),e||I(!0)}),()=>{e=!0}},[t,h,p,k]),(0,a.useEffect)(()=>{t&&0===j.length&&(_(!0),es.default.get("/api/image/comfy/voice-library/voices",{timeout:2e4}).then(e=>{var t,r;"object"==typeof(t=e.data)&&null!==t&&!0===t.success&&Array.isArray(t.voices)&&(M(e.data.voices),e.data.voices.length>0&&!T)&&P((null==(r=e.data.voices[0])?void 0:r.id)||"")}).catch(e=>{console.error("[ChatFishSpeechModal] load voices failed:",e)}).finally(()=>{_(!1)}))},[t,j.length,T]);let U=()=>{let e=B.current;B.current=null,null==e||e.pause(),O("")};(0,a.useEffect)(()=>(t||(U(),$(!1)),()=>{let e=B.current;B.current=null,null==e||e.pause()}),[t]);let W=(0,a.useMemo)(()=>{let e=R.trim().toLowerCase();return e?j.filter(t=>t.title.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e)||t.tags&&t.tags.some(t=>t.toLowerCase().includes(e))):j},[j,R]),K=(0,a.useMemo)(()=>j.find(e=>e.id===T),[j,T]),V="custom"===h?f:T,G="custom"===h?m("module.speechModal.modeCustomTitle"):(null==K?void 0:K.title)||m("module.speechModal.modeCommunityTitle"),Q=()=>{U(),F&&(null==c||c(r)),i()},Y=async()=>{var e,t;if(!V)return void E.oR.error(m("module.speechModal.selectVoiceFirst"));if(H<=0)return void E.oR.error(m("module.speechModal.emptyText"));$(!0),U(),null==d||d(r);try{let t=await es.default.post(`/api/chat/messages/${r}/speech`,{reference_id:V,voice_title:G},{timeout:6e5});t.data.success&&(null==(e=t.data.data)?void 0:e.audioUrl)?(E.oR.success(t.data.data.cached?m("module.speechModal.cachedSuccess"):m("module.speechModal.generateSuccess")),l(r,t.data.data.audioUrl,V,G),i()):(null==c||c(r),E.oR.error(t.data.error||m("module.speechModal.generateFailed")))}catch(n){null==c||c(r);let e=m("module.speechModal.generateFailed");if(n&&"object"==typeof n&&"response"in n&&(null==(t=n.response)?void 0:t.data)){let t=n.response.data;t&&"object"==typeof t&&("INSUFFICIENT_POINTS"===t.code?e=m("module.speechModal.insufficientPoints"):t.error&&(e=t.error))}E.oR.error(e)}finally{$(!1)}};return!t||"u"<typeof document?null:(0,o.createPortal)((0,n.jsx)("div",{className:"chat-modal-overlay fixed inset-0 z-[1200] flex items-center justify-center p-4",style:{backgroundColor:"var(--v2-bg-overlay)",paddingTop:"max(1rem, var(--top-safe-area-inset, env(safe-area-inset-top, 0px)))",paddingBottom:"max(1rem, env(safe-area-inset-bottom, 0px))"},onClick:e=>{e.target!==e.currentTarget||D||Q()},role:"dialog","aria-modal":"true","aria-label":m("module.speechModal.title"),children:(0,n.jsxs)("div",{className:"chat-modal-panel flex max-h-[85dvh] w-full max-w-md flex-col overflow-hidden rounded-2xl border border-v2-border-primary p-4 shadow-2xl sm:p-5",style:{backgroundColor:"var(--v2-bg-card)"},onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("div",{className:"mb-4 flex shrink-0 items-center justify-between gap-3",children:[(0,n.jsxs)("h2",{className:"flex items-center gap-2 text-base font-semibold text-v2-text-primary",children:[(0,n.jsx)(tF.pD,{className:"h-5 w-5 fill-current text-v2-accent-primary"}),m("module.speechModal.title")]}),(0,n.jsx)("button",{type:"button","aria-label":m("module.close"),onClick:Q,disabled:D,className:"-mr-2 flex h-11 w-11 items-center justify-center rounded-lg text-v2-text-tertiary transition-colors hover:bg-v2-bg-hover hover:text-v2-text-primary focus-visible:outline-v2-accent-primary disabled:opacity-50",children:(0,n.jsx)(tN.A,{className:"w-5 h-5"})})]}),(0,n.jsx)("div",{className:"mb-4 grid shrink-0 grid-cols-3 gap-1 rounded-lg bg-v2-bg-secondary/50 p-1",children:t$.map(e=>{let{mode:t,label:r}=e;return(0,n.jsx)("button",{type:"button","aria-pressed":h===t,disabled:D,onClick:()=>{U(),g(t),w(!1)},className:`min-h-9 rounded-md px-1 py-2 text-xs font-medium transition-colors focus-visible:outline-v2-accent-primary disabled:opacity-50 ${h===t?"bg-v2-bg-card text-v2-accent-primary shadow-sm":"text-v2-text-secondary hover:text-v2-text-primary"}`,children:m(r)},t)}
1)}),(0,n.jsxs)("div",{className:"min-h-0 space-y-3 overflow-y-auto overscroll-contain",children:[(0,n.jsxs)("section",{"aria-label":m("module.speechModal.textPreviewLabel"),children:[(0,n.jsxs)("div",{className:"mb-2 flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsx)("h3",{className:"text-sm font-semibold text-v2-text-primary",children:m("module.speechModal.textPreviewLabel")}),(0,n.jsxs)("span",{className:"text-xs tabular-nums text-v2-text-tertiary",children:[m("module.speechModal.charCountLabel")," \xb7 ",H]})]}),(0,n.jsx)("div",{className:"max-h-60 min-h-40 overflow-y-auto overscroll-contain rounded-xl border border-v2-border-primary bg-v2-bg-secondary/30 p-3.5 sm:min-h-48",children:(0,n.jsx)("p",{className:"whitespace-pre-wrap break-words text-sm leading-7 text-v2-text-primary",children:q||m("module.speechModal.emptyText")})})]}),"community"===h&&(0,n.jsxs)("div",{children:[(0,n.jsxs)("button",{type:"button","aria-expanded":x,disabled:F||N,onClick:()=>w(!x),className:"flex min-h-11 w-full items-center gap-2 rounded-lg border border-v2-border-primary px-3 py-2 text-left text-xs text-v2-text-secondary hover:bg-v2-bg-hover disabled:opacity-50",children:[K&&(0,n.jsx)(t_.A,{cover:K.cover,title:K.title,size:"1.5rem"}),(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate text-v2-text-primary",children:N?m("module.speechModal.loadingVoices"):(null==K?void 0:K.title)||m("module.speechModal.selectVoiceFirst")}),(0,n.jsx)("span",{children:m("module.speechModal.changeVoice")}),(0,n.jsx)(tE.A,{"aria-hidden":"true",className:`h-4 w-4 shrink-0 transition-transform ${x?"rotate-180":""}`})]}),x&&(0,n.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,n.jsx)("input",{type:"search","aria-label":m("module.speechModal.searchPlaceholder"),value:R,onChange:e=>A(e.target.value),placeholder:m("module.speechModal.searchPlaceholder"),className:"min-h-10 w-full rounded-lg border border-v2-border-primary bg-v2-bg-secondary/50 px-3 py-2 text-sm text-v2-text-primary placeholder:text-v2-text-tertiary focus:border-v2-accent-primary focus:outline-hidden"}),(0,n.jsx)("div",{className:"max-h-40 space-y-1 overflow-y-auto overscroll-contain",children:0===W.length?(0,n.jsx)("p",{className:"py-4 text-center text-xs text-v2-text-secondary",children:m("module.speechModal.noVoicesFound")}):W.map(e=>(0,n.jsxs)("div",{className:`flex items-center gap-1 rounded-lg ${e.id===T?"bg-v2-bg-secondary":"hover:bg-v2-bg-hover"}`,children:[(0,n.jsxs)("button",{type:"button","aria-pressed":e.id===T,disabled:F,onClick:()=>{U(),P(e.id),w(!1)},className:"flex min-h-11 min-w-0 flex-1 items-center gap-2 px-2 text-left text-sm text-v2-text-primary",children:[(0,n.jsx)(tj.A,{"aria-hidden":"true",className:`h-4 w-4 shrink-0 text-v2-accent-primary ${e.id===T?"":"invisible"}`}),(0,n.jsx)("span",{className:"truncate",children:e.title})]}),(0,n.jsx)("button",{type:"button",disabled:F,onClick:()=>(e=>{if(L===e.id)return void U();let t=(0,tR.ML)(e.sampleUrl);if(!t)return void E.oR.error(m("module.speechModal.noPreviewSample"));U();let r=new Audio(t);B.current=r,O(e.id);let n=e=>{B.current===r&&(U(),(0,tA.V)(r.error??e))};r.addEventListener("ended",()=>{B.current===r&&U()}),r.addEventListener("error",n);try{r.play().catch(n)}catch(e){n(e)}})(e),className:"min-h-11 shrink-0 px-3 text-xs text-v2-accent-primary",children:L===e.id?m("module.speechModal.stop"):m("module.speechModal.preview")})]},e.id))})]})]}),"custom"===h&&(f?(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 text-xs",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5 text-v2-success",children:[(0,n.jsx)(tj.A,{"aria-hidden":"true",className:"h-4 w-4"}),m("module.speechModal.customVoiceReady")]}),(0,n.jsx)("button",{type:"button",disabled:F,onClick:()=>v(""),className:"min-h-10 px-2 text-v2-text-secondary hover:text-v2-text-primary",children:m("module.speechModal.customVoiceReplace")})]}):k?(0,n.jsx)(tT.C,{cloneOnly:!0,disabled:F,onCloneBusyChange:y,source:"custom",onSourceChange:()=>void 0,communityVoiceId:T,onCommunityVoiceIdChange:P,customVoiceId:f,onCustomVoiceIdChange:v,text:q,onTextChange:()=>void 0}):(0,n.jsx)("p",{role:C?"alert":"status",className:"text-xs text-v2-text-secondary",children:m(C?"module.speechModal.generateFailed":"module.speechModal.loadingVoices")}))]}),(0,n.jsxs)("div",{className:"mt-3 flex shrink-0 items-center justify-between gap-3 border-t border-v2-border-primary pt-3 text-xs","aria-live":"polite","aria-atomic":"true",children:[(0,n.jsx)("span",{className:"text-v2-text-tertiary",children:m("module.speechModal.pointsCostLabel")}),(0,n.jsx)("strong",{className:`text-base tabular-nums ${"system"===h?"text-v2-success":"text-v2-accent-primary"}`,children:"system"===h?m("module.speechModal.freeCost"):z})]}),(0,n.jsx)("button",{type:"button",className:"btn-v2-primary mt-3 flex min-h-12 w-full shrink-0 items-center justify-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold focus-visible:outline-v2-accent-primary disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>
1{"system"===h?(U(),null==u||u(r,s),i()):Y()},disabled:D||"system"!==h&&(!V||H<=0),children:F?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"}),(0,n.jsx)("span",{children:m("module.speechModal.generating")})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(tM.A,{"aria-hidden":"true",className:"h-4 w-4 shrink-0"}),(0,n.jsx)("span",{children:m("system"===h?"module.speechModal.submitSystem":"module.speechModal.confirm")})]})})]})}),document.body)};var tB=r(35222),tq=r(7600),tH=r(35003);let tz=[{id:"streaming",labelKey:"module.mobileActionPanel.streaming",iconPath:"M13 10V3L4 14h7v7l9-11h-7z",callbackKey:"onToggleStreaming",isToggle:!0},{id:"model",labelKey:"module.mobileActionPanel.model",iconPath:"M9 3v2m6-2v2M9 19v2m6-2v2M3 9h2m-2 6h2m14-6h2m-2 6h2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z",callbackKey:"onOpenCustomConfig"},{id:"history",labelKey:"module.mobileActionPanel.history",iconPath:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z",callbackKey:"onOpenChatHistory"},{id:"new-chat",labelKey:"module.mobileActionPanel.newChat",iconPath:"M12 9v6m3-3H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z",callbackKey:"onNewChat"},{id:"persona",labelKey:"module.mobileActionPanel.persona",iconPath:"M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z",callbackKey:"onOpenPersona"},{id:"page-settings",labelKey:"module.mobileActionPanel.pageSettings",iconPath:"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z",callbackKey:"onOpenPageSettings"},{id:"memory",labelKey:"module.mobileActionPanel.memory",iconPath:"M8 9h8m-8 4h6m-6 4h8M5 3h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2z",callbackKey:"onOpenMemorySettings"},{id:"model-params",labelKey:"module.mobileActionPanel.modelParams",iconPath:"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.204-.107-.397.165-.71.505-.78.929l-.15.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.506-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.108-1.204l-.526-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z",callbackKey:"onOpenModelParams"}],tU=(0,a.memo)(function(e){let{isOpen:t,onClose:r,isStreamingEnabled:o,onToggleStreaming:s,onOpenCustomConfig:i,onOpenChatHistory:l,onNewChat:d,onOpenPersona:c,onOpenPageSettings:u,onOpenMemorySettings:m,onOpenModelParams:p}=e,{t:h}=(0,eL.Bd)("chat"),g=(0,a.useRef)(null),f={onToggleStreaming:s,onOpenCustomConfig:i,onOpenChatHistory:l,onNewChat:d,onOpenPersona:c,onOpenPageSettings:u,onOpenMemorySettings:m,onOpenModelParams:p};(0,a.useEffect)(()=>{if(!t)return;let e=e=>{g.current&&!g.current.contains(e.target)&&r()};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e,{passive:!0}),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}},[t,r]);let v=(0,a.useCallback)(e=>{let t=f[e.callbackKey];null==t||t(),e.isToggle||r()},[r,s,i,l,d,c,u,m,p]);return(0,n.jsx)("div",{ref:g,className:"md:hidden overflow-hidden",role:"region","aria-label":h("module.mobileActionPanel.aria"),children:(0,n.jsx)("div",{className:`
2          grid grid-cols-4 gap-2 px-3 pt-3 pb-2
3          bg-white
4          transition-v2-interactive duration-200 ease-in-out
5          ${t?"max-h-[200px] opacity-100":"max-h-0 opacity-0 py-0 px-0"}
6        `,style:{transitionProperty:"max-height, opacity, padding"},children:tz.map(e=>{let t=e.isToggle&&o;return(0,n.jsxs)("button",{type:"button",onClick:()=>v(e),className:`
7                flex flex-col items-center justify-center gap-1
8                py-2 rounded-lg cursor-pointer
9                transition-colors duration-200
10                motion-reduce:transition-none
11                ${t?"bg-blue-50 text-blue-600":"text-gray-600 hover:bg-gray-50 active:bg-gray-100"}
12              `,"aria-label":h(e.labelKey),"aria-pressed":e.isToggle?o:void 0,children:[(0,n.jsx)("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:1.5,"aria-hidden":"true",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:e.iconPath})}),(0,n.jsxs)("span",{className:"text-[10px] leading-tight truncate w-full text-center",children:[h(e.labelKey),e.isToggle&&(0,n.jsx)("span",{className:"ml-0.5 font-medium",children:o?h("module.mobileActionPanel.streamingOn"):h("module.mobileActionPanel.streamingOff")})]})]},e.id)})})})}
12),tW="bubble-opacity-style",tK="--chat-bubble-alpha",tV="#installedBuiltInCss",tG="rgb(243, 244, 246)",tQ=`var(--chat-ai-bg, var(--v2-chat-message-ai, var(--v2-chat-bubble-bg, ${tG})))`,tY=`var(--chat-user-bg, var(--v2-chat-message-user, var(--v2-chat-bubble-bg, ${tG})))`;function tX(e){return`bubble-opacity-${e}`}function tJ(e){try{let t=localStorage.getItem(tX(e));if(null!==t){let r=Number(t);if(!Number.isFinite(r))return 90;if(r>=0&&r<=1){let t=Math.round(100*r);return localStorage.setItem(tX(e),String(t)),t}return Math.max(0,Math.min(100,Math.round(r)))}}catch{}return 90}function tZ(e){if("u">typeof document){if(null===e)return void document.documentElement.style.removeProperty(tK);document.documentElement.style.setProperty(tK,String(e))}}function t0(e){let t=e/100;tZ(t);let r=document.getElementById(tW);r||((r=document.createElement("style")).id=tW,document.head.appendChild(r));let n=Number(((1-t)*100).toFixed(2));r.textContent=`
13    /* AI 气泡 */
14    ${tV} .chat-answer-container .bg-gray-100\\/90.relative.inline-block,
15    ${tV} .chat-answer-container .chat-message:not(.html-message-content) {
16      /* 兜底:不支持 color-mix 的内核也必须保留可见背景 */
17      background: ${tQ};
18      background-color: ${tQ};
19      background: color-mix(in srgb, ${tQ}, transparent ${n}%);
20      background-color: color-mix(in srgb, ${tQ}, transparent ${n}%);
21    }
22    /* 用户气泡:与 AI 相同策略,仅背景 alpha 变化,文字不受影响 */
23    ${tV} .chat-message.user-message.bg-gray-100\\/90,
24    ${tV} .flex.flex-row-reverse .chat-message.user-message {
25      background: ${tY};
26      background-color: ${tY};
27      background: color-mix(in srgb, ${tY}, transparent ${n}%);
28      background-color: color-mix(in srgb, ${tY}, transparent ${n}%);
29    }
30  `}function t1(){tZ(null);let e=document.getElementById(tW);e&&e.remove()}var t2=r(28458);let t4="chat-stream-auto-scroll";var t5=r(70206),t3=r(84038);let t8="yeyu_chat_task_reward_toast_shown_bj_ymd";function t6(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();return!function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now(),t=(0,e$.XQ)(e);return function(){try{return window.localStorage.getItem(t8)}catch{return null}}()===t}(e)}var t7=r(28157),t9=r(85695);function re(e){let{status:t}=e,{t:r,i18n:o}=(0,eL.Bd)("chat"),[s,i]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{if(!(null==t?void 0:t.available)||!t.expiresAt)return;let e=t.serverNow-Date.now();i(t.serverNow);let r=window.setInterval(()=>i(Date.now()+e),3e4);return()=>window.clearInterval(r)},[null==t?void 0:t.available,null==t?void 0:t.expiresAt,null==t?void 0:t.serverNow]);let l=(0,a.useMemo)(()=>{if(!(null==t?void 0:t.expiresAt))return"";let e=t.expiresAt-s;if(e<=0)return"";let r=Math.max(1,Math.ceil(e/6e4)),n=r>=60?Math.ceil(r/60):r;return new Intl.RelativeTimeFormat(o.language,{numeric:"always"}).format(n,r>=60?"hour":"minute")},[o.language,s,null==t?void 0:t.expiresAt]);return(null==t?void 0:t.available)&&!(t.remaining<=0)&&t.expiresAt&&!(t.expiresAt<=s)&&l?(0,n.jsx)("div",{role:"status",className:"mx-3 mb-1 rounded-lg border px-3 py-1.5 text-center text-xs",style:{backgroundColor:"var(--v2-state-success-bg)",borderColor:"var(--v2-border-primary)",color:"var(--v2-state-success)"},children:r("module.chatTrialBanner",{count:t.remaining,time:l})}):null}let rt=i()(()=>Promise.all([r.e(5241),r.e(5209),r.e(4699),r.e(3489)]).then(r.bind(r,74699)),{loadableGenerated:{webpack:()=>[74699]},ssr:!1}),rr=i()(()=>Promise.all([r.e(4727),r.e(6735),r.e(6742)]).then(r.bind(r,86735)),{loadableGenerated:{webpack:()=>[86735]},ssr:!1}),rn=i()(()=>Promise.all([r.e(5241),r.e(5209),r.e(3867),r.e(8566)]).then(r.bind(r,63867)).then(e=>({default:e.QuickRegisterModal})),{loadableGenerated:{webpack:()=>[63867]},ssr:!1}),ra=i()(()=>r.e(8398).then(r.bind(r,18398)),{loadableGenerated:{webpack:()=>[18398]},ssr:!1}),ro=i()(()=>Promise.all([r.e(1950),r.e(9922),r.e(9785)]).then(r.bind(r,19922)),{loadableGenerated:{webpack:()=>[19922]},ssr:!1}),rs=i()(()=>r.e(4851).then(r.bind(r,54851)),{loadableGenerated:{webpack:()=>[54851]},ssr:!1}),ri=i()(()=>r.e(2537).then(r.bind(r,72537)),{loadableGenerated:{webpack:()=>[72537]},ssr:!1}),rl=i()(()=>r.e(5912).then(r.bind(r,85912)),{loadableGenerated:{webpack:()=>[85912]},ssr:!1}),rd=i()(()=>r.e(883).then(r.bind(r,90883)),{loadableGenerated:{webpack:()=>[90883]},ssr:!1}),rc=i()(()=>Promise.resolve().then(r.bind(r,78626)),{loadableGenerated:{webpack:()=>[78626]},ssr:!1}),ru=i()(()=>r.e(2844).then(r.bind(r,82844)),{loadableGenerated:{webpack:()=>[82844]},ssr:!1}),rm=i()(()=>Promise.all([r.e(9917),r.e(4872),r.e(690),r.e(5239)]).then(r.bind(r,42331)).then(e=>({default:e.CustomConfigModal})),{loadableGenerated:{webpack:()=>[42331]},ssr:!1}),rp=i()(()=>r.e(4032).then(r.bind(r,84032)),{loadableGenerated:{webpack:()=>[84032]},ssr:!1}),rh=i()(()=>r.e(3006).then(r.bind(r,3006)),{loadableGenerated:{webpack:()=>[3006]},ssr:!1}),rg=i()(()=>Promise.all([r.e(1652),r.e(463)]).then(r.bind(r,61652)).then(e=>({default:e.CharacterCommunitySection})),{loadableGenerated:{webpack:()=>[61652]},ssr:!1}),rf="comfy:inline:draft:v1:";function rv(e){return!!e&&(!1===e.canChat||!0!==e.canChat&&"deleted"===e.status)}function rb(e){if(Array.isArray(e))return e;if("string"==typeof e){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return e}catch{}}return[]}function ry(e,t,r){if(!e||"object"!=typeof e)return console.warn("[normalizeCharacterForChat] 收到无效的角色数据:",typeof e),{id:t||"unknown",title:r};let n=((null==e?void 0:e.title)??(null==e?void 0:e.name)??(null==e?void 0:e.character_name)??(null==e?void 0:e.characterName)??"").toString(),a=((null==e?void 0:e.name)??(null==e?void 0:e.title)??"").toString()||void 0,o=((null==e?void 0:e.id)??t??"").toString();o||console.warn("[normalizeCharacterForChat] 角色数据缺少 id 字段:",Object.keys(e));let s=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];for(let e of t){if("string"!=typeof e)continue;let t=e.trim();if(t&&(t.startsWith("http://")||t.startsWith("https://")||t.startsWith("/")||t.includes("/")))return t}}(null==e?void 0:e.thumbnail,null==e?void 0:e.cover_tiny,null==e?void 0:e.cover),i=(null==e?void 0:e.recommendedModelId)??(null==e?void 0:e.recommended_model_id),l="string"==typeof i&&i.trim()?i.trim():null,d=(null==e?void 0:e.builtInCss)??(null==e?void 0:e.built_in_css)??null,c=rb(null==e?void 0:e.suggested_questions).filter(e=>"string"==typeof e),u=rb(null==e?void 0:e.shortcut_commands).filter(e=>!!e&&"object"==typeof e&&"string"==typeof e.label),m=rb(null==e?void 0:e.cg_book).filter(e=>!!e&&"object"==typeof e&&"string"==typeof e.id&&Array.isArray(e.assets)),p=rb(null==e?void 0:e.regex_replaces).filter(e=>!!e&&"object"==typeof e&&"string"==typeof e.matchRegex);return{...e,id:o||t||"unknown",title:n||r,name:a,thumbnail:s,recommendedModelId:l,builtInCss:d,suggested_questions:c,shortcut_commands:u,cg_book:m,regex_replaces:p}}let rx="b19fbb76-d044-485b-b85e-8a5df115139e",rw=`chat_tour_ad_landing_${rx}`,rk=function(e){let{characterId:t,showSessionSidebar:s=!0,showLeftSidebar:i=!0,loadHistory:g=!0,onSave:_,onPublish:T,isSaving:P=!1,isPublishing:B=!1,className:q="",inputPositionMode:H="fixed",showMobileHeader:z=!1,overrideDescription:W,overrideBuiltInCss:G,overrideOpeningStatement:Y,overrideSuggestedQuestions:ew,overrideShortcutCommands:ek,overrideBgImage:eS,overrideBgMobile:eC,overrideRegexReplaces:eD,initialCharacterData:e5,skipCharacterFetch:te=!1,onToggleSidebar:tn,onCharacterLoaded:ta,onHandleReady:ts,authorPreviewMode:ti=!1,initialFavorited:tl,onNavigateParallelSpace:td,onPreviewRecommendedModelChange:tc,ssrInitialStateData:tu,previewFixtureMessages:tm,shareSnapshotMode:th=!1}=e,{t:tg,i18n:tf}=(0,eL.Bd)("chat");(0,a.useLayoutEffect)(()=>
30{if(document.head.querySelector(`meta[${eU}]`))return;let e=document.createElement("meta");return e.setAttribute("name","referrer"),e.setAttribute("content","no-referrer"),e.setAttribute(eU,"1"),document.head.insertBefore(e,document.head.firstChild),()=>{e.remove()}},[]);let tv=tf.exists("module.quickStartTourTitle",{ns:"chat"}),tb=(0,a.useMemo)(()=>(0,t3.Tp)(),[]),ty=(0,m.useRouter)(),tx=(0,l.jE)(),tw=(0,a.useMemo)(()=>"string"==typeof t?t.replace(/\/+$/,"").trim():"",[t]),tk=(0,a.useMemo)(()=>{let e=ty.query.preview,t=Array.isArray(e)?e[0]:e;return ti||"1"===t||"true"===t||"string"==typeof ty.asPath&&ty.asPath.startsWith("/user/chat-preview")},[ti,ty.query.preview,ty.asPath]),tS=(0,a.useMemo)(()=>{let e=ty.query.ad,t=Array.isArray(e)?e[0]:e;return"1"===t||"true"===t},[ty.query.ad]),tM=(0,a.useMemo)(()=>!!tS&&tw.toLowerCase()===rx.toLowerCase(),[tS,tw]);(0,a.useEffect)(()=>{tM&&(0,c.M)()},[tM]);let{isMobile:tE,isHydrated:t_}=(0,ez.X)(),{confirm:tT,dialog:tP}=function(){let{t:e}=(0,eL.Bd)("chat"),[t,r]=(0,a.useState)(null),s=(0,a.useRef)(null),i=(0,a.useCallback)(e=>new Promise(t=>{s.current&&s.current(!1),s.current=t,r({message:e})}),[]),l=(0,a.useCallback)(e=>{let t=s.current;s.current=null,r(null),null==t||t(e)},[]),d=(0,a.useCallback)(e=>{e.target===e.currentTarget&&l(!1)},[l]);return{confirm:i,dialog:t&&"u">typeof document?(0,o.createPortal)((0,n.jsxs)("div",{className:"fixed inset-0 z-[999] flex items-center justify-center px-4",onClick:d,role:"dialog","aria-modal":"true","aria-label":t.message,children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-black/40"}),(0,n.jsxs)("div",{className:"relative bg-v2-bg-card shadow-2xl rounded-xl w-full max-w-sm mx-4 p-5",children:[(0,n.jsx)("p",{className:"text-sm text-v2-text-primary leading-relaxed whitespace-pre-line mb-5",children:t.message}),(0,n.jsxs)("div",{className:"flex justify-end gap-3",children:[(0,n.jsx)("button",{type:"button",onClick:()=>l(!1),className:"px-4 py-2 text-sm text-v2-text-primary border border-v2-border-primary rounded-lg hover:bg-v2-bg-hover cursor-pointer transition-colors duration-200",children:e("module.cancel")}),(0,n.jsx)("button",{type:"button",onClick:()=>l(!0),className:"px-4 py-2 text-sm text-white bg-red-600 hover:bg-red-700 rounded-lg cursor-pointer transition-colors duration-200",children:e("module.confirm")})]})]})]}),document.body):null}}(),{user:tR,isAuthenticated:tA}=(0,C.useUserStore)((0,j.k)(e=>({user:e.user,isAuthenticated:e.isAuthenticated}))),tO=(0,C.useUserStore)(e=>e.checkAuthStatus),tF=(0,C.useUserStore)(e=>e.setUser),t$=(0,C.useUserStore)(e=>{var t;return(null==(t=e.user)?void 0:t.points)??0}),tz=tA&&t$>0&&t$<5e3,tW=(0,k.MT)(tA,null==tR?void 0:tR.totalRecharged,null==tR?void 0:tR.hasPaidMembershipCard,null==tR?void 0:tR.hasPublishedCharacter,null==tR?void 0:tR.hasInvitedUser),tK=(0,a.useMemo)(()=>["chat","trial-status",(null==tR?void 0:tR.id)??"anonymous"],[null==tR?void 0:tR.id]),tV=tW&&!tk&&!th,{data:tG,isPending:tQ,isError:tY}=(0,d.I)({queryKey:tK,queryFn:ev.xM,enabled:tV,staleTime:3e4,retry:1}),[tZ,rb]=(0,a.useState)(()=>Date.now()),rk=(0,a.useRef)(0);(0,a.useEffect)(()=>{if((null==tG?void 0:tG.serverNow)&&(rk.current=tG.serverNow-Date.now(),rb(tG.serverNow)),!(null==tG?void 0:tG.expiresAt))return;let e=()=>Date.now()+rk.current,t=Math.max(0,tG.expiresAt-e()),r=window.setTimeout(()=>rb(e()),t+50);return()=>window.clearTimeout(r)},[null==tG?void 0:tG.expiresAt,null==tG?void 0:tG.serverNow]);let rS=(0,a.useCallback)(e=>{let t=Date.now()+rk.current;tx.setQueryData(tK,{available:e.remaining>0&&t<e.expiresAt,remaining:e.remaining,expiresAt:e.expiresAt,serverNow:t})},[tK,tx]),rC=(0,t7.bv)({hasLowBalance:tz,shouldLoadTrialStatus:tV,isTrialStatusPending:tQ,isTrialStatusError:tY,trialStatus:tG,now:tZ}),rI=(0,a.useMemo)(()=>(0,t7.tg)({isAuthenticated:tA,isFreeTierUser:tW,createdAt:null==tR?void 0:tR.createdAt,trialStatus:tG,now:tZ}),[tZ,tG,tA,tW,null==tR?void 0:tR.createdAt]),rj=rI.shouldLock,rM=rI.lockedModelId,rN=rI.preferredDefaultModelId;(0,a.useEffect)(()=>{(0,k.ME)()},[]);let rE=(0,a.useCallback)(()=>{let e=(0,eW.oG)(ty.asPath);e.isRecordedSource&&(0,eK.is)(e.path),ty.replace(e.path)},[ty]);(0,a.useEffect)(()=>(ty.beforePopState(e=>{let{url:t}=e;if(!C.useUserStore.getState().isAuthenticated)return!0;let r=t.split("?")[0];return"/user/login"!==r&&"/user/register"!==r||(rE(),!1)}),()=>{ty.beforePopState(()=>!0)}),[rE,ty]),(0,a.useMemo)(()=>!1,[tR]);let[r_,rT]=(0,a.useState)(()=>(null==tu?void 0:tu.character)?tu:null),[rP,rR]=(0,a.useState)(()=>(null==tu?void 0:tu.character)?ry(tu.character,tw,tg("module.unnamedCharacter")):null),[rA,rL]=(0,a.useState)(()=>!(null==tu?void 0:tu.character)),[rO,rF]=(0,a.useState)(null),[r$,rD]=(0,a.useState)(null),[rB,rq]=(0,a.useState)(!1),[rH,rz]=(0,a.useState)(!0),[rU,rW]=(0,a.useState)(!1),rK=(0,a.useRef)(!1),rV=(0,a.useCallback)(()=>{N.Hu?(rK.current=!0,rW(!0)):ty.replace((0,N.pE)(ty.asPath))},[ty]),[rG,rQ]=(0,a.useState)(null),rY=(0,a.useRef)(!1),rX=(0,a.useRef)(tc);(0,a.useEffect)(()=>{rX.current=tc},[tc]);let[rJ,rZ]=(0,a.useState)(!1),[r0,r1]=(0,a.useState)([]),[r2,r4]=(0,a.useState)([]),[r5,r3]=(0,a.useState)(""),r8=(0,a.useRef)(null),r6=(0,a.useRef)(null),[r7,r9]=(0,a.useState)(!1),[ne,nt]=(0,a.useState)(!1),[nr,nn]=(0,a.useState)(null),[na,no]=(0,a.useState)(!1),[ns,ni]=(0,a.useState)(""),[nl,nd]=(0,a.useState)(!1),[nc,nu]=(0,a.useState)(!1),[nm,np]=(0,a.useState)(!1),[nh,ng]=(0,a.useState)(!1),[nf,nv]=(0,a.useState)("send"),[nb,ny]=(0,a.useState)(!1),[nx,nw]=(0,a.useState)(!1),[nk,nS]=(0,a.useState)(null),[nC,nI]=(0,a.useState)(!1),[nj,nM]=(0,a.useState)(0),[nN,nE]=(0,a.useState)(!1),[n_,nT]=(0,a.useState)("public"),[nP,nR]=(0,a.useState)(""),[nA,nL]=(0,a.useState)(0),[nO,nF]=(0,a.useState)(!1),n$=(0,a.useCallback)(e=>{nT((null==e?void 0:e.tab)??"public"),nR((null==e?void 0:e.publicModType)??""),nL(e=>e+1),nE(!0)},[]),nD=(0,a.useCallback)(()=>{n$({tab:"public",publicModType:"jailbreak"})},[n$]);(0,a.useEffect)(()=>{let e=ty.query.openComments;("1"===e||"true"===e)&&nF(!0)},[ty.query.openComments]);let[nB,nq]=(0,a.useState)(!1),[nH,nz]=(0,a.useState)(!1);(0,a.useLayoutEffect)(()=>{!tw||!tA||tk||th||null!=tu&&tu.character||ev.Pt.getInitialState(tw)},[tw,tA,tk,th,null==tu?void 0:tu.character]);let{settings:nU,isLoading:nW,updateSettings:nK,resetModelParams:nV,refresh:nG}=(0,tq.c)(tw||t,(null==r_?void 0:r_.settings)??(null==tu?void 0:tu.settings)),{selectedMods:nQ,fetchSelections:nY}=(0,tH.D)(tA?tw||t:void 0),nX=function(e){let[t,r]=(0,a.useState)(()=>tJ(e)),[n,o]=(0,a.useState)(()=>{try{let t=localStorage.getItem(`${tX(e)}-enabled`);return null===t||"true"===t}catch{return!0}});(0,a.useEffect)(()=>{r(tJ(e));try{let t=localStorage.getItem(`${tX(e)}-enabled`);o(null===t||"true"===t)}catch{}},[e]),(0,a.useEffect)(()=>(n?t0(t):t1(),()=>t1()),[n,t]);let s=(0,a.useCallback)(t=>{let a=Math.max(0,Math.min(100,Math.round(t)));r(a);try{localStorage.setItem(tX(e),String(a))}catch{}n&&t0(a)},[e,n]),i=(0,a.useCallback)(r=>{o(r);try{localStorage.setItem(`${tX(e)}-enabled`,String(r))}catch{}r?t0(t):t1()},[e,t]);return{opacity:t,enabled:n,setOpacity:s,setEnabled:i}}(tw||t),nJ=(0,t2.K$)(),nZ=function(){let[e,t]=(0,a.useState)(()=>(function(){try{let e=localStorage.getItem(t4);if(null===e)return!1;return"1"===e||"true"===e}catch{}return!1})());return{enabled:e,setEnabled:(0,a.useCallback)(e=>{t(e);try{localStorage.setItem(t4,e?"1":"0")}catch{}},[])}}(),n0=(0,a.useMemo)(()=>
30{if(!nU.bgEnabled)return;let e=function(e){let{selectedMods:t,selectedModBg:r,overrideBgImage:n,overrideBgMobile:a,characterBgImage:o,characterBgMobile:s,isMobile:i}=e;for(let e of t){let t=r.find(t=>t.id===e);if(!t)continue;let n=i&&t.bg_mobile||t.bg_image;if(n)return n}let l=i?a:n;return l||(i?s:o)}({selectedMods:nQ,selectedModBg:(null==r_?void 0:r_.selectedModBg)??(null==tu?void 0:tu.selectedModBg)??[],overrideBgImage:eS,overrideBgMobile:eC,characterBgImage:null==rP?void 0:rP.bg_image,characterBgMobile:null==rP?void 0:rP.bg_mobile,isMobile:tE});return e?(0,eV.C5)(e):void 0},[nU.bgEnabled,nQ,null==r_?void 0:r_.selectedModBg,null==tu?void 0:tu.selectedModBg,eS,eC,rP,tE]),n1=(0,a.useCallback)(e=>ry(e,tw||t||"",tg("module.unnamedCharacter")),[tw,t,tg]),n2=(0,a.useRef)({onMessagesLoad:()=>{},onMessagesClear:()=>{},onInitializeOpeningMessage:()=>{},onCancelStreaming:()=>{},getCurrentMessages:()=>[]}),{isOpen:n4,openModal:n5,closeModal:n3,handlePaymentComplete:n8,initialMode:n6,analyticsSource:n7}=(0,S.$)(),n9=(0,a.useCallback)(async()=>{if(!tA)return void rV();let e=C.useUserStore.getState().user;try{let t=await (0,I.qB)();(null==t?void 0:t.profile)&&(tF(t.profile),(0,I.MI)(tx,t),e=t.profile)}catch{}if(!(0,k.MT)(!0,null==e?void 0:e.totalRecharged,null==e?void 0:e.hasPaidMembershipCard,null==e?void 0:e.hasPublishedCharacter,null==e?void 0:e.hasInvitedUser))return;let t=tx.getQueryData(tK);try{t=await tx.fetchQuery({queryKey:tK,queryFn:ev.xM,staleTime:0})}catch{}(0,t7.wf)(t)||(n5(),E.default.error(tg("module.modelSelector.rechargeRequiredToSwitch")))},[tK,tA,rV,n5,tx,tF,tg]),ae=(0,a.useCallback)((e,t)=>{t6()&&(!function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();try{window.localStorage.setItem(t8,(0,e$.XQ)(e))}catch{}}(),(0,E.default)(r=>(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px",cursor:"pointer"},onClick:()=>{E.default.dismiss(r.id),rZ(!0)},children:[(0,n.jsx)("span",{children:"\uD83C\uDF81"}),(0,n.jsx)("span",{children:tg(`module.${e}`,{points:t})})]}),{duration:6e3,position:"top-center"}))},[tg]),{checkTaskCompletion:at,clearClaimableStages:ar,initializeTaskBaseline:an,tasksWithStages:aa}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{enabled:t=!0,onStagesCompleted:r}=e,n=(0,l.jE)(),o=(0,C.useUserStore)(e=>{var t;return null==(t=e.user)?void 0:t.id}),[s,i]=(0,a.useState)([]),[d,c]=(0,a.useState)([]),[u,m]=(0,a.useState)(!1),p=(0,a.useRef)([]),h=(0,a.useRef)(null),g=(0,a.useRef)(0),f=(0,a.useCallback)(async()=>{if(!t)return},[t]),v=(0,a.useCallback)(async()=>{if(!t||!o)return[];let e=(0,e$.XQ)(Date.now());try{if(window.localStorage.getItem(eq(o))===e)return[]}catch{}h.current!==e&&(h.current=e,p.current=[],g.current=0),g.current+=1;let a=g.current,l=d.some(e=>"CHAT_10"===e.taskType&&e.stages.some(t=>!t.isCompleted&&e.currentProgress+a>=t.targetCount));if(a<10&&!l)return s;m(!0);try{let t=await n.fetchQuery({queryKey:eB(o),queryFn:eF.NJ.getDailyTasksWithStages,staleTime:0,gcTime:eF.Lf.cacheTime});g.current=0,c(t.tasks);let a=[];for(let e of t.tasks)for(let t of e.stages)t.canClaim&&!t.isClaimed&&a.push({stageId:t.id,taskTitle:e.title,stageNumber:t.stageNumber,targetCount:t.targetCount,rewardPoints:t.rewardPoints});let s=eH(t.tasks),l=p.current;if(0===l.length)p.current=s;else{let e=function(e,t){let r=[],n=new Map;for(let t of e)n.set(t.stageId,t);for(let e of t){let t=n.get(e.stageId);e.canClaim&&((null==t?void 0:t.canClaim)||r.push({stageId:e.stageId,taskTitle:e.taskTitle,stageNumber:e.stageNumber,targetCount:e.targetCount,rewardPoints:e.rewardPoints}))}return r}(l,s);p.current=s,e.length>0&&(null==r||r(e,t.tasks))}a.length>0&&i(a);try{!function(e){if(0===e.length)return!1;let t=!e.some(e=>e.stages.some(e=>e.canClaim&&!e.isClaimed)),r=e.every(e=>e.stages.every(e=>e.isCompleted));return t&&r}(t.tasks)?window.localStorage.removeItem(eq(o)):window.localStorage.setItem(eq(o),e)}catch{}return a}catch(e){return console.warn("[useTaskCompletion] Failed to check task completion:",e),[]}finally{m(!1)}},[t,r,n,s,d,o]);return{saveCurrentState:f,checkTaskCompletion:v,claimableStages:s,tasksWithStages:d,isChecking:u,clearClaimableStages:(0,a.useCallback)(()=>{i([]),c([]),p.current=[],h.current=null,g.current=0;try{o&&window.localStorage.removeItem(eq(o))}catch{}},[o]),initializeTaskBaseline:(0,a.useCallback)(e=>{c(e),p.current=eH(e),h.current=(0,e$.XQ)(Date.now())},[])}}({enabled:tA,onStagesCompleted:async(e,t)=>{if(e.length>0){let r=e.reduce((e,t)=>
30e+t.rewardPoints,0);r1(e),r4(t),ae("taskCompleteToast",r)}}}),ao=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!tA||!(null==tR?void 0:tR.id))return;let e=(0,e$.XQ)(Date.now()),t=`${tR.id}:${e}`;if(ao.current===t)return;let r=t6();(async()=>{try{let e=await tx.fetchQuery({queryKey:eB(tR.id),queryFn:eF.NJ.getDailyTasksWithStages,staleTime:0,gcTime:eF.Lf.cacheTime});ao.current=t,an(e.tasks);let n=[];for(let t of e.tasks)for(let e of t.stages)e.canClaim&&!e.isClaimed&&n.push({stageId:e.id,taskTitle:t.title,stageNumber:e.stageNumber,targetCount:e.targetCount,rewardPoints:e.rewardPoints});if(r&&n.length>0){let t=n.reduce((e,t)=>e+t.rewardPoints,0);r1(n),r4(e.tasks),ae("pendingRewardToast",t)}}catch(e){}})()},[an,tA,tx,ae,null==tR?void 0:tR.id]);let as=(0,a.useCallback)(async e=>{let t=await fetch(e,{credentials:"include",cache:"no-store",headers:{...(0,ed.getSessionTokenHeaders)()}}),r=await t.json();return{response:t,data:r}},[]),ai=(0,a.useCallback)(async e=>{try{let t=await fetch((0,ei.V$)(),{method:"POST",credentials:"include",cache:"no-store",headers:{"Content-Type":"application/json","X-Frontend-Context":"chat-preview",...(0,ed.getSessionTokenHeaders)()},body:JSON.stringify({id:e})}),r=await t.json();return{response:t,data:r}}catch(e){return console.error("[ChatModule] fetchOwnerCharacterForEdit network error:",e),{response:new Response(null,{status:0}),data:{success:!1,error:{code:"NETWORK_ERROR",message:tg("module.cannotLoadCharacter")}}}}},[tg]),al=(0,a.useCallback)(async e=>
30{if(!tw)return void rF({message:tg("module.invalidCharacterId"),code:"INVALID_ID"});if(tk){await tO(!0);let{response:e,data:t}=await ai(tw);if(t.success&&t.data){rR(n1(t.data)),rF(null);return}let r=t.error;return"object"==typeof r&&null!==r&&(r.message||r.code)?void rF({message:r.message||tg("module.cannotLoadCharacter"),code:r.code||(403===e.status?"FORBIDDEN":"UNAUTHORIZED")}):void rF({message:tg("module.cannotLoadCharacter"),code:"LOAD_FAILED"})}let t=e.replace(/\/+$/,""),{response:r,data:n}=await as(t);if(n.success&&n.data){rR(n1(n.data)),rF(null);return}let a=n.error,o="object"==typeof a&&null!==a?a.code:void 0,s=401===r.status||"UNAUTHORIZED"===o;if(!n.success&&s&&!th){await tO(!0);let{response:e,data:t}=await ai(tw);if(t.success&&t.data){rR(n1(t.data)),rF(null);return}let r=t.error;if("object"==typeof r&&null!==r&&(r.message||r.code))return void rF({message:r.message||tg("module.cannotLoadCharacter"),code:r.code||(403===e.status?"FORBIDDEN":"UNAUTHORIZED")})}let i=n.error,l="object"==typeof i&&null!==i?i.message:"string"==typeof i?i:void 0,d="object"==typeof i&&null!==i?i.code:n.code;rF({message:l||tg("module.characterLoadFailed"),code:d||"NOT_FOUND"})},[tw,tO,as,ai,tk,n1,th,tg]),ad=(0,a.useCallback)(async function(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(tw){e&&rL(!0),rF(null);try{if(!tk&&tA){let e=await ev.Pt.getInitialState(tw,{skipCache:t});if(e&&e.character){rT(e),rR(n1(e.character)),rF(null);return}}let e=t?`/api/characters/${tw}?_t=${Date.now()}`:`/api/characters/${tw}`;await al(e)}catch(e){console.error("Error loading character:",e),rF({message:e.message||tg("module.cannotLoadCharacter"),code:"ERROR"})}finally{e&&rL(!1)}}},[tw,al,tk,tA,n1]),ac=(0,a.useRef)(n1);(0,a.useEffect)(()=>{ac.current=n1},[n1]);let au=(0,a.useRef)(al);(0,a.useEffect)(()=>{au.current=al},[al]);let am=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=async()=>{if(!tw)return;let e="string"==typeof(null==rP?void 0:rP.id)?rP.id.trim():"";if(rP&&(e===tw||rP.title||rP.name)){am.current=tw,rL(!1);return}if(am.current===tw)return void rL(!1);if(null==tu?void 0:tu.character){rT(tu),rR(ac.current(tu.character)),rF(null),am.current=tw,rL(!1);return}if(te&&e5){rR(ac.current(e5)),am.current=tw,rL(!1);return}if(th){rL(!0),rF(null);try{await au.current(`/api/characters/${tw}`),am.current=tw}catch(e){console.error("[ChatModule] share snapshot character load failed:",e),rF({message:e.message||tg("module.loadFailed"),code:"ERROR"})}finally{rL(!1)}return}rL(!0),rF(null);try{if(tk)await au.current(`/api/characters/${tw}`);else{let e=(0,ev.l4)(tw),t=e?await e:await ev.Pt.getInitialState(tw);t&&t.character?(rT(t),rR(ac.current(t.character)),rF(null)):await au.current(`/api/characters/${tw}`),am.current=tw}}catch(e){console.error("Error loading initial state:",e);try{await au.current(`/api/characters/${tw}`),am.current=tw}catch(e){rF({message:e.message||tg("module.loadFailed"),code:"ERROR"})}}finally{rL(!1)}};tw&&e()},[tw,te,e5,tk,th,tu]),(0,a.useEffect)(()=>{rP&&!rA&&ta&&ta(rP)},[rP,rA,ta]);let ap="long_chat_model_switch_warned_v1",[ah,ag]=(0,a.useState)(!1),af=(0,a.useRef)(!1),av=(0,a.useRef)(""),{currentSessionId:ab,setCurrentSessionId:ay,loadSession:ax,startNewSession:aw,isLoadingSession:ak,isInitialLoad:aS,refreshSessionList:aC,removeSessionFromList:aI,sessionList:aj,isLoadingSessionList:aM,sessionListPagination:aN,loadMoreSessions:aE,incrementSessionMessageCount:a_,adjustSessionMessageCount:aT,messagesPagination:aP,loadMessagesPage:aR,isLoadingPage:aA,decrementMessageTotal:aL,hasBranchHistoryError:aO,retryBranchHistory:aF}=(0,eA.yx)({characterId:t,character:rP,onMessagesLoad:e=>{n2.current.onMessagesLoad(e)},onMessagesClear:()=>n2.current.onMessagesClear(),onInitializeOpeningMessage:()=>n2.current.onInitializeOpeningMessage(),onCancelStreaming:()=>n2.current.onCancelStreaming(),getCurrentMessages:()=>{var e,t;return(null==(e=(t=n2.current).getCurrentMessages)?void 0:e.call(t))??[]},initialSessions:null==r_?void 0:r_.sessions,initialRecentMessages:null==r_?void 0:r_.recentMessages,initialPendingAssistant:(null==r_?void 0:r_.pendingAssistant)??null,initialPagination:(null==r_?void 0:r_.pagination)?{...r_.pagination,hasArchived:r_.hasArchived??!1,archivedBefore:r_.archivedBefore??null}:void 0,deferInitialLoad:tA&&rA&&!r_&&!tk&&!th,skipInitialSessionLoad:!g||th}),a$=(0,a.useRef)(()=>{}),aD=(0,eR.T)(),aB=(0,a.useCallback)(()=>{let e=C.useUserStore.getState();if(e.isAuthenticated||e.user||(0,ed.getSessionToken)())return void e.refreshUserProfile().c
30atch(e=>{console.warn("[ChatModule] Auth refresh after quota mismatch failed:",e)});rV(),rY.current=!0;let r=tw||t,n=r?e6(r):null;n&&n.messages.length>0&&a$.current(n.messages)},[tw,t,rV]),{messages:aq,isLoading:aH,sendMessage:az,refreshMessage:aU,cancelStreaming:aW,cancelStreamingForNavigation:aK,isStreamActive:aV,initializeOpeningMessage:aG,clearMessages:aQ,setMessages:aY,openingStatements:aX,currentOpeningIndex:aJ,switchOpeningStatement:aZ,loadArchivedMessages:a0,isLoadingArchived:a1,archivedExhausted:a2,syncMobileStreamOnVisible:a4}=function(e){var t;let n,o,s,i,l,d,c,u,{character:m,sessionId:p,isStreamingEnabled:h,selectedModel:g,userName:f="用户",onSessionIdChange:v,onInsufficientPoints:b,onQuotaExceeded:y,onModelDisabled:x,onPointsUpdate:w,onChatTrialUpdate:S,overrideOpeningStatement:I,modelParams:j,summaryThreshold:M,archivedBefore:N,characterId:_,recommendedModelId:T,lockedModelId:P,preferredDefaultModelId:R}=e,A=(0,a.useRef)(N??null);A.current=N??null;let L=_??(null==m?void 0:m.id)??null,O=T??(null==m?void 0:m.recommendedModelId)??null,F=(0,a.useRef)({characterId:L,recommendedModelId:O});F.current={characterId:L,recommendedModelId:O};let[B,q]=(0,a.useState)(!1),H=(0,a.useRef)(!1),z=(0,a.useRef)(Date.now()),W=(0,a.useRef)(!1),[G,Y]=(0,a.useState)(0),X=(0,a.useRef)(g);X.current=g;let ew=(0,a.useRef)(P);ew.current=P;let ek=(0,a.useRef)(R);ek.current=R;let eS=(0,a.useRef)(h);eS.current=h;let eC=(0,a.useRef)(j);eC.current=j;let eP=(0,a.useRef)(M);eP.current=M;let eR=(0,a.useRef)(null),eA=(0,a.useRef)(null),eL=(0,a.useRef)(0),eO=(0,a.useRef)(!1),eF=(0,a.useRef)(0),e$=(0,a.useRef)(!1),eD=(0,a.useRef)(!1),eB=(0,a.useRef)(new Set),eq=(0,a.useRef)(p);eq.current=p;let eH=(0,a.useRef)(null),ez=(0,a.useRef)(null),eU=(0,a.useRef)(null),eW=(0,a.useRef)(null),eK=(0,a.useRef)(null),eV=(0,a.useRef)(0),eG=(0,a.useRef)(!1),{messages:eQ,setMessages:eY,addMessage:eX,updateMessage:eJ,updateMessageByIndex:eZ,removeMessages:e0,clearMessages:e1,messagesRef:e2}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],[t,r]=(0,a.useState)(e),n=(0,a.useRef)(t),o=(0,a.useCallback)(e=>{if("function"!=typeof e){n.current=e,r(e);return}r(t=>{let r=e(t);return n.current=r,r})},[]);(0,a.useEffect)(()=>{n.current=t},[t]);let s=(0,a.useCallback)(e=>{o(t=>[...t,e])},[]),i=(0,a.useCallback)(e=>{0!==e.length&&o(t=>[...t,...e])},[]),l=(0,a.useCallback)((e,t)=>{o(r=>r.map(r=>r.id===e?{...r,...t}:r))},[]),d=(0,a.useCallback)((e,t)=>{o(r=>e<0||e>=r.length?r:r.map((r,n)=>n===e?{...r,...t}:r))},[]),c=(0,a.useCallback)(e=>{o(t=>t.filter(t=>t.id!==e))},[]),u=(0,a.useCallback)(e=>{if(0===e.length)return;let t=new Set(e);o(e=>e.filter(e=>!t.has(e.id)))},[]),m=(0,a.useCallback)(()=>{o([]),n.current=[]},[]);return{messages:t,setMessages:o,addMessage:s,addMessages:i,updateMessage:l,updateMessageByIndex:d,removeMessage:c,removeMessages:u,clearMessages:m,messagesRef:n}}(),{handleStreamingResponse:e4,cancelStreaming:e5,didUserCancelStream:e3,resetUserCancelFlag:e8}=(0,eo.K)(),{buildApiParams:e6,sendStreamingRequest:e7,sendNonStreamingRequest:e9,abortRequest:te}=(n=(0,a.useRef)(null),o=(0,a.useCallback)(e=>{let{messages:t,character:r,sessionId:n,model:a,userName:o,streaming:s}=e,i=r.title??r.name??"角色",l={messages:t,model:a,stream:s,character_id:r.id,thinking_level:(0,ep._W)()};if(n&&(l.session_id=n),e.modelParams){let t=e.modelParams;t.temperature!==ec.DEFAULT_MODEL_PARAMS.temperature&&(l.temperature=t.temperature),t.topP!==ec.DEFAULT_MODEL_PARAMS.topP&&(l.top_p=t.topP),t.presencePenalty!==ec.DEFAULT_MODEL_PARAMS.presencePenalty&&(l.presence_penalty=t.presencePenalty),t.frequencyPenalty!==ec.DEFAULT_MODEL_PARAMS.frequencyPenalty&&(l.frequency_penalty=t.frequencyPenalty)}return e.summaryThreshold&&(l.summary_threshold=e.summaryThreshold),e.editFromMessageId&&(l.edit_from_message_id=e.editFromMessageId),el.v.debug("构建 API 参数",{model:a,streaming:s,hasSessionId:!!n,messageCount:t.length,userName:o,charName:i}),l},[]),s=(0,a.useCallback)(()=>{n.current&&n.current.abort();let e=new AbortController;return n.current=e,e},[]),i=(0,a.useCallback)(()=>n.current,[]),l=(0,a.useCallback)(async(e,t)=>{el.v.info("发送流式请求",{model:e.model,messageCount:e.messages.length});let n=(0,ei.L1)(),a=(0,em.B)(e),o=t??s().signal,i={"Content-Type":"application/json",...(0,ed.getSessionTokenHeaders)()};Object.assign(i,await (0,eu.D)());try{let{buildChatSecurityHeaders:e}=await Promise.resolve().then(r.bind(r,92721)),t=await e(a);t&&Object.assign(i,t)}catch{}for(let t=0;t<=1;t+=1){if(o.aborted)throw new DOMException("Cancelled","AbortError");let{signal:r,wasConnectTimedOut:s,cleanup:l}=function(e,t){let r,n=new AbortController;e.aborted?n.abort():e.addEventListener("abort",()=>{n.abort()},{once:!0});return{signal:n.signal,wasConnectTimedOut:()=>!1,cleanup:()=>{void 0!==r&&clearTimeout(r)}}}(o,0);try{let e=await fetch(n,{method:"POST",headers:i,body:JSON.stringify(a),credentials:"include",signal:r});return{body:e.body,headers:e.headers,status:e.status,ok:e.ok}}catch(i){let r=t>=1,n=o.aborted,a=s()&&!n;if(!(!r&&!n&&(a||function(e){if(!(e instanceof Error))return!1;let t=e.message.toLowerCase();return"TypeError"===e.name||t.includes("failed to fetch")||t.includes("networkerror")||t.includes("network request failed")||t.includes("load failed")||t.includes("timeout")}(i))))throw i;el.v.warn("流式建连超时或网络错误,重试一次",{attempt:t+1,timedOut:a,model:e.model}),await eh(700*(t+1))}finally{l()}}throw Error("streaming request failed")},[s]),{buildApiParams:o,sendStreamingRequest:l,sendNonStreamingRequest:(0,a.useCallback)(async e=>{el.v.info("发送非流式请求",{model:e.model,messageCount:e.messages.length});let t=(0,ei.L1)(),r=(0,em.B)(e);return(await es.default.post(t,r,{headers:await (0,eu.D)()})).data},[]),abortRequest:(0,a.useCallback)(()=>{n.current&&(el.v.info("取消请求"),n.current.abort(),n.current=null)},[]),getAbortController:i,createAbortController:s}),tt=(0,a.useCallback)(e=>{if(eO.current){e.fromStreamEnd&&(e$.current=!0);return}eO.current=!0;let t=++eF.current,r=eL.current,n=(0,ej.i2)(),a=()=>t===eF.current&&r===eL.current&&(0,ej.GB)(n)&&(!e.resumePlaceholder||eq.current===e.sessionId);
30e$.current=!0===e.fromStreamEnd,eD.current=!1,H.current=!0,q(!0),(0,eM.nj)({sessionId:e.sessionId,aiMessageId:e.messageKey,assistantDbId:e.assistantDbId,partialContentLength:e.partialContentLength,excludeDbMessageId:e.excludeDbMessageId,...e.resumePlaceholder?{maxAttempts:eM.YV,intervalMs:eM.kl,maxIntervalMs:eM.fd,acceptFinalSnapshot:!0,deadlineMs:e.resumeDeadlineMs,onGiveUp:e.onGiveUp??(()=>{e.applyUpdate({text:(0,Q.p4)("chatStream.resumeTimedOut","暂未获取到这条回复。可稍后重新打开会话查看;重新生成会发起新的请求。"),isStreaming:!1,streamingStatus:"completed",isPendingResume:!1,isError:!0,errorType:"network_error"})})}:{onGiveUp:e.onGiveUp},getLocalVisibleLength:()=>{var t;let r="number"==typeof e.messageKey&&e.messageKey>=0&&e.messageKey<e2.current.length&&(null==(t=e2.current[e.messageKey])?void 0:t.sender)==="character"?e2.current[e.messageKey]:e2.current.find(t=>t.id===e.messageKey);return(0,ex.L9)((null==r?void 0:r.text)??"").length},shouldAbort:()=>!a()||e3()||eD.current,canFinalize:()=>a()&&e$.current,updateMessage:(t,r)=>{a()&&e.applyUpdate(r)},onRecoveryStateChange:r=>{if(t===eF.current&&(eO.current=r,!r)){if(e.resumePlaceholder&&(eB.current.delete(e.messageKey),eW.current===e.messageKey&&(eW.current=null)),a())e$.current&&(eA.current=null),(e$.current||eD.current||e3())&&(H.current=!1,q(!1))}}})},[e3,e2]),tr=(0,a.useCallback)(()=>{var e;null!==ez.current&&(window.clearTimeout(ez.current),ez.current=null);let t=eU.current,r=eW.current??(null==(e=e2.current.find(e=>e.isStreaming&&e.resumeAssistantMessageId))?void 0:e.id)??null;(t||null!==r)&&(eU.current=null,eG.current=!1,eW.current=null,null!==r&&eB.current.delete(r),null==t||t.abort(),eF.current+=1,eO.current=!1,eD.current=!0,eL.current+=1,te(),eA.current=null,H.current=!1,q(!1))},[te,e2]);(0,a.useEffect)(()=>()=>{eV.current+=1,eK.current=null,tr()},[p,L,tr]),(0,a.useEffect)(()=>(0,ej.VN)(tr),[tr]);let tn=(0,a.useCallback)((e,t)=>{var r;let n=e.resumeAssistantMessageId??e.dbMessageId;if("string"!=typeof n)return;let a=new AbortController;eU.current=a;let o=++eL.current,s=(0,ej.i2)();eA.current=e.resumeRequestId??null;let i=()=>eU.current===a&&!a.signal.aborted&&o===eL.current&&(0,ej.GB)(s)&&eq.current===t,l=(0,eM.Gy)((null==(r=e.resumeRefresh)?void 0:r.startedAt)??e.timestamp.getTime()),d=e.resumeRefresh,c=e.text;H.current=!0,q(!0),eJ(e.id,{streamingStatus:"connecting",resumeSessionId:t,resumeAuthRevision:s}),(async()=>{let r=!1;try{r=await eI({sessionId:t,assistantMessageId:n,signal:a.signal,deadlineMs:l,expectedRequestId:d?e.resumeRequestId:void 0,onRequestId:t=>{i()&&(eA.current=t,eJ(e.id,{isPendingResume:!1,resumeRequestId:t}))},onUpdate:t=>{!i()||void 0!==t.text&&t.text.length<c.length&&t.isStreaming||(void 0!==t.text&&(c=t.text),eJ(e.id,(null==d?void 0:d.preserveBilling)?{...t,inputPoints:d.inputPoints??t.inputPoints,outputPoints:d.outputPoints??t.outputPoints,pendingSummaryPoints:d.pendingSummaryPoints??t.pendingSummaryPoints}:t))}})}finally{if(!i())return;eU.current=null,r?(eA.current=null,eW.current=null,eB.current.delete(e.id),H.current=!1,q(!1)):d?(eJ(e.id,{text:c||d.originalText,isStreaming:!1,isPendingResume:!1,streamingStatus:"completed",isTruncated:!0}),eA.current=null,eW.current=null,eB.current.delete(e.id),H.current=!1,q(!1)):(eJ(e.id,{isPendingResume:!c,isStreaming:!0}),tt({sessionId:t,messageKey:e.id,assistantDbId:n,partialContentLength:(0,ex.L9)(c).length,applyUpdate:t=>eJ(e.id,t),fromStreamEnd:!0,resumePlaceholder:!0,resumeDeadlineMs:l,...c?{onGiveUp:()=>eJ(e.id,{text:c,isStreaming:!1,isPendingResume:!1,streamingStatus:"completed",isTruncated:!0})}:{}}))}})().catch(()=>{el.v.error("续流恢复异常")})},[tt,eJ]),ta=(0,a.useCallback)(function(e,t,r){var n;let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];eL.current+=1,eF.current+=1,eO.current=!1,eD.current=!0,eW.current=e,eG.current=!0,eK.current=null,eJ(e,{isStreaming:!0,resumeSessionId:t,resumeAssistantMessageId:r,resumeAuthRevision:(0,ej.i2)(),resumeRequestId:eA.current??void 0}),te(),(a||(null==(n=e2.current.find(t=>t.id===e))?void 0:n.resumeRefresh))&&eq.current===t||null==v||v(t),H.current=!0,q(!0)},[te,v,eJ,e2]),{handleApiError:to,handleFetchError:ts}=(t={onInsufficientPoints:b,onQuotaExceeded:y,onModelDisabled:x,updateMessage:eJ,updateMessageByIndex:eZ,removeMessages:e0,setMessages:eY},d=(0,a.useRef)(t),c=(0,a.useCallback)(()=>{try{var e;return(null==(e=C.useUserStore.getState().user)?void 0:e.id)??void 0}catch{return}},[]),(0,a.useEffect)(()=>{d.current=t},[t]),u=(0,a.useCallback)((e,t)=>(0,$.cA)(e,t),[]),{handleApiError:(0,a.useCallback)((e,t,r)=>{var n,a,o,s,i,l,u,m,p,h,g,f;let{messageId:v,messageIndex:b,isRefresh:y,originalMessage:x}=t,{onInsufficientPoints:w,onQuotaExceeded:k,onModelDisabled:S,updateMessage:C,updateMessageByIndex:I,removeMessages:j,setMessages:M}=d.current;if("AbortError"===e.name)return;if((null==(n=e.response)?void 0:n.status)===403&&(null==(o=e.response)||null==(a=o.data)?void 0:a.code)==="QUOTA_EXCEEDED"){V(),null==k||k(),y&&x&&M&&void 0!==b?M(e=>e.map((e,t)=>t===b?x:e)):j([v,v+1]);return}if((null==(s=e.response)?void 0:s.status)===410&&(null==(l=e.response)||null==(i=l.data)?void 0:i.code)==="MODEL_DISABLED"){let t=e.response.data.disabledModelName??(0,Q.p4)("chatHook.unknownModel","未知模型"),r=e.response.data.defaultModel??null;null==S||S(t,r),y&&x&&M&&void 0!==b?M(e=>e.map((e,t)=>t===b?x:e)):j([v,v+1]);return}if(J(null==(u=e.response)?void 0:u.data))return void Z(t,d.current.setMessages);if((0,$.Yi)(e)){E.default.error((0,Q.p4)("chatHook.sessionBusy","上一轮回复仍在生成,请稍后再试")),y&&x&&M&&void 0!==b?M(e=>e.map((e,t)=>t===b?x:e)):j([v,v+1]);return}if((0,$.lS)(e)){let t=(0,$.ki)(e);w((null==t?void 0:t.currentBalance)??0,(null==t?void 0:t.requiredPoints)??0),y&&x&&M&&void 0!==b?M(e=>e.map((e,t)=>t===b?x:e)):j([v,v+1]);return}let N=(0,$.cA)(e,r),_=(null==(m=e.response)?void 0:m.data)&&"object"==typeof e.response.data?e.response.data:{},T=er(_.source),P=en(_)?ee(_):void 0,{title:R,text:A}=(0,D.eF)({formatted:N,explicitMessage:P}),L=ea(_);(0,$.nr)({user_id:c(),request_id:L,status_code:null==(p=e.response)?void 0:p.status,error_code:(null==(g=e.response)||null==(h=g.data)?void 0:h.code)??N.errorType,error_message:N.message,error_details:{type:"handleApiError",is_streaming:r,error_source:T,response_data:null==(f=e.response)?void 0:f.data},is_streaming:r}),E.default.error(et(N.errorType)??R);let O={text:A,isStreaming:!1,isError:!0,errorType:N.errorType,errorRequestId:L};y&&void 0!==b&&I?I(b,O):C(v+1,O)},[]),handleFetchError:(0,a.useCallback)(async(e,t,r)=>{let{messageId:n,messageIndex:a,isRefresh:o,originalMessage:s}=t,{onInsufficientPoints:i,onQuotaExceeded:l,onModelDisabled:u,updateMessage:m,updateMessageByIndex:p,removeMessages:h,setMessages:g}=d.current,f={};try{if("json"in e&&"function"==typeof e.json){let t=e.headers.get("content-type");(null==t?void 0:t.includes("application/json"))?f=await e.json():"text"in e&&"function"==typeof e.text&&(f={message:await e.text()})}}catch{}if(J(f))return void Z(t,g);if(409===e.status&&"CHAT_SESSION_BUSY"===f.code){(0,$.nr)({user_id:c(),request_id:f.requestId,status_code:409,error_code:"CHAT_SESSION_BUSY",error_message:(0,Q.p4)("chatHook.sessionBusy","上一轮回复仍在生成,请稍后再试"),is_streaming:r}),E.default.error((0,Q.p4)("chatHook.sessionBusy","上一轮回复仍在生成,请稍后再试")),o&&s&&g&&void 0!==a?g(e=>e.map((e,t)=>t===a?s:e)):h([n,n+1]);return}if(402===e.status&&"INSUFFICIENT_POINTS"===f.code){let e=f.currentBalance??0,t=f.requiredPoints??0;(0,$.nr)({user_id:c(),request_id:f.requestId,status_code:402,error_code:"INSUFFICIENT_POINTS",error_message:(0,Q.p4)("chatHook.insufficientPointsReport","积分不足: 余额{{current}}, 需要{{required}}",{current:String(e),required:String(t)}),is_streaming:r}),i(e,t),o&&s&&g&&void 0!==a?g(e=>e.map((e,t)=>t===a?s:e)):h([n,n+1]);return}if(403===e.status&&"QUOTA_EXCEEDED"===f.code){(0,$.nr)({user_id:c(),request_id:f.requestId,status_code:403,error_code:"QUOTA_EXCEEDED",error_message:(0,Q.p4)("chatHook.quotaExceededReport","免费体验次数已用完"),is_streaming:r}),V(),null==l||l(),o&&s&&g&&void 0!==a?g(e=>e.map((e,t)=>t===a?s:e)):h([n,n+1]);return}if(410===e.status&&"MODEL_DISABLED"===f.code){let e=f.disabledModelName||(0,Q.p4)("chatHook.unknownModel","未知模型"),t=f.defaultModel;(0,$.nr)({user_id:c(),request_id:f.requestId,status_code:410,error_code:"MODEL_DISABLED",error_message:(0,Q.p4)("chatHook.modelDisabledReport","模型已禁用: {{model}}",{model:e}),is_streaming:r}),null==u||u(e,t),o&&s&&g&&void 0!==a?g(e=>e.map((e,t)=>t===a?s:e)):h([n,n+1]);return}let v=Error(`HTTP ${e.status}`);v.response={status:e.status,data:f},v.isAxiosError=!0;let b=(0,$.cA)(v,r),y=ee(f),x=en(f)?y:void 0,w=function(e,t){let r=er(e.headers.get("x-error-source"));if("unknown"!==r)return r;let n=er(t.source);if("unknown"!==n)return n;let a=t.error;if(a&&"object"==typeof a){let e=er(a.source);if("unknown"!==e)return e}return"string"==typeof t.upstream_message||"string"==typeof t.upstream_request_id||a&&"object"==typeof a&&"string"==typeof a.upstream_message?"upstream_api":"platform"}(e,f),{title:k,text:S}=(0,D.eF)({formatted:b,explicitMessage:x}),C=ea(f,e.headers.get("x-request-id"));(0,$.nr)({user_id:c(),request_id:C,status_code:e.status,error_code:f.code||b.errorType,error_message:k,error_details:{type:"handleFetchError",is_streaming:r,error_source:w,response_data:f},model:f.debug?f.debug.requestModel:void 0,is_streaming:r}),E.default.error(et("upstream_api"===w?"upstream_api_error":b.errorType)??k);let I={text:S,isStreaming:!1,isError:!0,errorType:"upstream_api"===w?"upstream_api_error":b.errorType,errorRequestId:C};o&&void 0!==a&&p?p(a,I):m(n+1,I)},[]),extractErrorMessage:ee,formatError:u}),ti=(0,a.useMemo)(()=>{var e;return(e=I??(null==m?void 0:m.opening_statement))?Array.isArray(e)?e.filter(eE):eE(e)?[e]:[]:[]},[I,null==m?void 0:m.opening_statement]),tl=(0,a.useRef)(ti);tl.current=ti,(0,a.useEffect)(()=>
30{if(null==I)return;let e=ti[0]??"";eY(t=>{var r;return t.some(e=>e.isOpeningStatement)&&((null==(r=t.find(e=>e.isOpeningStatement))?void 0:r.text)??"")!==e?e?t.map(t=>t.isOpeningStatement?{...t,text:e}:t):t.filter(e=>!e.isOpeningStatement):t})},[I,ti,eY]);let td=(0,a.useCallback)(()=>(z.current+=1,z.current),[]),tc=(0,a.useCallback)(e=>{let t=e.filter(e=>!e.isOpeningStatement&&!e.isError);return(0,$.ub)(t)},[]),tu=(0,a.useCallback)(e=>{ti.length<=1||Y(t=>{let r;return r="prev"===e?t<=0?ti.length-1:t-1:t>=ti.length-1?0:t+1,eY(e=>e.map(e=>e.isOpeningStatement?{...e,text:ti[r]}:e)),r})},[ti,eY]),tm=(0,a.useCallback)(()=>{if(!m||e2.current.length>0)return;let e=tl.current[0]??"";if(!e)return;Y(0);let t={id:td(),text:e,sender:"character",timestamp:new Date,avatar:m.thumbnail,isOpeningStatement:!0};el.v.info("初始化开场白",{characterId:m.id}),eX(t)},[m,e2,td,eX]),tp=(0,a.useCallback)(async(e,t)=>{var r,n,a,o,s,i,l,d,c;let u;if(!m||!e.trim()||H.current)return;let g=(0,k.Kc)(X.current,F.current,ew.current,ek.current);if(!g){eX({id:td(),text:"模型加载中,请稍后再试",sender:"character",timestamp:new Date,avatar:m.thumbnail,isError:!0,errorType:"model_not_ready"}),null==t||null==(r=t.onSendFailed)||r.call(t);return}let b=++eL.current;H.current=!0,q(!0),e8(),eH.current=p,!p&&eR.current&&(eR.current=null);try{!C.useUserStore.getState().isAuthenticated&&(c={character_id:m.id},U||(U=!0,K("Guest Trial Started",c)))}catch{}let y=td(),I=td(),j={sessionId:void 0,assistantMessageId:void 0};W.current=!1;let M={id:y,text:e.trim(),sender:"user",timestamp:new Date,isQuickStartProfile:(null==t?void 0:t.isQuickStartProfile)===!0};eX(M),eX({id:I,text:"",sender:"character",timestamp:new Date,avatar:m.thumbnail,isStreaming:!0,streamingStatus:"connecting"});try{let e=[...e2.current];e.some(e=>e.id===y)||e.push(M);let r=tc(e);if(!(0,ef.v3)(r)){el.v.error("发送消息失败:格式化后缺少 user 消息",{userMessageId:y}),e0([y,I]),E.default.error((0,Q.p4)("chatHook.sendMissingUserMessage","消息发送失败,请重试")),null==t||null==(n=t.onSendFailed)||n.call(t);return}let d=e6({messages:r,character:m,sessionId:p,model:g,userName:f,streaming:h,modelParams:eC.current,summaryThreshold:eP.current,editFromMessageId:null==t?void 0:t.editFromMessageId});if(h){let e=(0,em.B)(d);eA.current=e.request_id;let r=await e7(e);if(b!==eL.current)return void await (null==(a=r.body)?void 0:a.cancel());if(!r.ok){let e;try{e=await eT(r.body)}catch{}e_(e,p,eR);let n={status:r.status,headers:r.headers,json:async()=>e?JSON.parse(e):{},text:async()=>e??""};await ts(n,{messageId:y},h),null==t||null==(o=t.onSendFailed)||o.call(t);return}eA.current=eN(r.headers)??e.request_id;let n="relay"===r.headers.get("x-chat-transport");await e4({data:r.body,headers:r.headers,status:r.status},{messageId:I,onContentUpdate:(e,t)=>{b===eL.current&&eJ(I,{text:e,streamingStatus:t})},onMetadata:e=>{if(b===eL.current&&(n&&e.sessionId&&e.assistantMessageId&&(u=e.assistantMessageId,eJ(I,{resumeSessionId:e.sessionId,resumeAssistantMessageId:e.assistantMessageId,resumeRequestId:eA.current??void 0,resumeAuthRevision:(0,ej.i2)()})),"string"==typeof e.sessionId&&e.sessionId&&(eH.current=e.sessionId),!p&&e.sessionId&&e.sessionCreated&&(j.sessionId=e.sessionId,e.assistantMessageId&&(j.assistantMessageId=e.assistantMessageId)),e.userMessageId&&eJ(y,{dbMessageId:e.userMessageId}),e.chatTrial&&(null==S||S(e.chatTrial)),e.modelSwitched&&x&&!W.current)){W.current=!0;let{disabledModelName:t,defaultModel:r,reason:n}=e.modelSwitched;x(t,r,n)}},onComplete:e=>{var t,r,a,o,s,i,l,d,c,m,h,g,f,y,x,w,k,S,C,M,N,E,_,T,P,R,A,L,O;if(b!==eL.current)return;el.v.debug("onComplete 收到结果",{aiMessageId:I,hasPointsInfo:!!e.pointsInfo,inputPoints:null==(t=e.pointsInfo)?void 0:t.inputPoints,outputPoints:null==(r=e.pointsInfo)?void 0:r.outputPoints,modelName:null==(a=e.pointsInfo)?void 0:a.modelName,metadata:e.metadata});let F=e2.current.find(e=>e.id===I),$=(0,eg.DG)(e.content,null==F?void 0:F.text),D=(null==(o=e.metadata)?void 0:o.sessionId)??j.sessionId??p??p,B=!!$.trim()&&!$.trim().endsWith("[已取消]"),q=!!e.cancelled||$.trim().endsWith("[已取消]");if((0,eM.T9)({interrupted:e.interrupted,cancelled:q,text:$})&&D&&D){eJ(I,{text:$,isStreaming:!0,streamingStatus:"receiving",dbMessageId:e.dbMessageId,inputTokens:null==(i=e.pointsInfo)?void 0:i.inputTokens,outputTokens:null==(l=e.pointsInfo)?void 0:l.outputTokens,modelName:null==(d=e.pointsInfo)?void 0:d.modelName,modelId:null==(c=e.pointsInfo)?void 0:c.modelId,inputPoints:null==(m=e.pointsInfo)?void 0:m.inputPoints,outputPoints:null==(h=e.pointsInfo)?void 0:h.outputPoints,pendingSummaryPoints:null==(g=e.pointsInfo)?void 0:g.pendingSummaryPoints,isTruncated:e.isTruncated,freeRecoveryRemaining:null==(f=e.metadata)?void 0:f.freeRecoveryRemaining});let t=u??e.dbMessageId;return n&&t?void ta(I,D,t):(D&&B&&(null==v||v(D)),void tt({sessionId:D,messageKey:I,assistantDbId:e.dbMessageId,partialContentLength:(0,ex.L9)($).length,applyUpdate:e=>eJ(I,e),fromStreamEnd:!0}))}if(B||q?eJ(I,{text:$,isStreaming:!1,streamingStatus:"completed",dbMessageId:e.dbMessageId,inputTokens:null==(E=e.pointsInfo)?void 0:E.inputTokens,outputTokens:null==(_=e.pointsInfo)?void 0:_.outputTokens,modelName:null==(T=e.pointsInfo)?void 0:T.modelName,modelId:null==(P=e.pointsInfo)?void 0:P.modelId,inputPoints:null==(R=e.pointsInfo)?void 0:R.inputPoints,outputPoints:null==(A=e.pointsInfo)?void 0:A.outputPoints,pendingSummaryPoints:null==(L=e.pointsInfo)?void 0:L.pendingSummaryPoints,isResponseAbnormal:!!e.isResponseAbnormal||(0,eg.aW)($),isTruncated:e.isTruncated,freeRecoveryRemaining:null==(O=e.metadata)?void 0:O.freeRecoveryRemaining}):(eJ(I,{text:$.trim()||(0,Q.p4)("chatStream.emptyAiResponse","AI 未生成回复内容,可能是内容触发了安全过滤,请尝试换个话题或切换其他模型"),isStreaming:!1,streamingStatus:"completed",isError:!0,errorType:"empty_response",dbMessageId:e.dbMessageId,inputTokens:null==(y=e.pointsInfo)?void 0:y.inputTokens,outputTokens:null==(x=e.pointsInfo)?void 0:x.outputTokens,modelName:null==(w=e.pointsInfo)?void 0:w.modelName,modelId:null==(k=e.pointsInfo)?void 0:k.modelId,inputPoints:null==(S=e.pointsInfo)?void 0:S.inputPoints,outputPoints:null==(C=e.pointsInfo)?void 0:C.outputPoints,pendingSummaryPoints:null==(M=e.pointsInfo)?void 0:M.pendingSummaryPoints,isResponseAbnormal:!0,isTruncated:e.isTruncated,freeRecoveryRemaining:null==(N=e.metadata)?void 0:N.freeRecoveryRemaining}),!p&&D&&(eR.current=D)),D&&B&&(null==v||v(D)),!e.cancelled||e.dbMessageId||j.assistantMessageId||!j.sessionId||B||(ev.Pt.deleteChatSession(j.sessionId).catch(()=>{}),j.sessionId=void 0,j.assistantMessageId=void 0),e.cancelled&&B&&!(null==(s=e.pointsInfo)?void 0:s.outputPoints)){let e=D??p;e&&(async(t,r)=>{for(let n=0;n<t;n++){await new Promise(e=>setTimeout(e,r));try{let t=await ev.Pt.getPointsConsumptionMessages(e);if(t.success&&t.data.length>0){let e=t.data[0];if(e.outputPoints>0)return void eJ(I,{inputTokens:e.inputTokens,outputTokens:e.outputTokens,inputPoints:e.inputPoints,outputPoints:e.outputPoints,modelName:e.modelName??void 0,modelId:e.modelId??void 0,dbMessageId:e.id})}}catch(e){el.v.warn("取消后查询积分信息失败",{error:e,attempt:n+1})}}el.v.warn("取消后轮询积分信息超时,后端可能尚未完成扣费",{sessionId:e})}
30)(5,2e3).catch(()=>{})}eA.current=null},onError:(e,t)=>{b===eL.current&&(eJ(I,{text:e,isStreaming:!1,isError:!0,errorType:t}),!p&&j.sessionId&&(eR.current=j.sessionId))},onPointsUpdate:e=>{b===eL.current&&(null==w||w(e))}})}else{let e=await e9(d),t=(null==(l=e.choices)||null==(i=l[0])||null==(s=i.message)?void 0:s.content)??"",r="number"==typeof e.inputTokens?e.inputTokens:void 0,n="number"==typeof e.outputTokens?e.outputTokens:void 0,a="string"==typeof e.modelName?e.modelName:void 0,o="string"==typeof e.modelId?e.modelId:void 0,c="number"==typeof e.inputPoints?e.inputPoints:void 0,u="number"==typeof e.outputPoints?e.outputPoints:void 0,m="number"==typeof e.pendingSummaryPoints?e.pendingSummaryPoints:void 0,p="string"==typeof e.assistantMessageId?e.assistantMessageId:void 0,h="string"==typeof e.userMessageId?e.userMessageId:void 0;if(e.chatTrial&&(null==S||S(e.chatTrial)),h&&eJ(y,{dbMessageId:h}),e.modelSwitched&&x){let{disabledModelName:t,defaultModel:r,reason:n}=e.modelSwitched;x(t,r,n)}(null==t?void 0:t.trim())?(eJ(I,{text:t,isStreaming:!1,streamingStatus:"completed",dbMessageId:p,inputTokens:r,outputTokens:n,modelName:a,modelId:o,inputPoints:c,outputPoints:u,pendingSummaryPoints:m,isResponseAbnormal:!0===e.response_abnormal,isTruncated:!0===e.truncated,freeRecoveryRemaining:e.freeRecoveryRemaining}),e.session_id&&"string"==typeof e.session_id&&(null==v||v(e.session_id))):e.session_id&&"string"==typeof e.session_id||p?(el.v.info("非流式返回空内容但有 sessionId/assistantMessageId,作为成功处理",{aiMessageId:I,dbMessageId:p,sessionId:e.session_id}),eJ(I,{text:"_AI 未生成回复内容,可能是内容触发了安全过滤,请尝试换个话题或切换其他模型_",isStreaming:!1,streamingStatus:"completed",isResponseAbnormal:!0,dbMessageId:p,inputTokens:r,outputTokens:n,modelName:a,modelId:o,inputPoints:c,outputPoints:u,pendingSummaryPoints:m,isTruncated:!0===e.truncated,freeRecoveryRemaining:e.freeRecoveryRemaining}),e.session_id&&"string"==typeof e.session_id&&(null==v||v(e.session_id))):(el.v.warn("非流式返回空内容且无 sessionId/assistantMessageId",{aiMessageId:I}),eJ(I,{text:"响应内容为空,请重试",isStreaming:!1,isError:!0,errorType:"empty_response"})),"number"==typeof e.newBalance&&(null==w||w(e.newBalance))}}catch(e){if(b!==eL.current)return;if("AbortError"===e.name&&!e3()){let e=e2.current.find(e=>e.isStreaming),t=p??eH.current??j.sessionId??eR.current;if(e&&t){if(u)return void ta(e.id,t,u);tt({sessionId:t,messageKey:e.id,assistantDbId:"string"==typeof e.dbMessageId?e.dbMessageId:void 0,partialContentLength:(0,ex.L9)(e.text).length,applyUpdate:t=>eJ(e.id,t),fromStreamEnd:!0});return}}to(e,{messageId:y},h),"AbortError"!==e.name&&(null==t||null==(d=t.onSendFailed)||d.call(t))}finally{if(b!==eL.current)return;if(eO.current){e$.current||(eD.current=!0);return}eA.current=null,H.current=!1,q(!1),eY(e=>e.map(e=>e.isStreaming?{...e,isStreaming:!1,streamingStatus:"completed"===e.streamingStatus?e.streamingStatus:"completed"}:e))}},[m,p,h,g,f,td,eX,e2,tc,e6,e7,e9,e4,ts,to,eJ,e0,v,w,x,S,eY,tt,ta,e8,e3]),th=(0,a.useCallback)(async(e,t)=>{var r,n,a,o,s;let i;if(!m||H.current)return;let l=e2.current.findIndex(t=>t.id===e);if(-1===l)return void el.v.warn("刷新消息失败:消息不存在",{messageId:e});let d=e2.current[l];if("character"!==d.sender)return void el.v.warn("刷新消息失败:只能刷新 AI 消息",{messageId:e});if((0,ey.$)(A.current,d))return void E.default.error((0,Q.p4)("module.messageArchivedTip","消息太久远了,无法编辑"));if(d.isOpeningStatement){el.v.warn("刷新消息失败:开场白不支持重新生成",{messageId:e}),E.default.error((0,Q.p4)("chatHook.refreshOpeningNotSupported","开场白不支持重新生成"));return}let c=d.dbMessageId,u="string"==typeof c&&c.trim().length>0,h=e2.current.slice(0,l),g=tc(h),b=(0,ef.HJ)({sessionId:p,pendingFailedSessionId:eR.current,hasOldDbId:u,hasUserContext:(0,ef.v3)(g)}),y=p??eR.current;if(!y&&!b){el.v.warn("刷新消息失败:没有会话 ID,无法重新生成",{messageId:e}),E.default.error((0,Q.p4)("chatHook.refreshSessionNotReady","会话尚未就绪,请稍候再试"));return}let C=()=>{eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints})},I=++eL.current;H.current=!0,q(!0),e8(),eH.current=p,W.current=!1,eZ(l,{text:"",isStreaming:!0,streamingStatus:"connecting",isError:!1,errorType:void 0,isResponseAbnormal:!1,isPendingResume:!1,resumeSessionId:void 0,resumeAssistantMessageId:void 0,resumeRequestId:void 0,resumeAuthRevision:void 0,resumeRefresh:void 0,inputTokens:void 0,outputTokens:void 0,inputPoints:void 0,outputPoints:void 0,pendingSummaryPoints:void 0,modelName:void 0,modelId:void 0});let j=eS.current,M=Date.now(),N=(null==t?void 0:t.forceModelId)?t.forceModelId:(0,k.Kc)(X.current,F.current,ew.current,ek.current);if(!N){eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints}),H.current=!1,q(!1),el.v.warn("刷新消息失败:模型未加载",{messageId:e});return}try{let e;try{e=b?g:await (0,ef.fn)({sessionId:y,messagesBeforeTarget:h,targetAssistantMessage:d})}catch(e){if(I!==eL.current)return;if(eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",isError:!1,errorType:void 0,dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints}),e instanceof ef.h1)E.default.error((0,Q.p4)("chatHook.refreshContextIncomplete","无法重新生成:缺少对应的用户消息上下文"));else throw e;return}
30if(I!==eL.current)return;let s=e6({messages:e,character:m,sessionId:y,model:N,userName:f,streaming:j,modelParams:eC.current,summaryThreshold:eP.current});u&&(s.is_refresh=!0,s.refresh_assistant_message_id=c,(null==t?void 0:t.freeRecovery)===!0&&(s.free_recovery=!0));let k=(null==t?void 0:t.freeRecovery)===!0&&u,_=(e,t)=>k?t??e:e;if(j){let e,t=(0,em.B)(s);eA.current=t.request_id;let n=await e7(t);if(I!==eL.current)return void await (null==(r=n.body)?void 0:r.cancel());if(!n.ok){let e;try{e=await eT(n.body)}catch{}e_(e,p,eR);let t={status:n.status,headers:n.headers,json:async()=>e?JSON.parse(e):{},text:async()=>e??""};await ts(t,{messageId:l,messageIndex:l,isRefresh:!0,originalMessage:d},j);return}eA.current=eN(n.headers)??t.request_id;let a="relay"===n.headers.get("x-chat-transport");await e4({data:n.body,headers:n.headers,status:n.status},{messageId:l,messageIndex:l,onContentUpdate:(e,t)=>{I===eL.current&&eZ(l,{text:e,streamingStatus:t})},onMetadata:t=>{if(I!==eL.current)return;"string"==typeof t.sessionId&&t.sessionId&&(eH.current=t.sessionId),t.assistantMessageId&&(e=t.assistantMessageId);let r=eH.current??y;if(a&&r&&e&&(i={sessionId:r,assistantMessageId:e},eJ(d.id,{resumeSessionId:r,resumeAssistantMessageId:e,resumeAuthRevision:(0,ej.i2)(),resumeRequestId:eA.current??void 0,resumeRefresh:{startedAt:M,originalText:d.text,preserveBilling:k,inputPoints:d.inputPoints,outputPoints:d.outputPoints,pendingSummaryPoints:d.pendingSummaryPoints}})),t.chatTrial&&(null==S||S(t.chatTrial)),t.modelSwitched&&x&&!W.current){W.current=!0;let{disabledModelName:e,defaultModel:r,reason:n}=t.modelSwitched;x(e,r,n)}},onComplete:t=>{var r,n,a,o,s,m,h,g,f,b,x,w,k,S,j,M,N,E,T,P,R,A,L,O,F,$,D,B,q,H,z,U,W,K,V,G,Q,Y;if(I!==eL.current)return;let X=(0,eg.GV)((null==(r=t.content)?void 0:r.trim())??"");if(t.cancelled||"[已取消]"===X||(null==(n=t.content)?void 0:n.trim())==="[已取消]"||(null==(o=t.content)||null==(a=o.trim())?void 0:a.endsWith("[已取消]")))return void(X&&"[已取消]"!==X&&X.length>5?(el.v.info("刷新请求已取消,保留已输出内容",{messageIndex:l}),eZ(l,{text:t.content,isStreaming:!1,streamingStatus:"completed",dbMessageId:t.dbMessageId??c,inputTokens:(null==(m=t.pointsInfo)?void 0:m.inputTokens)??d.inputTokens,outputTokens:(null==(h=t.pointsInfo)?void 0:h.outputTokens)??d.outputTokens,modelName:(null==(g=t.pointsInfo)?void 0:g.modelName)??d.modelName,modelId:(null==(f=t.pointsInfo)?void 0:f.modelId)??d.modelId,inputPoints:(null==(b=t.pointsInfo)?void 0:b.inputPoints)??d.inputPoints,outputPoints:(null==(x=t.pointsInfo)?void 0:x.outputPoints)??d.outputPoints,pendingSummaryPoints:null==(w=t.pointsInfo)?void 0:w.pendingSummaryPoints})):(el.v.info("刷新请求已取消,恢复原消息并跳过删除",{messageIndex:l,oldDbMessageId:c}),eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints})));let J=(null==(s=t.metadata)?void 0:s.sessionId)??y??p;if((0,eM.T9)({interrupted:t.interrupted,cancelled:!1,text:t.content??""})&&J&&J){if(i){eJ(d.id,{text:X}),ta(d.id,i.sessionId,i.assistantMessageId,!0);return}eZ(l,{text:t.content??"",isStreaming:!0,streamingStatus:"receiving",dbMessageId:t.dbMessageId??c,inputTokens:null==(k=t.pointsInfo)?void 0:k.inputTokens,outputTokens:null==(S=t.pointsInfo)?void 0:S.outputTokens,modelName:null==(j=t.pointsInfo)?void 0:j.modelName,modelId:null==(M=t.pointsInfo)?void 0:M.modelId,inputPoints:null==(N=t.pointsInfo)?void 0:N.inputPoints,outputPoints:null==(E=t.pointsInfo)?void 0:E.outputPoints,pendingSummaryPoints:null==(T=t.pointsInfo)?void 0:T.pendingSummaryPoints}),tt({sessionId:J,messageKey:l,assistantDbId:t.dbMessageId,excludeDbMessageId:u?c:void 0,partialContentLength:(0,ex.L9)(t.content??"").length,applyUpdate:e=>eZ(l,e),fromStreamEnd:!0,onGiveUp:C});return}if(!X||"[已取消]"===X||X.startsWith("_AI 未生成回复内容")||X.startsWith("⚠️")){let r=e??t.dbMessageId;((null==(q=t.metadata)?void 0:q.sessionId)||r)&&t.content?(el.v.info("刷新返回空内容但有 metadata(流式),作为成功处理",{messageIndex:l,messageIdToUse:r,sessionId:null==(H=t.metadata)?void 0:H.sessionId}),eZ(l,{text:t.content,isStreaming:!1,streamingStatus:"completed",isResponseAbnormal:!!t.isResponseAbnormal,isTruncated:t.isTruncated,freeRecoveryRemaining:null==(z=t.metadata)?void 0:z.freeRecoveryRemaining,dbMessageId:r,inputTokens:null==(U=t.points
30Info)?void 0:U.inputTokens,outputTokens:null==(W=t.pointsInfo)?void 0:W.outputTokens,modelName:null==(K=t.pointsInfo)?void 0:K.modelName,modelId:null==(V=t.pointsInfo)?void 0:V.modelId,inputPoints:_(null==(G=t.pointsInfo)?void 0:G.inputPoints,d.inputPoints),outputPoints:_(null==(Q=t.pointsInfo)?void 0:Q.outputPoints,d.outputPoints),pendingSummaryPoints:_(null==(Y=t.pointsInfo)?void 0:Y.pendingSummaryPoints,d.pendingSummaryPoints)}),c&&r&&c!==r&&ev.Pt.deleteMessage(c).catch(e=>{el.v.warn("删除旧消息失败",{oldDbMessageId:c,error:e})})):(el.v.warn("刷新返回空内容且无 metadata(流式),恢复旧消息",{messageIndex:l,oldDbMessageId:c,newAssistantMessageId:e}),eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints}),r&&r!==c&&ev.Pt.deleteMessage(r).catch(e=>{el.v.warn("删除空消息失败",{dbMessageId:r,error:e})}))}else{eZ(l,{text:X,isStreaming:!1,streamingStatus:"completed",dbMessageId:t.dbMessageId,inputTokens:null==(P=t.pointsInfo)?void 0:P.inputTokens,outputTokens:null==(R=t.pointsInfo)?void 0:R.outputTokens,modelName:null==(A=t.pointsInfo)?void 0:A.modelName,modelId:null==(L=t.pointsInfo)?void 0:L.modelId,inputPoints:_(null==(O=t.pointsInfo)?void 0:O.inputPoints,d.inputPoints),outputPoints:_(null==(F=t.pointsInfo)?void 0:F.outputPoints,d.outputPoints),pendingSummaryPoints:_(null==($=t.pointsInfo)?void 0:$.pendingSummaryPoints,d.pendingSummaryPoints),isResponseAbnormal:!!t.isResponseAbnormal||(0,eg.aW)(t.content??""),isTruncated:t.isTruncated,freeRecoveryRemaining:null==(D=t.metadata)?void 0:D.freeRecoveryRemaining}),c&&t.dbMessageId&&c!==t.dbMessageId&&ev.Pt.deleteMessage(c).catch(e=>{el.v.warn("软删除旧消息失败",{oldDbMessageId:c,error:e})});let e=(null==(B=t.metadata)?void 0:B.sessionId)??y??void 0;!p&&e&&(null==v||v(e),eR.current===e&&(eR.current=null))}eA.current=null},onError:(t,r)=>{I===eL.current&&(eZ(l,{text:d.text,isStreaming:!1,isError:!0,errorType:r,dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints}),e&&e!==c&&ev.Pt.deleteMessage(e).catch(t=>{el.v.warn("删除错误时创建的空消息失败",{dbMessageId:e,error:t})}))},onPointsUpdate:e=>{I===eL.current&&(null==w||w(e))}})}else{let e=await e9(s),t=(null==(o=e.choices)||null==(a=o[0])||null==(n=a.message)?void 0:n.content)??"",r=e.assistantMessageId,i="number"==typeof e.inputTokens?e.inputTokens:void 0,u="number"==typeof e.outputTokens?e.outputTokens:void 0,m="string"==typeof e.modelName?e.modelName:void 0,h="string"==typeof e.modelId?e.modelId:void 0,g="number"==typeof e.inputPoints?e.inputPoints:void 0,f="number"==typeof e.outputPoints?e.outputPoints:void 0,b="number"==typeof e.pendingSummaryPoints?e.pendingSummaryPoints:void 0;if(e.chatTrial&&(null==S||S(e.chatTrial)),e.modelSwitched&&x){let{disabledModelName:t,defaultModel:r,reason:n}=e.modelSwitched;x(t,r,n)}(null==t?void 0:t.trim())?(eZ(l,{text:t,isStreaming:!1,streamingStatus:"completed",dbMessageId:r,inputTokens:i,outputTokens:u,modelName:m,modelId:h,inputPoints:_(g,d.inputPoints),outputPoints:_(f,d.outputPoints),pendingSummaryPoints:_(b,d.pendingSummaryPoints),isResponseAbnormal:!0===e.response_abnormal}),c&&r&&c!==r&&ev.Pt.deleteMessage(c).catch(e=>{el.v.warn("软删除旧消息失败",{oldDbMessageId:c,error:e})})):e.session_id&&"string"==typeof e.session_id||r?(el.v.info("刷新返回空内容但有 sessionId/assistantMessageId(非流式),作为成功处理",{messageIndex:l,newDbMessageId:r,sessionId:e.session_id}),eZ(l,{text:"_AI 未生成回复内容,可能是内容触发了安全过滤,请尝试换个话题或切换其他模型_",isStreaming:!1,streamingStatus:"completed",isResponseAbnormal:!0,dbMessageId:r,inputTokens:i,outputTokens:u,modelName:m,modelId:h,inputPoints:_(g,d.inputPoints),outputPoints:_(f,d.outputPoints),pendingSummaryPoints:_(b,d.pendingSummaryPoints)}),c&&r&&c!==r&&ev.Pt.deleteMessage(c).catch(e=>{el.v.warn("删除旧消息失败",{oldDbMessageId:c,error:e})})):(el.v.warn("刷新返回空内容且无 sessionId/assistantMessageId(非流式),恢复旧消息",{messageIndex:l,oldDbMessageId:c}),eZ(l,{text:d.text,isStreaming:!1,streamingStatus:"completed",dbMessageId:c,inputTokens:d.inputTokens,outputTokens:d.outputTokens,modelName:d.modelName,modelId:d.modelId,inputPoints:d.inputPoints,outputPoints:d.outputPoints})),"number"==typeof e.newBalance&&(null==w||w(e.newBalance)),!p&&e.session_id&&"string"==typeof e.session_id&&(null==v||v(e.session_id),eR.current===e.session_id&&(eR.current=null))}}catch(e){if(I!==eL.current)return;if(i&&!e3())return void ta(d.id,i.sessionId,i.assistantMessageId,!0);if("AbortError"===e.name&&!e3()){let e=y??eH.current??p;if(e)return void tt({sessionId:e,messageKey:l,excludeDbMessageId:u?c:void 0,partialContentLength:(0,ex.L9)((null==(s=e2.current[l])?void 0:s.text)??"").length,applyUpdate:e=>eZ(l,e),fromStreamEnd:!0,onGiveUp:C})}to(e,{messageId:l,messageIndex:l,isRefresh:!0,originalMessage:d},j)}finally{if(I!==eL.current)return;if(eO.current){e$.current||(eD.current=!0);return}eA.current=null,H.current=!1,q(!1),eY(e=>e.map(e=>e.isStreaming?{...e,isStreaming:!1,streamingStatus:"completed"===e.streamingStatus?e.streamingStatus:"completed"}:e))}},[m,p,f,e2,e6,e7,e9,e4,ts,to,eJ,eZ,ta,v,w,x,S,eY,tt,e8,e3]),tg=(0,a.useCallback)(async()=>{var e;el.v.info("取消流式传输"),eL.current+=1,eF.current+=1,eO.current=!1,eD.current=!0;let t=eA.current;eA.current=null,eG.current=!1,null==(e=eU.current)||e.abort(),eU.current=null,null!==eW.current&&eB.current.delete(eW.current),eW.current=null;let r=e2.current.findIndex(e=>e.isStreaming),n=-1!==r?e2.current[r]:void 0;if((null==n?void 0:n.isPendingResume)&&!t)return eD.current=!0,eB.current.delete(n.id),eY(e=>e.filter(e=>
30e.id!==n.id)),H.current=!1,q(!1),!0;let a=-1!==r;a&&!t&&el.v.warn("取消流式传输失败:尚未取得 requestId");let o=t?ev.Pt.cancelChatStream(t):Promise.resolve(!a);e5(),te(),H.current=!1,q(!1),-1!==r&&((null==n?void 0:n.resumeSessionId)&&!n.text?eY(e=>e.filter(e=>e.id!==n.id)):eZ(r,{isStreaming:!1,streamingStatus:"completed",isPendingResume:!1}));try{let e=await o;return e||el.v.warn("旧流未在超时内确认停止",{requestId:t}),e}catch(e){return el.v.warn("发送流式取消信号失败",{error:e,requestId:t}),!1}},[e5,te,e2,eZ,eY]),tf=(0,a.useCallback)(()=>{let e=e2.current,t=e.find(e=>e.isStreaming&&e.resumeAssistantMessageId&&e.resumeSessionId),r=++eV.current;if(null!==eW.current||t||e===eK.current){null===eW.current&&t&&(eW.current=t.id),eK.current=e,tr();let n=eL.current,a=(0,ej.i2)(),o=eq.current;return()=>{r===eV.current&&n===eL.current&&(0,ej.GB)(a)&&(eK.current=null,o!==eq.current||e2.current!==e||H.current||(!o&&(null==t?void 0:t.resumeSessionId)&&(null==v||v(t.resumeSessionId)),eY([...e])))}}tg()},[tg,tr,e2,eY,v]),tv=(0,a.useCallback)(()=>H.current,[]);(0,a.useEffect)(()=>{if(H.current&&!eG.current||eO.current||eQ===eK.current)return;let e=eQ.find(e=>(e.isPendingResume||void 0!==e.resumeSessionId)&&e.isStreaming);if(!e||eB.current.has(e.id)||void 0!==e.resumeAuthRevision&&!(0,ej.GB)(e.resumeAuthRevision))return;let t=p??eq.current;if(!t||e.resumeSessionId&&e.resumeSessionId!==t)return;eG.current=!1,e8(),eB.current.add(e.id),eW.current=e.id;let r=e.id;"string"==typeof(e.resumeAssistantMessageId??e.dbMessageId)?tn(e,t):tt({sessionId:t,messageKey:r,partialContentLength:0,applyUpdate:e=>eJ(r,e),fromStreamEnd:!0,resumePlaceholder:!0,resumeDeadlineMs:(0,eM.Gy)(e.timestamp.getTime())})},[eQ,p,tt,tn,eJ,e8]);let[tb,ty]=(0,a.useState)(!1),[tx,tw]=(0,a.useState)(!1),tk=(0,a.useCallback)(async()=>{if(p){ty(!0);try{let e=e2.current[0],t=null==e?void 0:e.sentAt,r=t?t instanceof Date?t.getTime():1e12>Number(t)?1e3*Number(t):Number(t):void 0,{messages:n}=await ev.Pt.getArchivedSessionMessages(p,void 0!==r?{before:r}:{}),a=n.map(e=>{let t="";if(Array.isArray(e.content))t=e.content.join("\n");else if("string"==typeof e.content)try{let r=JSON.parse(e.content);t=Array.isArray(r)?r.join("\n"):e.content}catch{t=e.content}let r="user"===e.role,n=r?t:(0,eb.D)(t,{fixUnclosedFences:!0}),a=e.sent_at??e.created_at;return{id:e.id??`${p}-archived-${a}`,text:n,sender:r?"user":"character",timestamp:a?new Date(a):new Date,sentAt:a?new Date(a):void 0,dbMessageId:e.id,isFromColdArchive:!0}});a.length>0?eY(e=>[...a,...e]):tw(!0)}catch(e){console.error("[useChatMessages] loadArchivedMessages error:",e)}finally{ty(!1)}}},[p,e2,eY]);return{messages:eQ,isLoading:B,sendMessage:tp,refreshMessage:th,cancelStreaming:tg,cancelStreamingForNavigation:tf,isStreamActive:tv,initializeOpeningMessage:tm,clearMessages:e1,setMessages:eY,openingStatements:ti,currentOpeningIndex:G,switchOpeningStatement:tu,loadArchivedMessages:tk,isLoadingArchived:tb,archivedExhausted:tx,syncMobileStreamOnVisible:(0,a.useCallback)(()=>{null!==ez.current&&window.clearTimeout(ez.current);let e=eL.current,t=eV.current,r=(0,ej.i2)();ez.current=window.setTimeout(()=>{if(ez.current=null,e!==eL.current||t!==eV.current||!(0,ej.GB)(r)||e2.current===eK.current||eU.current||eO.current||e3())return;let n=e2.current.find(e=>e.isStreaming);if(!n||void 0!==n.resumeAuthRevision&&!(0,ej.GB)(n.resumeAuthRevision))return;let a=eq.current??eH.current??eR.current;if(a){if(n.resumeAssistantMessageId&&n.resumeSessionId===a&&void 0!==n.resumeAuthRevision&&(0,ej.GB)(n.resumeAuthRevision))return void ta(n.id,a,n.resumeAssistantMessageId);tt({sessionId:a,messageKey:n.id,assistantDbId:"string"==typeof n.dbMessageId?n.dbMessageId:void 0,partialContentLength:(0,ex.L9)(n.text).length,applyUpdate:e=>eJ(n.id,e)})}},500)},[e3,e2,tt,ta,eJ])}}({character:rP,sessionId:ab,isStreamingEnabled:rH,characterId:tw||t,recommendedModelId:(null==rP?void 0:rP.recommendedModelId)??null,selectedModel:(null==r$?void 0:r$.id)??null,lockedModelId:rM,preferredDefaultModelId:rN,userName:null==tR?void 0:tR.username,onSessionIdChange:e=>{ay(e),a_(e,2)},onInsufficientPoints:()=>{let e=r8.current;e&&r3(e),n5(),E.default.error(tg("module.insufficientPoints"))}
30,onQuotaExceeded:aB,onModelDisabled:(e,r,n)=>{(0,eQ.x$)(),tx.invalidateQueries({queryKey:eG.lH.aiModels.all});let a="error"===n?tg("module.modelErrorAutoSwitched",{model:e}):tg("module.modelDisabledAutoSwitched",{model:e});(0,E.default)(a,{icon:"⚠️",duration:5e3}),tx.fetchQuery({queryKey:eG.lH.aiModels.active(),queryFn:eQ.DY,staleTime:3e5}).then(e=>{let n;r&&(n=e.find(e=>e.id===r.id)),!n&&e.length>0&&(n=e.find(e=>e.is_default)||e[0]),n&&(rD(n),(0,k.K4)(tw||t,n),window.dispatchEvent(new CustomEvent("model-disabled-switch",{detail:{model:n,models:e}})))}).catch(()=>{})},onPointsUpdate:aD,onChatTrialUpdate:rS,overrideOpeningStatement:Y,modelParams:{temperature:nU.temperature,topP:nU.topP,presencePenalty:nU.presencePenalty,frequencyPenalty:nU.frequencyPenalty},summaryThreshold:nU.summaryThreshold,archivedBefore:aP.archivedBefore}),a5=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=null==tR?void 0:tR.id,t=((null==tR?void 0:tR.totalRecharged)??0)>0||(null==tR?void 0:tR.hasPaidMembershipCard)===!0,r=aq.some(e=>!0===e.isTruncated&&"user"!==e.sender);e&&t&&r&&a5.current!==e&&(a5.current=e,(0,X.v8)(),(0,ev.sS)().then(t=>{a5.current===e&&(0,X.qP)(t.remaining)}).catch(t=>{console.error("[Chat] free recovery quota:",t),a5.current===e&&(a5.current=null)}))},[aq,null==tR?void 0:tR.hasPaidMembershipCard,null==tR?void 0:tR.id,null==tR?void 0:tR.totalRecharged]);let a3=(0,a.useRef)(new Map),a8=(0,a.useMemo)(()=>(function(e,t,r){let n=new Map;if(!Array.isArray(t)||0===t.length)return n;let a=new Set,o=new Map,s=-1,i="";for(let l of e){let e="user"===l.role||"assistant"===l.role?l.role:"user"===l.sender?"user":"character"===l.sender?"assistant":null;if("user"===e){i=v(l);continue}if("assistant"!==e)continue;s+=1;let d=function(e){let{rules:t,userText:r,assistantText:n,shownRuleIds:a,lastShownAiIndexByRule:o,currentAiIndex:s}=e;for(let e of t){var i;if(!e.enabled||!Array.isArray(e.assets)||0===e.assets.length)continue;let t=(i=e.triggerSource,"user"===i?r?[r]:[]:"assistant"===i?n?[n]:[]:[r,n].filter(e=>e.trim().length>0));if(!function(e,t){let r=e.triggerKeywords.map(e=>e.trim()).filter(Boolean);return 0!==r.length&&0!==t.length&&("all"===e.matchMode?r.every(e=>t.some(t=>f(t,e))):r.some(e=>t.some(t=>f(t,e))))}(e,t)||!function(e,t,r,n){if("once_per_session"===e.frequency)return!t.has(e.id);if("cooldown"===e.frequency){let t=r.get(e.id);return void 0===t||n-t>=Math.max(1,e.cooldownTurns??1)}return!0}(e,a,o,s))continue;let l=e.assets.filter(e=>"string"==typeof e.url&&e.url.trim().length>0);if(0!==l.length)return{rule:{...e,assets:l}}}return null}({rules:t,userText:i,assistantText:v(l),shownRuleIds:a,lastShownAiIndexByRule:o,currentAiIndex:s});if(d){let e=d.rule.assets;if(r){let t=function(e,t){let r=t.assets.map(e=>e.url).join(",");return`${e}::${t.id}::${t.randomPickCount??"all"}::${r}`}(l.id,d.rule),n=r.get(t);n?e=n:(e=function(e,t){let r=e.filter(e=>"string"==typeof e.url&&e.url.trim().length>0);return 0===r.length?[]:null!=t&&t>0&&r.length>1?function(e,t){let r=e.filter(e=>"string"==typeof e.url&&e.url.trim().length>0);if(0===r.length)return[];let n=Math.max(1,Math.min(t,r.length));if(n>=r.length)return r;let a=[...r];for(let e=a.length-1;e>0;e-=1){let t=Math.floor(Math.random()*(e+1));[a[e],a[t]]=[a[t],a[e]]}return a.slice(0,n)}(r,t):r}(d.rule.assets,d.rule.randomPickCount),r.set(t,e))}n.set(l.id,{...d.rule,assets:e}),a.add(d.rule.id),o.set(d.rule.id,s)}}return n})(aq,(null==rP?void 0:rP.cg_book)??[],a3.current),[aq,null==rP?void 0:rP.cg_book]),a6=(0,a.useMemo)(()=>{let e=eD??(null==rP?void 0:rP.regex_replaces);return(null==e?void 0:e.length)?aq.map(t=>{let r=(0,h.zK)(t),n="string"==typeof t.text?t.text:t.content??"",a=(0,w.tN)(n,e,r);return a===n?t:{...t,text:a,content:a,sourceText:n}}):aq},[aq,eD,null==rP?void 0:rP.regex_replaces]);(0,a.useEffect)(()=>{if(!af.current&&!(aP.totalPages<=2)){try{if("1"===localStorage.getItem(ap)){af.current=!0;return}}catch{}af.current=!0,ag(!0)}},[aP.totalPages]);let a7=(0,a.useCallback)(e=>e.map(e=>{let t=String(e.id??""),r="string"==typeof e.dbMessageId?e.dbMessageId:"",n=e.sentAt?new Date(e.sentAt).getTime():0,a=e.text??e.content??"";return`${t}|${r}|${n}|${a.length}`}).join("^"),[]),a9=(0,a.useCallback)(e=>{if(n2.current.getCurrentMessages().some(e=>e.isStreaming)&&aV())return;let t=a7(e);t!==av.current&&(av.current=t,aY(e))},[a7,aY,aV]);n2.current={onMessagesLoad:a9,onMessagesClear:aQ,onInitializeOpeningMessage:aG,onCancelStreaming:aK,getCurrentMessages:()=>aq},(0,a.useEffect)(()=>{av.current=""},[ab]),(0,a.useEffect)(()=>{let e=()=>{"u">typeof document&&"visible"===document.visibilityState&&a4()};return document.addEventListener("visibilitychange",e),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",e),window.removeEventListener("pageshow",e)}},[a4]);let oe=G??(null==rP?void 0:rP.builtInCss)??"";!function(e){let{characterId:t,builtInCss:r,enabled:n=!0}=e;(0,a.useEffect)(()=>{var e,a,o;let s;if(!n||"u"<typeof document||!t)return;let i=`character-builtin-css-${t}`;if(!r||""===r.trim()){let e=document.getElementById(i);e&&e.remove();return}let l=(0,e9.X)(r).replace(/\\\\/g,"\\"),d="";try{d=function(e,t){if(!e||"string"!=typeof e)return"";let r=(null==t?void 0:t.scopeSelector)??"#installedBuiltInCss",n=(null==t?void 0:t.constrainFixedElements)??!1;try{let t=function e(t,r){let n=[],a=0;for(;a<t.length;){let o=t.slice(a).match(/^\s+/);if(o){n.push(o[0]),a+=o[0].length;continue}if("/*"===t.slice(a,a+2)){let e=t.indexOf("*/",a+2);if(-1===e){n.push(t.slice(a));break}n.push(t.slice(a,e+2)),a=e+2;continue}let s=t.slice(a).match(/^@(-webkit-|-moz-|-o-)?keyframes\s+[\w-]+\s*\{/i);if(s){let e=e7(t,a+s[0].length-1);n.push(s[0].slice(0,-1)+e),a+=s[0].length-1+e.length;continue}let i=t.slice(a).match(/^@media\s+[^{]+\{/i);if(i){let o=a+i[0].length-1,s=e7(t,o),l=e(s.slice(1,-1),r);n.push(i[0].slice(0,-1)+"{"+l+"}"),a=o+s.length;continue}
30let l=t.slice(a).match(/^@supports\s+[^{]+\{/i);if(l){let o=a+l[0].length-1,s=e7(t,o),i=e(s.slice(1,-1),r);n.push(l[0].slice(0,-1)+"{"+i+"}"),a=o+s.length;continue}let d=t.slice(a).match(/^@import\s+(?:url\s*\([^)]*\)|['"][^'"]*['"])\s*;?/i);if(d){n.push(d[0]),a+=d[0].length;continue}let c=t.slice(a).match(/^@[\w-]+\s*[^{;]*[{;]/);if(c){if(c[0].endsWith("{")){let e=a+c[0].length-1,r=e7(t,e);n.push(c[0].slice(0,-1)+r),a=e+r.length}else n.push(c[0]),a+=c[0].length;continue}let u=t.slice(a).match(/^([^{}]+)\{/);if(u){let e=u[1],o=a+u[0].length-1,s=e7(t,o),i=function(e,t){return(function(e){let t=[],r="",n=0;for(let a of e)"("===a||"["===a?(n++,r+=a):")"===a||"]"===a?(n--,r+=a):","===a&&0===n?(t.push(r),r=""):r+=a;return r&&t.push(r),t})(e).map(e=>{let r=e.trim();return r?function(e,t){if(e.startsWith(t))return e;if(/^:root(?=$|[\s.#:\[>+~])/.test(e))return t+e.slice(5);for(let r of["html","body"]){if(e===r)return t+" "+r;if(e.startsWith(r+" ")||e.startsWith(r+":")||e.startsWith(r+".")||e.startsWith(r+"#")||e.startsWith(r+"["))return t+" "+e}return"*"===e?t+" *":t+" "+e}(r,t):""}).filter(Boolean).join(", ")+" "}(e,r);n.push(i+s),a=o+s.length;continue}n.push(t[a]),a++}return n.join("")}(e,r);return n&&(t+=`
31/* 约束 fixed 定位的面板元素,避免覆盖标题栏和输入框 */
32${r} .panel[open],
33${r} [class*="panel"][open],
34${r} details.panel[open] {
35  top: var(--chat-panel-top, 50px) !important;
36  max-height: var(--chat-panel-max-height, calc(100dvh - 120px)) !important;
37  overflow-y: auto !important;
38}
39
40/* 未展开状态的面板保持原有位置 */
41${r} .panel:not([open]),
42${r} [class*="panel"]:not([open]),
43${r} details.panel:not([open]) {
44  max-height: var(--chat-panel-max-height, calc(100dvh - 120px)) !important;
45}
46`),t}catch(t){return console.warn("[scopeCss] CSS 转换失败,返回原始 CSS:",t),e}}(l,{scopeSelector:"#installedBuiltInCss",constrainFixedElements:!1})}catch(e){console.error("[useBuiltInCss] Failed to scope CSS:",e),d=l}let c=(a=d,o=document.baseURI,URL.createObjectURL(new Blob([((s=tt()(a)).walk((e,t,r)=>{if("function"===e.type&&"url"===e.value.toLowerCase()&&!e.unclosed){let t=e.nodes.filter(e=>"space"!==e.type&&"comment"!==e.type),r=t[0],n=1===t.length&&(null==r?void 0:r.type)==="string"?r.value:t.every(e=>"word"===e.type||"div"===e.type)?tt().stringify(e.nodes).trim():null;if(r&&null!==n){let t=tr(n,o);null!==t&&(e.nodes=[{...r,type:"string",quote:'"',value:t}])}return!1}if("function"===e.type&&/^(?:-webkit-)?image-set$/i.test(e.value))for(let t of e.nodes){if("string"!==t.type)continue;let e=tr(t.value,o);null!==e&&(t.quote='"',t.value=e)}if("string"===e.type){let n=t-1;for(;n>=0&&["space","comment"].includes(r[n].type);)n-=1;let a=r[n];if((null==a?void 0:a.type)==="word"&&"@import"===a.value.toLowerCase()){let t=tr(e.value,o);null!==t&&(e.quote='"',e.value=t)}}}),s.toString())],{type:"text/css;charset=utf-8"}))),u=document.createElement("link");return u.id=i,u.rel="stylesheet",u.setAttribute("referrerpolicy","no-referrer"),u.href=c,u.setAttribute("data-character-id",t),u.onerror=()=>console.warn("[useBuiltInCss] stylesheet load failed:",t),null==(e=document.getElementById(i))||e.remove(),document.head.appendChild(u),()=>{u.remove(),URL.revokeObjectURL(c)}},[t,r,n])}({characterId:(null==rP?void 0:rP.id)??"",builtInCss:oe,enabled:!!oe});let ot=(0,a.useRef)(!1);(0,a.useEffect)(()=>{ot.current=!1},[tw,t,tm]),(0,a.useEffect)(()=>{rP&&(null==tm?void 0:tm.length)&&!ot.current&&(ot.current=!0,aY(tm.map(e=>({...e,avatar:"character"===e.sender?e.avatar??rP.thumbnail:e.avatar}))))},[rP,tm,aY]),(0,a.useEffect)(()=>{if((null==tm||!tm.length)&&rP&&!ak&&0===aq.length){var e,t;let r=ab?(null==(e=aj.find(e=>e.id===ab))?void 0:e.messageCount)??0:(null==(t=aj[0])?void 0:t.messageCount)??0,n=aP.total;r>0||n>0||aG()}},[rP,aq.length,aG,ak,ab,aj,aP.total,tm]);let or=(0,a.useRef)(null);(0,a.useEffect)(()=>{or.current=null},[tw,t]),(0,a.useEffect)(()=>{if((null==tm?void 0:tm.length)||tA||!rP||!(tw||t))return;let e=tw||t;if(or.current===e)return;or.current=e;let r=e6(e);r&&r.messages.length>0&&a$.current(r.messages)},[tA,rP,tw,t]);let on=(0,a.useRef)(!1);(0,a.useEffect)(()=>{aq.length>0&&!on.current&&(on.current=!0)},[aq]);let oa=(0,a.useRef)(!1),oo=(0,a.useRef)(0);(0,a.useEffect)(()=>{oo.current=0},[tw,t]),(0,a.useEffect)(()=>
46{if(oa.current&&!aH&&!tA&&(tw||t)){let e=aq.length;if(e>=2&&e>oo.current){let r=aq[e-1],n=aq[e-2];if("user"===n.sender&&n.text&&"character"===r.sender&&!r.isError&&!r.isOpeningStatement&&r.text){let a=tw||t,o=(null==rP?void 0:rP.title)||(null==rP?void 0:rP.name)||"";e8(a,o,"user",n.text),e8(a,o,"assistant",r.text),oo.current=e}}}oa.current=aH},[aH,tA,t,tw,rP,aq]);let os=(0,a.useCallback)(e=>{if(!rP||0===e.length)return;let t=[],r=aX[0]??"";r&&t.push({id:`opening-${Date.now()}`,text:r,sender:"character",timestamp:new Date,avatar:rP.thumbnail,isOpeningStatement:!0}),e.forEach((e,r)=>{t.push({id:`guest-${Date.now()}-${r}`,text:e.content,sender:"user"===e.role?"user":"character",timestamp:new Date(e.sentAt),avatar:"assistant"===e.role?rP.thumbnail:void 0})}),aY(t)},[rP,aX,aY]);(0,a.useEffect)(()=>{a$.current=os},[os]);let oi=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!tA||oi.current)return;let e=Object.values(e3().byCharacter).filter(e=>e.messages.length>0).sort((e,t)=>e.characterId.localeCompare(t.characterId));if(0===e.length){oi.current=!0;return}oi.current=!0;let r=tw||t;(async()=>{try{let t=await fetch("/api/chat/import-history",{method:"POST",headers:{"Content-Type":"application/json",...(0,ed.getSessionTokenHeaders)()},credentials:"include",body:JSON.stringify({sessions:e.map(e=>({character_id:e.characterId,messages:e.messages}))})}),n=await t.json();if(!t.ok)return void(409===t.status&&(null==n?void 0:n.code)==="ALREADY_IMPORTED"?oi.current=!0:oi.current=!1);if(n.success&&Array.isArray(n.imported)&&n.imported.length>0){await aC();let t=r?n.imported.find(e=>e.character_id===r):void 0;if(null==t?void 0:t.session_id){ay(t.session_id);let n=e.find(e=>e.characterId===r);(null==n?void 0:n.messages.length)&&a$.current(n.messages)}try{localStorage.removeItem(e4)}catch{}}else oi.current=!1}catch(e){console.error("导入访客聊天记录失败:",e),oi.current=!1}})()},[tA,t,tw,ay,aC]);let ol=(0,a.useCallback)(()=>rz(e=>!e),[]);(0,a.useCallback)(()=>rq(e=>!e),[]),(0,a.useCallback)(()=>rq(!1),[]);let od=(0,a.useCallback)(async e=>{await n8(e),e.success&&await tO()},[n8,tO]),oc=(0,a.useCallback)(async e=>{try{let t=await eF.NJ.claimStageRewardsBatch(e);return t.totalPoints>0?(tO().catch(()=>{}),E.default.success(tg("module.rewardClaimed",{points:t.totalPoints}))):(0,E.default)(tg("module.rewardAlreadyClaimed")),t.totalPoints}catch(e){throw e}},[tO]),ou=(0,a.useCallback)(()=>{rZ(!1),r1([]),r4([]),ar()},[ar]),om=(0,a.useCallback)(()=>{let e=ty.asPath;ty.replace((0,M.Zi)(e))},[ty]),op=(0,a.useCallback)(()=>{rK.current=!1,rW(!1),rQ(null)},[]),oh=(0,a.useCallback)(()=>{if(rK.current)return void window.history.back();let e=()=>{clearTimeout(t),window.removeEventListener("popstate",e)};window.addEventListener("popstate",e),window.history.back();let t=setTimeout(()=>{window.removeEventListener("popstate",e),rE()},300)},[rE]),og=(0,a.useCallback)(async e=>{try{let t=await eJ.userApi.quickRegister(null==e?void 0:e.captchaToken,null==e?void 0:e.captchaAnswer);if(!t.success)throw Error(tg("module.registerFailed"));tF(t.user),(0,u.Ru)(),await tO(!0),E.default.success(t9.Nh?tg("module.registerSuccessBindEmail",{points:t9.No}):tg("module.registerSuccessBindEmailNoReward"))}catch(e){if(e instanceof eZ.I)throw e;throw e instanceof Error?e:Error(tg("module.registerFailed"))}},[tO,tF,tg]),of=(0,a.useCallback)(async()=>{if(r5.trim()&&!aH){r8.current=r5,r3("");try{var e;await ov(r5),null==(e=r6.current)||e.scrollToBottom("smooth")}finally{r8.current=null}}},[r5,aH]),ov=(0,a.useCallback)(async(e,t)=>{if(!rv(rP)){if(tA||(rQ(e),rY.current=!1),tA&&aP.totalPages>1&&aP.page<aP.totalPages){await aR(aP.totalPages,{force:!0});let e=null==t?void 0:t.editFromMessageId;e&&aY(t=>{let r=t.findIndex(t=>(t.dbMessageId??t.id)===e);return r>=0?t.slice(0,r):t})}await az(e,t),tA||rY.current||rQ(null),tA&&setTimeout(async()=>{try{await at()}catch(e){}},1e3)}},[tA,rP,az,at,aP,aR,aY]),ob=(0,a.useCallback)(()=>{nv("edit"),ng(!0)},[]),oy=(0,a.useCallback)(e=>ov(e,{isQuickStartProfile:!0}),[ov]),ox=(0,a.useRef)(ov);ox.current=ov;let ow=(0,a.useMemo)(()=>{if(!tM)return;let e=(ew??(null==rP?void 0:rP.suggested_questions)??[])[0],t={selector:'[data-tour="chat-compose"]',title:tg("module.composeTourTitle"),description:tg("module.composeTourDescription"),side:"top",beforeEnter:()=>nz(!1)};return e?[{selector:'[data-tour="opening-statement-select"]',title:tg("module.quickStartTourTitle"),description:tg("module.quickStartTourDe
46scription"),side:"bottom"},{selector:'[data-tour="suggested-question-0"]',title:tg("module.firstSuggestionTourTitle"),description:tg("module.firstSuggestionTourDescription"),side:"bottom",beforeEnter:()=>nz(!0),onLeaveNext:()=>ox.current(e),onLeavePrev:()=>nz(!1)},t]:[t]},[tM,rP,ew,tg,tv]),ok=(0,a.useMemo)(()=>{if(tM)return;let e=ew??(null==rP?void 0:rP.suggested_questions)??[];if(0===e.length)return;let t={selector:'[data-tour="chat-compose"]',title:tg("module.composeTourTitle"),description:tg("module.composeTourDescription"),side:"top"};return e[0]?[{selector:'[data-tour="opening-statement-select"]',title:tg("module.quickStartTourTitle"),description:tg("module.quickStartTourDescription"),side:"bottom"},{selector:'[data-tour="suggested-question-0"]',title:tg("module.firstSuggestionTourTitle"),description:tg("module.firstSuggestionTourDescription"),side:"bottom"},t]:[t]},[tM,rP,ew,tg,tv]),oS=(0,a.useCallback)(async(e,t)=>{try{(0,u.Ru)();let r=t9.Nh&&!(null==t?void 0:t.emailAlreadyBound);E.default.success(r?tg("module.registerSuccessWelcomeBindEmail",{username:e.username,points:t9.No}):tg("module.registerSuccessWelcome",{username:e.username})),await new Promise(e=>setTimeout(e,200)),await tO(!0),rG&&(rQ(null),setTimeout(()=>{az(rG)},200))}catch(e){E.default.error(tg("module.registerRefreshFailed"))}},[tO,rG,az,tg]),oC=(0,a.useCallback)(async()=>{rQ(null),(0,u.Ru)(),await new Promise(e=>setTimeout(e,200)),await tO(!0),rG&&setTimeout(()=>{az(rG)},200)},[tO,rG,az]),oI=(0,a.useCallback)(async(e,t)=>await aU(e,t),[aU]),oj=(0,a.useCallback)(async()=>{await aw()},[aw]),oM=(0,a.useCallback)(()=>{ab?nt(!0):E.default.error(tg("module.shareHistory.noSession"))},[ab,tg]),oN=(0,a.useCallback)(async()=>{if(ab){nt(!1);try{let{newSessionId:e,mode:t,snapshotToken:r}=await ev.Pt.branchSession(ab),n=aj.find(e=>e.id===ab),a={id:e,session_id:e,character_name:(null==rP?void 0:rP.title)||(null==rP?void 0:rP.name)||(null==n?void 0:n.characterName)||"",character_cover_url:(null==rP?void 0:rP.thumbnail)??(null==rP?void 0:rP.cover),message_count:(null==n?void 0:n.messageCount)??0,...r?{snapshot_token:r}:{}};await ax(a),await aC()}catch(t){let e=t instanceof Error?t.message:tg("module.branchShare.branchFailed");E.default.error(e)}}},[ab,rP,aj,ax,aC,tg]);(0,a.useEffect)(()=>{let e=async()=>{await aw()};return window.addEventListener("refreshPreviewChat",e),()=>{window.removeEventListener("refreshPreviewChat",e)}},[aw]),(0,a.useEffect)(()=>{let e=async()=>{te&&e5?rR(n1(e5)):await ad(!1,!0)};return window.addEventListener("updatePreviewCharacter",e),()=>{window.removeEventListener("updatePreviewCharacter",e)}},[ad,te,e5,n1]);let oE=(0,a.useCallback)(e=>{ax(e),rq(!1)},[ax]),o_=(0,a.useCallback)(()=>{(0,tI.mv)({messages:aq,characterName:(null==rP?void 0:rP.title)||(null==rP?void 0:rP.name)||"",sessionId:ab??void 0})},[aq,rP,ab]),oT=(0,a.useCallback)(()=>{nd(!0)},[]),oP=(0,a.useCallback)(()=>{nF(!0)},[]);(0,a.useEffect)(()=>{ts&&ts({character:rP,isLoadingCharacter:rA,currentSessionId:ab,sessionList:aj,isLoadingSessionList:aM,sessionListPagination:aN,loadMoreSessions:aE,refreshSessionList:aC,removeSessionFromList:aI,handleSessionSelect:oE,handleNewConversation:oj,exportCurrentChat:o_,openMemorySettings:oT,openComments:oP})},[ts,rP,rA,ab,aj,aM,aN,aE,aC,aI,oE,oj,o_,oT,oP]);let oR=(0,a.useCallback)(e=>{rD(e)},[]),oA=(0,a.useCallback)(e=>{var t;rD(e),null==(t=rX.current)||t.call(rX,(null==e?void 0:e.id)??null)},[]),oL=(0,a.useCallback)(async(e,t)=>{let r=aq.findIndex(t=>t.id===e);if(-1===r)return void E.default.error(tg("module.messageNotFound"));let n=aq[r];if(!n)return;if(!await aW())return void E.default.error(tg("module.deleteFailedRetry"));let a=aq.slice(r),o=n.dbMessageId??n.id,s=a.filter(e=>"string"==typeof(e.dbMessageId??e.id)).length;try{aY(aq.slice(0,r));let e=!1;await ov(t,{editFromMessageId:"string"==typeof o?o:void 0,onSendFailed:()=>{e=!0,aY(e=>eP(e,a))}}),!e&&s>0&&(aL(s),ab&&aT(ab,-s))}catch(e){console.error("[ChatModule] 编辑用户消息后重发失败:",e),aY(e=>eP(e,a)),E.default.error(tg("module.deleteFailedRetry"))}},[aq,aY,ov,aW,aL,ab,aT,tg]),oO=(0,a.useCallback)(async(e,t)=>{if(!(null==t?void 0:t.trim()))return void E.default.error(tg("module.messageEmpty"));let r=aq.findIndex(t=>t.id===e);if(-1===r)return void E.default.error(tg("module.messageNotFound"));let n=aq[r];if(n.isStreaming)return void E.default.error(tg("module.messageSending"));if("user"===n.sender){let n=aq.slice(r+1);if((n.length>1||n.some(e=>"user"===e.sender))&&ab)return void nn({messageId:e,newText:t,subsequentCount:n.length});await oL(e,t)}else{aY(e=>e.map((e,n)=>n===r?{...e,text:t}:e));let a=n.dbMessageId??e;
46if("string"==typeof a)try{await ev.Pt.updateMessage(a,t),E.default.success(tg("module.updated"))}catch(t){console.error("[ChatModule] 更新 AI 消息失败,回滚本地内容:",t),aY(t=>t.map(t=>t.id===e?{...t,text:n.text}:t)),E.default.error(tg("module.deleteFailedRetry"))}}},[aq,aY,oL,ab,tg]),oF=(0,a.useCallback)(async()=>{if(nr&&ab){no(!0);try{let e=aj.find(e=>e.id===ab),t=(null==e?void 0:e.customName)||(null==e?void 0:e.characterName)||(null==rP?void 0:rP.title)||(null==rP?void 0:rP.name)||tg("module.historyEditConfirm.defaultSessionName"),r=tg("module.historyEditConfirm.backupSuffix"),n=`${t}(${r})`,a=n.length>100?`${t.slice(0,100-r.length-2)}(${r})`:n;await ev.Pt.branchSession(ab,{customName:a}),await aC(),E.default.success(tg("module.historyEditConfirm.backupSuccess",{name:a}));let{messageId:o,newText:s}=nr;nn(null),await oL(o,s)}catch(e){console.error("[ChatModule] 备份历史剧情失败:",e),E.default.error(tg("module.historyEditConfirm.backupFailed"))}finally{no(!1)}}},[nr,ab,aj,rP,aC,oL,tg]),o$=(0,a.useCallback)(async()=>{if(!nr)return;let{messageId:e,newText:t}=nr;nn(null),await oL(e,t)},[nr,oL]),oD=(0,a.useCallback)(()=>{na||nn(null)},[na]),oB=(0,a.useCallback)(async e=>{let t=aq.findIndex(t=>t.id===e);if(-1===t)return;if(0===t&&aq[t].isOpeningStatement)return void E.default.error(tg("module.cannotDeleteOpening"));let r=aq[t];if(r.isStreaming||!await tT(tg("module.deleteConfirm")))return;let n=r.dbMessageId??e,a="string"==typeof n,o=aq;if(aY(t=>(o=t,t.filter(t=>t.id!==e))),!a)return void E.default.success(tg("module.deleted"));aL(1),ab&&aT(ab,-1);try{await ev.Pt.deleteMessage(n),E.default.success(tg("module.deleted")),aP.page>=1&&aR(aP.page,{force:!0})}catch(e){console.error("[ChatModule] 软删除消息失败,回滚本地状态:",e),aY(o),aL(-1),ab&&aT(ab,1),E.default.error(tg("module.deleteFailedRetry"))}},[aq,aY,aL,ab,aT,tg,aP.page,aR,tT]),[oq,oH]=(0,a.useState)(!1),[oz,oU]=(0,a.useState)(null),[oW,oK]=(0,a.useState)(""),[oV,oG]=(0,a.useState)(""),[oQ,oY]=(0,a.useState)([]),[oX,oJ]=(0,a.useState)("anime"),[oZ,o0]=(0,a.useState)(!1),o1=(0,a.useRef)(!1),o2=(0,a.useRef)(new Set),o4=(0,a.useRef)(new Set),o5=(0,a.useRef)(!1),o3=(0,a.useRef)(null),o8=(0,a.useRef)(0),o6=(0,a.useRef)(null),[o7,o9]=(0,a.useState)(!1),se=(0,a.useCallback)(()=>document.getElementById("chat-messages-scroll-area"),[]),st=(0,a.useCallback)(()=>{var e;return(null==(e=se())?void 0:e.scrollTop)??null},[se]),sr=(0,a.useCallback)(e=>{if(null==e)return;let t=se();t&&(t.scrollTop=e,requestAnimationFrame(()=>{let t=se();t&&(t.scrollTop=e)}))},[se]),sn=(0,a.useCallback)(e=>{try{let t=window.localStorage.getItem(`${rf}${e}`);if(!t)return null;let r=JSON.parse(t),n="string"==typeof r.prompt?r.prompt.trim():"";if(!n)return null;let a="string"==typeof r.negative_prompt?r.negative_prompt.trim():"",o=Array.isArray(r.style_tags)?r.style_tags.map(e=>String(e??"").trim()).filter(Boolean).slice(0,8):[],s="realistic"===r.style_mode?"realistic":"anime";return{prompt:n,negative_prompt:a,style_tags:o,style_mode:s}}catch{return null}},[]),sa=(0,a.useCallback)((e,t)=>{let r=t.prompt.trim();if(r)try{window.localStorage.setItem(`${rf}${e}`,JSON.stringify({prompt:r.slice(0,8e3),negative_prompt:(t.negative_prompt??"").trim().slice(0,2e3),style_tags:(t.style_tags??[]).map(e=>String(e??"").trim()).filter(Boolean).slice(0,8),style_mode:"realistic"===t.style_mode?"realistic":"anime",updated_at:Date.now()}))}catch{}},[]),so=(0,a.useCallback)(async e=>{let t=(null==e?void 0:e.deferIfStreaming)??!0,r=(null==e?void 0:e.preserveScroll)??!1,n=r?st():null;if(t&&aH){o5.current=!0;return}o5.current=!1;let a=aP.totalPages;if(a<1)return;if(o3.current)return void await o3.current;if(Date.now()-o8.current<1200){r&&sr(n);return}let o=(async()=>{await aR(a,{force:!0}),o8.current=Date.now()})().finally(()=>{o3.current===o&&(o3.current=null)});o3.current=o,await o,r&&sr(n)},[st,aH,aR,aP.totalPages,sr]);(0,a.useEffect)(()=>{aH||o5.current&&so({deferIfStreaming:!1})},[aH,so]);let ss=(0,a.useCallback)((e,t)=>{if(!e||0===t.length)return e;let r=t.map(e=>`![${tg("module.generatedImageAlt")}](${e})`).join("\n\n"),n=[...e.matchAll(/!\[(?:生成中|Generating|생성 중)\]\
46(([^)]+)\)/g)];if(0===n.length)return e;let a=n[n.length-1],o=a.index??-1;return o<0?e:`${e.slice(0,o)}${r}${e.slice(o+a[0].length)}`},[tg]),si=(0,a.useCallback)((e,t)=>{if(!e)return e;let r=t.trim()||tg("module.imageGenerationFailed"),n=`> ${r}`,a=[...e.matchAll(/!\[(?:生成中|Generating|생성 중)\]\(([^)]+)\)/g)];if(0===a.length)return e;let o=a[a.length-1],s=o.index??-1;return s<0?e:`${e.slice(0,s)}${n}${e.slice(s+o[0].length)}`},[tg]),sl=(0,a.useCallback)((e,t,r)=>{let n=null==t?void 0:t.trim();if(!e||!n)return e;let a=`![${tg("module.generatingAlt")}](comfy://loading/${n})`,o=`![\u751f\u6210\u4e2d](comfy://loading/${n})`;return e.includes(a)?e.replace(a,r):e.includes(o)?e.replace(o,r):e},[tg]),sd=(0,a.useCallback)((e,t,r)=>{let n=null==e?void 0:e.trim(),a="string"==typeof t?t.trim():"";if(!n||!a)return;let o=`![${tg("module.generatingAlt")}](comfy://loading/${a})`,s="string"==typeof r?r.trim():"";aY(e=>{let t;if(e.some(e=>{let t="string"==typeof e.dbMessageId?e.dbMessageId.trim():"",r="string"==typeof e.id?e.id.trim():String(e.id??"").trim();return t===n||r===n}))return e;let r=s?e.findIndex(e=>{let t="string"==typeof e.dbMessageId?e.dbMessageId.trim():"",r="string"==typeof e.id?e.id.trim():String(e.id??"").trim();return t===s||r===s}):-1;if(r>=0){let n=e[r],a=(null==n?void 0:n.sentAt)??(null==n?void 0:n.timestamp);if(a){let e=new Date(a);Number.isNaN(e.getTime())||(t=new Date(e.getTime()+1e3))}}let a={id:n,dbMessageId:n,text:o,sender:"character",role:"assistant",timestamp:t??new Date,sentAt:t??new Date,avatar:null==rP?void 0:rP.thumbnail,modelName:"ComfyAI"};return r>=0?[...e.slice(0,r+1),a,...e.slice(r+1)]:[...e,a]})},[null==rP?void 0:rP.thumbnail,aY,tg]),sc=(0,a.useCallback)((e,t,r)=>{let n=null==e?void 0:e.trim();n&&0!==t.length&&aY(e=>e.map(e=>{let a="string"==typeof e.dbMessageId?e.dbMessageId.trim():"",o="str
46ing"==typeof e.id?e.id.trim():String(e.id??"").trim();if(a!==n&&o!==n)return e;let s=t.map(e=>`![${tg("module.generatedImageAlt")}](${e})`).join("\n\n"),i=e.text??"",l=sl(i,r,s);return(l===i&&(l=ss(i,t)),l===(e.text??""))?e:{...e,text:l}}))},[sl,ss,aY,tg]),su=(0,a.useCallback)((e,t,r)=>{let n=null==e?void 0:e.trim();n&&aY(e=>e.map(e=>{let a="string"==typeof e.dbMessageId?e.dbMessageId.trim():"",o="string"==typeof e.id?e.id.trim():String(e.id??"").trim();if(a!==n&&o!==n)return e;let s=(t??tg("module.imageGenerationFailed")).trim()||tg("module.imageGenerationFailed"),i=`> ${s}`,l=e.text??"",d=sl(l,r,i);return(d===l&&(d=si(l,s)),d===(e.text??""))?e:{...e,text:d}}))},[sl,si,aY]),sm=(0,a.useCallback)(async(e,t)=>{let r="string"==typeof e?e.trim():"";if(r&&!o2.current.has(r)){o2.current.add(r);try{let e=0;for(;e<48;){let n=await (0,eY.sg)(r);if(n.finished){await so({preserveScroll:!0}),sc(null==t?void 0:t.targetMessageId,(n.images??[]).map(e=>String((null==e?void 0:e.url)??"").trim()).filter(Boolean),r),(null==t?void 0:t.successToast)&&E.default.success(tg("module.imageUpdated"));return}e+=1,await new Promise(t=>setTimeout(t,e<8?2e3:4e3))}await so({preserveScroll:!0}),su(null==t?void 0:t.targetMessageId,tg("module.imageTimeout"),r),(null==t?void 0:t.timeoutToast)&&E.default.error(tg("module.generationTimeout"))}catch(e){await so({preserveScroll:!0}),su(null==t?void 0:t.targetMessageId,e instanceof Error?e.message.slice(0,200):tg("module.imageGenerationFailed"),r),(null==t?void 0:t.errorToast)&&E.default.error(e instanceof Error?e.message.slice(0,400):tg("module.generationFailed"))}finally{o2.current.delete(r)}}},[su,sc,so]),sp=(0,a.useCallback)(async(e,t)=>{let r="string"==typeof e?e.trim():"";if(r&&!o4.current.has(r)){o4.current.add(r);try{let e=0;for(;e<72;){var n;let a=await (0,eY.X_)(r),o=String(a.status??"").toLowerCase();if("done"===o){await so({preserveScroll:!0}),sc(null==t?void 0:t.targetMessageId,(a.result_urls??[]).map(e=>String(e??"").trim()).filter(Boolean),void 0),(null==t?void 0:t.successToast)&&E.default.success(tg("module.imageUpdated"));return}if("failed"===o||"refunded"===o||"refund_failed"===o){if(a.request_blocked)throw Error(tg("module.imageRequestBlockedRefunded"));throw Error(tg("module.imageGenerationFailed"))}let s=null==(n=a.upstream_request_id)?void 0:n.trim();if(s)return void await sm(s,t);e+=1,await new Promise(t=>setTimeout(t,e<10?2e3:4e3))}await so({preserveScroll:!0}),su(null==t?void 0:t.targetMessageId,tg("module.imageTimeout"),void 0),(null==t?void 0:t.timeoutToast)&&E.default.error(tg("module.generationTimeout"))}catch(e){await so({preserveScroll:!0}),su(null==t?void 0:t.targetMessageId,e instanceof Error?e.message.slice(0,200):tg("module.imageGenerationFailed"),void 0),(null==t?void 0:t.errorToast)&&E.default.error(e instanceof Error?e.message.slice(0,400):tg("module.generationFailed"))}finally{o4.current.delete(r)}}},[su,sc,sm,so,tg]),[sh,sg]=(0,a.useState)({open:!1,messageId:"",rawContent:""}),sf=(0,a.useCallback)(e=>{let t=String(e),r=aq.find(e=>{let r=String(e.id??""),n="string"==typeof e.dbMessageId?e.dbMessageId:"";return r===t||n===t});if(!r)return void E.default.error(tg("module.messageNotFound"));if("user"==("user"===r.sender||"user"===r.role?"user":"character"))return;if(r.isStreaming)return void E.default.error(tg("module.waitReplyComplete"));let n=("string"==typeof r.text?r.text:r.content)||"";if(!n.trim())return void E.default.error(tg("module.noReplyText"));let a="string"==typeof r.dbMessageId&&r.dbMessageId.trim()?r.dbMessageId.trim():/^[0-9a-f-]{36}$/i.test(t)?t:null;a?sg({open:!0,messageId:a,rawContent:n}):E.default.error(tg("module.messageNotSynced"))},[aq,tg]),sv=(0,a.useCallback)(e=>{aY(t=>t.map(t=>{let r=String(t.id??""),n="string"==typeof t.dbMessageId?t.dbMessageId:"";if(r===e||n===e){let r=("string"==typeof t.text?t.text:t.content)||"",n=`![语音生成中](audio://loading/${e})`;if(!r.includes("audio://loading/")){let e=`${r}
47
48${n}`;return{...t,text:e,content:e}}}return t}))},[aY]),sb=(0,a.useCallback)(e=>{aY(t=>t.map(t=>{let r=String(t.id??""),n="string"==typeof t.dbMessageId?t.dbMessageId:"";if(r===e||n===e){let e=("string"==typeof t.text?t.text:t.content)||"";if(e.includes("audio://loading/")){let r=e.replace(/!\[语音生成中\]\(audio:\/\/loading\/[^)]+\)/g,"").trim();return{...t,text:r,content:r}}}return t}))},[aY]),sy=(0,a.useCallback)((e,t,r,n)=>{let a=(0,tL.tV)({referenceId:r,voiceTitle:n,audioUrl:t});aY(t=>t.map(t=>{let r=String(t.id??""),n="string"==typeof t.dbMessageId?t.dbMessageId:"";if(r===e||n===e){let e=("string"==typeof t.text?t.text:t.content)||"",r=(0,tL.Wu)(e.replace(/!\[语音生成中\]\(audio:\/\/loading\/[^)]+\)/g,"").trim()),n=r?`${r}
49
50${a}`:a;return{...t,text:n,content:n}}return t}))}
50,[aY]),sx=(0,a.useCallback)(()=>{oH(!1),oU(null),o0(!1),oG(""),oY([]),oJ("anime")},[]),sw=(0,a.useCallback)(e=>{let t=String(e),r=aq.find(e=>{let r=String(e.id??""),n="string"==typeof e.dbMessageId?e.dbMessageId:"";return r===t||n===t});if(!r)return void E.default.error(tg("module.messageNotFound"));if("user"==("user"===r.sender||"user"===r.role?"user":"character"))return;if(r.isStreaming)return void E.default.error(tg("module.waitReplyComplete"));let n=("string"==typeof r.text?r.text:r.content)||"";if(!n.trim())return void E.default.error(tg("module.noReplyText"));let a="string"==typeof r.dbMessageId&&r.dbMessageId.trim()?r.dbMessageId.trim():/^[0-9a-f-]{36}$/i.test(t)?t:null;if(!a)return void E.default.error(tg("module.messageNotSynced"));if(oU(a),oH(!0),ab){let e=sn(ab);if(e){oK(e.prompt),oG(e.negative_prompt),oY(e.style_tags),oJ(e.style_mode),o0(!1);return}}let o=(0,eY.AM)(n);oK(o),oG(""),oY([]),oJ("anime"),ab&&sa(ab,{prompt:o,negative_prompt:"",style_tags:[],style_mode:"anime"}),o0(!1)},[aq,ab,sn,sa]),sk=(0,a.useCallback)(async()=>{var e,t,r,n;
50if(!oz||!ab)return void E.default.error(tg("module.invalidSession"));if(oZ)return void E.default.error(tg("module.promptGenerating"));let a=null,o=null,s=(null==(e=document.getElementById("chat-messages-scroll-area"))?void 0:e.scrollTop)??null,i=[],l=()=>{if(null==s)return;let e=document.getElementById("chat-messages-scroll-area");e&&(e.scrollTop=s)},d=()=>{null!=s&&(l(),requestAnimationFrame(()=>{l()}),[24,80,160,320,640,960,1200].forEach(e=>{let t=window.setTimeout(()=>{l()},e);i.push(t)}))};if(!o1.current){o1.current=!0,o9(!0),o0(!0);try{let e,s="string"==typeof oW?oW.trim():"",i="string"==typeof oV?oV.trim():"";(s||i||oQ.length>0)&&sa(ab,{prompt:s,negative_prompt:i,style_tags:oQ,style_mode:oX});try{e=await (0,eY.qO)({values:{},chat_session_id:ab,anchor_message_id:oz,style_mode:oX})}catch(r){if(!(0,eY.N0)(r))throw r;let t=r.duplicate;if(!await tT(tg("module.duplicateImageTaskConfirm",{status:(null==t?void 0:t.existing_status)??"unknown"})))return;e=await (0,eY.qO)({values:{},chat_session_id:ab,anchor_message_id:oz,force_submit:!0,style_mode:oX})}a=(null==(t=e.request_id)?void 0:t.trim())||`generation:${e.generation_id}`,o=(null==(r=e.target_message_id)?void 0:r.trim())||null,sd(o??void 0,a,oz),sx(),d(),E.default.success(tg("module.imageTaskSubmitted"));let l=null==(n=e.request_id)?void 0:n.trim();l?await sm(l,{successToast:!0,timeoutToast:!0,errorToast:!0,targetMessageId:e.target_message_id??oz}):await sp(e.generation_id,{successToast:!0,timeoutToast:!0,errorToast:!0,targetMessageId:e.target_message_id??oz})}catch(e){if((0,eY.aW)(e)){(0,eX.x)(e),n5(void 0,"comfy_chat_inline");return}if((0,eY.Uy)(e))return void E.default.error(e.message);a&&o&&su(o,e instanceof Error?e.message.slice(0,200):tg("module.imageGenerationFailed"),a),await so({preserveScroll:!0}),d(),E.default.error(e instanceof Error?e.message.slice(0,400):tg("module.generationFailed"))}finally{i.forEach(e=>{window.clearTimeout(e)}),i.length=0,l(),o0(!1),o1.current=!1,o9(!1)}}},[oz,oV,oW,oQ,oX,ab,sx,oZ,so,su,sd,sm,sp,tT,tg,sa,n5]),sS=(0,a.useRef)(sm),sC=(0,a.useRef)(sp),sI=(0,a.useRef)(so);(0,a.useEffect)(()=>{sS.current=sm},[sm]),(0,a.useEffect)(()=>{sC.current=sp},[sp]),(0,a.useEffect)(()=>{sI.current=so},[so]),(0,a.useEffect)(()=>{if(!tA||!ab){o6.current=null;return}if(o6.current===ab)return;o6.current=ab;let e=!1;return(async()=>{try{let r=await (0,eY.yq)(ab,12);if(e||await sI.current(),e||0===r.length)return;for(let n of r){var t;if(e)return;let r=null==(t=n.upstream_request_id)?void 0:t.trim();r?sS.current(r,{successToast:!1,timeoutToast:!1,errorToast:!1,targetMessageId:n.target_message_id??void 0}):sC.current(n.id,{successToast:!1,timeoutToast:!1,errorToast:!1,targetMessageId:n.target_message_id??void 0})}}catch(e){console.warn("[chat-inline-comfy] restore polling failed",e)}})(),()=>{e=!0}},[tA,ab]),(0,a.useCallback)(async(e,t)=>{try{rP&&rR({...rP,author_name:t})}catch(e){throw console.error("更新作者失败:",e),e}},[rP]);let sj=(0,a.useCallback)(async()=>{if(!tA)return void ni("");try{let e=await e0.A.getReferralCode();ni((e.code||"").trim().toLowerCase())}catch{ni("")}},[tA]),sM=(0,a.useCallback)(e=>{switch(e){case"quick-start":nv("edit"),ng(!0);break;case"export":(0,tI.mv)({messages:aq,characterName:(null==rP?void 0:rP.title)||(null==rP?void 0:rP.name)||"",sessionId:ab??void 0});break;case"share":sj(),r9(!0);break;case"memory":nd(!0);break;case"page-settings":nu(!0);break;case"model-params":np(!0);break;case"custom-config":nS(null),nI(!1),nw(!0);break;case"mod":n$()}},[aq,rP,sj,ab,tg,n$]),sN=(0,a.useCallback)(async e=>{await nK({summaryThreshold:e})},[nK]),sE=(0,a.useCallback)(async e=>{nX.setEnabled(e.customOpacity),e.customOpacity&&nX.setOpacity(e.bubbleOpacity),nJ.setFontSizePx(e.bubbleFontSizePx),nZ.setEnabled(e.streamAutoScroll),e.bgEnabled!==nU.bgEnabled&&await nK({bgEnabled:e.bgEnabled})},[nK,nX,nJ,nZ,nU.bgEnabled]),s_=(0,a.useCallback)(async e=>{await nK({temperature:e.temperature,topP:e.topP,presencePenalty:e.presencePenalty,frequencyPenalty:e.frequencyPenalty,maxTokens:null})},[nK]),sT=(0,a.useMemo)(()=>{let e=new URL(`/chat/${t}`,window.location.origin);return tA&&ns&&e.searchParams.set("ref",ns),e.toString()},[t,tA,ns]),sP=function(e){let[t,r]=(0,a.useState)("grace");return(0,a.useEffect)(()=>{let e=setTimeout(()=>{r(e=>"grace"===e?"skeleton":e)},100);return()=>clearTimeout(e)},[]),(0,a.useEffect)(()=>
50{if("skeleton"!==t)return;let e=setTimeout(()=>{r("done")},300);return()=>clearTimeout(e)},[t]),("grace"!==t||!!e)&&"grace"!==t&&("skeleton"===t||e)}(rA||aS&&ak&&0===aq.length),sR=!rP&&(sP||rA),sA=aq.some(e=>"user"===e.sender),sL=ab?aj.find(e=>e.id===ab):aj[0],sO=(null==sL?void 0:sL.messageCount)??0,sF=((null==sL?void 0:sL.archivedBefore)??0)>0,s$=aP.total>0||sO>0||aP.hasArchived||sF,sD=sA||s$,[sB,sq]=(0,a.useState)(!1);(0,a.useEffect)(()=>{sD&&sq(!0)},[sD]);let sH=(0,a.useMemo)(()=>aj.some(e=>e.id!==ab&&((e.messageCount??0)>0||(e.archivedBefore??0)>0)),[aj,ab]),sz=(0,a.useMemo)(()=>{var e,t;return null==(t=(e={description:null==rP?void 0:rP.description,hasUserOrServerHistory:sD,hasEnteredChatMode:sB,otherSessionsHaveHistory:sH}).description)||!t.trim()||!!e.hasUserOrServerHistory||!!e.hasEnteredChatMode||!!e.otherSessionsHaveHistory},[null==rP?void 0:rP.description,sD,sB,sH]),sU=(0,a.useCallback)(async()=>{if(!nb){ny(!0);try{var e,t;let r=null;(null==rP?void 0:rP.description)&&!sD&&(r=await (null==(t=r6.current)?void 0:t.extractCharacterProfile())??null);let n=(null==tR||null==(e=tR.quick_start_config)?void 0:e.trim())||null,a=tg("module.quickStart.defaultDisplayName",{defaultValue:"用户"}),o=(0,x.ZN)(tR,a),s=(0,x.AT)(o,tg),i=null;if(r&&function(e){let t=e.trim();if(!t)return!1;let r=t.split("\n").filter(e=>e.trim()).filter(e=>R.test(e.trim()));if(0===r.length)return t.length>=8;let n=0;for(let e of r){let t=e.trim().match(R);t&&O(t[3])&&(n+=1)}return n/r.length<.9}(r)?i=function(e,t){let r=F(e),n=L(F(t)),a=r.split("\n").map(e=>{let t=e.match(R);if(!t)return e;let r=A(t[1].trim()),a=t[3].trim(),o=r?n.get(r):void 0;return o&&!O(o)&&O(a)?`${t[1]}${t[2]}${o}`:e}),o=new Set(L(r).keys()),s=[];for(let[e,t]of n)!o.has(e)&&(O(t)||s.push(`${e}:${t}`));let i=a.join("\n").trim();return 0===s.length?i:s.length>0&&i?`${i}
51${s.join("\n")}`:s.join("\n")}(r,n??s):n&&(i=n),i){r3(i),E.default.success(tg("module.quickStart.filledHint"));return}nv("send"),ng(!0)}catch(e){console.error("[ChatModule] handleQuickStart:",e),E.default.error(tg("module.quickStart.extractFailed"))}finally{ny(!1)}}},[nb,null==rP?void 0:rP.description,sD,tR,tg,r3]);if(sR)return(0,n.jsx)("div",{className:"chat-module-canvas h-full w-full p-4 animate-fade-in",children:(0,n.jsx)("div",{className:"h-full flex flex-col max-w-4xl mx-auto w-full pt-8",children:(0,n.jsx)(t5.hD,{messageCount:6})})});if(rO||!rP)return(0,n.jsx)(to,{error:rO});let sW=ew??(null==rP?void 0:rP.suggested_questions),sK=rv(rP);return(0,n.jsxs)("div",{id:"chat-module-container",className:`chat-module-canvas relative flex flex-col w-full min-h-0 overflow-x-hidden overflow-y-clip ${q}`,style:{height:"100%"},children:[th?null:(0,n.jsx)(tC,{onMenuItemClick:sM,showOnMobile:!1}),z&&t_&&tE&&(0,n.jsx)(tp,{characterName:rP.title||rP.name,suggestedQuestions:sD?void 0:sW,onSelectQuestion:ov,disabled:aH||sK,suggestedTourKeepOpen:tM?nH:void 0,onShare:()=>{sj(),r9(!0)},characterId:rP.id,initialFavorited:tl,onOpenRecharge:n5,onBack:oh}),(0,n.jsx)("div",{className:"flex flex-1 min-h-0",style:z&&t_&&tE?{paddingTop:"var(--chat-header-offset, calc(var(--top-safe-area-inset, env(safe-area-inset-top, 0px)) + 2.75rem))"}:void 0,children:(0,n.jsxs)("div",{className:"flex-1 flex flex-col min-h-0 min-w-0 overflow-x-hidden overflow-y-clip",children:[aO&&!th&&(0,n.jsx)(eO,{loading:ak,onRetry:aF}),(0,n.jsxs)(e1,{enabled:!0,backgroundImageUrl:n0,showBackgroundImage:sz,bottomSlot:th?void 0:(0,n.jsxs)("div",{className:"relative",children:[aP.totalPages>1&&(0,n.jsx)(y.A,{currentPage:aP.page,totalPages:aP.totalPages,total:aP.total,onPageChange:aR,loading:aA}),sK&&!th&&(0,n.jsx)("div",{className:"mx-3 mb-2 px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400 text-xs text-center",children:(null==rP?void 0:rP.status)==="deleted"?tg("module.cannotContinueDeleted"):tg("module.cannotContinue")}),oq&&"u">typeof document&&(0,o.createPortal)((0,n.jsx)("div",{className:"chat-modal-overlay fixed inset-0 z-[1200] flex items-center justify-center p-4",style:{backgroundColor:"var(--v2-bg-overlay)"},onClick:e=>{e.target!==e.currentTarget||o7||oZ||sx()},role:"dialog","aria-modal":"true","aria-label":tg("module.generateImageTitle"),children:(0,n.jsxs)("div",{className:"chat-modal-panel w-full max-w-md rounded-2xl border border-v2-border-primary p-4 sm:p-5 shadow-2xl",style:{backgroundColor:"var(--v2-bg-card)"},children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-3 mb-4",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold text-v2-accent-primary",children:tg("module.generateImageTitle")}),(0,n.jsx)("button",{type:"button","aria-label":tg("module.close"),onClick:sx,disabled:o7||oZ,className:"p-2 -mr-1 text-v2-text-tertiary hover:text-v2-text-primary hover:bg-v2-bg-hover rounded-md cursor-pointer transition-colors disabled:opacity-50",children:(0,n.jsx)(tN.A,{className:"w-5 h-5"})})]}),(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-3.5 sm:gap-4",children:[(0,n.jsxs)("button",{type:"button",className:`relative min-w-0 rounded-xl overflow-hidden border-2 transition-all aspect-[4/5] sm:aspect-[3/4] ${"realistic"===oX?"border-v2-accent-primary shadow-[0_0_0_2px_rgba(var(--v2-accent-primary-rgb),0.2)]":"border-transparent hover:border-v2-border-primary"}`,onClick:()=>oJ("realistic"),disabled:o7||oZ,children:[(0,n.jsx)("img",{src:"https://cdn.img-cdn.site/comfyai/app-covers/2026-05-27/s305gh28kvsm/f2768a57-5.jpg",className:"absolute inset-0 w-full h-full object-cover",alt:"Realistic"}),(0,n.jsx)("div",{className:"absolute inset-0 bg-gradient-to-t from-black/60 via-trans
51parent to-transparent"}),(0,n.jsxs)("div",{className:"absolute bottom-2 left-2 right-2 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"text-white font-medium text-sm drop-shadow-md",children:tg("module.comfyStyleModeRealistic")}),"realistic"===oX&&(0,n.jsx)("div",{className:"w-5 h-5 rounded-full bg-v2-accent-primary flex items-center justify-center shrink-0 shadow-sm",children:(0,n.jsx)(tj.A,{className:"w-3.5 h-3.5 text-white"})})]})]}),(0,n.jsxs)("button",{type:"button",className:`relative min-w-0 rounded-xl overflow-hidden border-2 transition-all aspect-[4/5] sm:aspect-[3/4] ${"anime"===oX?"border-v2-accent-primary shadow-[0_0_0_2px_rgba(var(--v2-accent-primary-rgb),0.2)]":"border-transparent hover:border-v2-border-primary"}`,onClick:()=>oJ("anime"),disabled:o7||oZ,children:[(0,n.jsx)("img",{src:"https://cdn.img-cdn.site/comfyai/app-covers/2026-05-27/9hdbvvhkxqd6/6bf369fc-c.jpg",className:"absolute inset-0 w-full h-full object-cover",alt:"Anime"}),(0,n.jsx)("div",{className:"absolute inset-0 bg-gradient-to-t from-black/60 via-trans
51parent to-transparent"}),(0,n.jsxs)("div",{className:"absolute bottom-2 left-2 right-2 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"text-white font-medium text-sm drop-shadow-md",children:tg("module.comfyStyleModeAnime")}),"anime"===oX&&(0,n.jsx)("div",{className:"w-5 h-5 rounded-full bg-v2-accent-primary flex items-center justify-center shrink-0 shadow-sm",children:(0,n.jsx)(tj.A,{className:"w-3.5 h-3.5 text-white"})})]})]})]}),(0,n.jsx)("button",{type:"button","data-tour":"comfy-image-submit",className:"mt-4 min-h-11 w-full rounded-xl bg-v2-gradient-primary px-4 text-sm font-medium text-white shadow-v2-gradient hover:bg-v2-gradient-primary-hover disabled:opacity-50 cursor-pointer",style:{marginBottom:"max(0px, env(safe-area-inset-bottom, 0px))"},onClick:()=>void sk(),disabled:o7||oZ,children:tg("module.submitAutoGenerateCost",{points:tb})})]})}),document.body),(0,n.jsx)(re,{status:tG}),rC?(0,n.jsx)("button",{type:"button",onClick:()=>n5("normal-pay","chat_low_balance"),className:"mx-3 mb-1 w-[calc(100%-1.5rem)] rounded-lg border px-4 py-2 text-xs text-center cursor-pointer transition-colors",style:{backgroundColor:"var(--v2-state-warning-bg)",borderColor:"var(--v2-border-primary)",color:"var(--v2-state-warning)"},children:tg("module.lowBalanceWarning")}):null,(0,n.jsx)(b.A,{value:r5,onChange:r3,onSend:of,disabled:aH||sK||nb,placeholder:sK?tg("module.cannotContinueShort"):tE?tg("module.startChat"):tg("module.shiftEnterTip"),isStreaming:aH&&rH,onCancel:aW,onModClick:()=>n$(),onOpenMemorySettings:()=>nd(!0),showStreamToggle:!tE,isStreamingEnabled:rH,onToggleStreaming:ol,showModelSelector:!0,characterId:tw||t,recommendedModelId:(null==rP?void 0:rP.recommendedModelId)??null,onModelChange:oR,onUserModelSelect:tc?oA:void 0,onModelSelectorClick:rj?n9:void 0,lockedModelId:rM,preferredDefaultModelId:rN,showChatHistory:s&&!tE,onOpenChatHistory:s&&!tE?tn:void 0,isLoading:aH,shortcutCommands:ek??(null==rP?void 0:rP.shortcut_commands),showHideButtonsToggle:!0,showVoiceButton:!1,showActionPanelToggle:!0,isActionPanelOpen:nB,onToggleActionPanel:()=>nq(e=>!e),onQuickStart:!sD&&(null==rP?void 0:rP.description)&&!sK?()=>{sU()}:void 0}),(0,n.jsx)(tU,{isOpen:nB,onClose:()=>nq(!1),isStreamingEnabled:rH,onToggleStreaming:ol,onOpenCustomConfig:()=>{nS(null),nI(!1),nw(!0)},onOpenChatHistory:tn,onNewChat:oj,onOpenPersona:()=>{nv("edit"),ng(!0)},onOpenPageSettings:()=>nu(!0),onOpenMemorySettings:()=>nd(!0),onOpenModelParams:()=>np(!0)})]}),children:[(_||T)&&(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2 px-4 py-2 border-b border-v2-border-primary bg-v2-bg-card",children:[_&&(0,n.jsx)("button",{onClick:_,disabled:P,className:"px-3 py-1.5 text-sm bg-v2-bg-secondary rounded-md hover:bg-v2-bg-hover disabled:opacity-50",children:tg("module.save")}),T&&(0,n.jsx)("button",{onClick:T,disabled:B,className:"px-3 py-1.5 text-sm bg-v2-accent-primary text-white rounded-md hover:bg-v2-accent-hover disabled:opacity-50",children:B?tg("module.publishing"):tg("module.publish")})]}),!th&&!tA&&(0,n.jsx)("button",{type:"button",onClick:rV,className:"mx-4 mt-2 block w-[calc(100%-2rem)] rounded-lg bg-amber-50 px-3 py-2 text-center text-xs text-amber-700 cursor-pointer transition-colors hover:bg-amber-100 active:bg-amber-100/80 dark:bg-amber-950/40 dark:text-amber-100/90 dark:hover:bg-amber-950/60",children:tg("module.guestModeBanner")}),(0,n.jsx)(p.A,{ref:r6,messages:a6,character:rP,cgBookHitsByMessageId:a8,onSendMessage:ov,isLoading:aH,showHeader:!0,showStreamToggle:!tE,showModelSelector:!tE,isStreamingEnabled:rH,streamAutoScrollEnabled:nZ.enabled,onToggleStreaming:ol,onOpenChatHistory:s&&!tE?tn:void 0,characterId:tw||t,recommendedModelId:(null==rP?void 0:rP.recommendedModelId)??null,onModelChange:oR,onUserModelSelect:tc?oA:void 0,onModelSelectorClick:rj?n9:void 0,lockedModelId:rM,preferredDefaultModelId:rN,onRefreshMessage:tA?oI:void 0,onGenerateImageFromMessage:sw,onOpenFishSpeech:sf,onOpenJailbreakMods:tA?nD:void 0,onEditMessage:tA?oO:void 0,onDeleteMessage:tA?oB:void 0,onBranchOrShare:tA&&!sK?oM:void 0,onCancelStreaming:aW,onOpenQuickStartSettings:ob,placeholder:tg("module.shiftEnterTip"),className:"",description:W??(null==rP?void 0:rP.description),builtInCss:G??(null==rP?void 0:rP.builtInCss)??void 0,hasMessageHistory:sD,suggestedQuestions:null==rP?void 0:rP.suggested_questions,hideSuggestedQuestionsBar:z&&t_&&tE,suggestedTourKeepOpen:tM?nH:void 0,inputPositionMode:H,shortcutCommands:ek??(null==rP?void 0:rP.shortcut_commands),overrideBgImage:eS,overrideBgMobile:eC,openingStatements:aX,currentOpeningIndex:aJ,onSwitchOpeningStatement:aZ,paginationPage:aP.page,paginationTotalPages:aP.totalPages,paginationTotal:aP.total,onPageChange:aR,paginationHasArchived:aP.hasArchived,paginationArchivedBefore:aP.archivedBefore,onLoadArchivedMessages:a0,isLoadingArchived:a1,paginationArchivedExhausted:a2,hideInputArea:!0,inputValue:r5,onInputChange:r3})]})]})}),(0,n.jsx)(rt,{isOpen:n4,onClose:n3,onPaymentComplete:od,initialMode:n6,analyticsSource:n7}),(0,n.jsx)(ra,{enabled:!rA&&!!rP,forceShow:tM,customSteps:ow??ok,completedStorageKey:tM?rw:ok?"chat_tour_opening_v1":void 0,onComplete:tM?()=>nz(!1):void 0}),(0,n.jsx)(rr,{isOpen:rJ,onClose:ou,claimableStages:r0,tasksWithStages:r2,onClaim:oc,isLoggedIn:tA,onLogin:om,onQuickRegister:og}),(0,n.jsx)(rn,{isOpen:rU,onClose:op,onRegisterSuccess:oS,onLoginSuccess:oC}),(0,n.jsx)(ro,{isOpen:r7,onClose:()=>r9(!1),character:rP,shareUrl:sT}),(0,n.jsx)(rs,{isOpen:ne,onClose:()=>nt(!1),onConfirmBranch:oN,sessionId:ab,characterId:tw||t,onShareCreated:()=>null==td?void 0:td()}),(0,n.jsx)(ri,{isOpen:!!nr,subsequentCount:(null==nr?void 0:nr.subsequentCount)??0,isBackingUp:na,onConfirmBackup:oF,onConfirmDirect:o$,onCancel:oD}),tP,(0,n.jsx)(rl,{isOpen:nl,onClose:()=>nd(!1),value:nU.summaryThreshold,onSave:sN,isLoading:nW,sessionId:ab,memoryPalaceMode:nU.memoryPalaceMode,chatModelId:(null==r$?void 0:r$.id)??null,onMemoryPalaceModeChange:async e=>{await nK({memoryPalaceMode:e})}}),(0,n.jsx)(rd,{isOpen:nc,onClose:()=>nu(!1),settings:{bgEnabled:nU.bgEnabled,customOpacity:nX.enabled,bubbleOpacity:nX.opacity,bubbleFontSizePx:nJ.fontSizePx,streamAutoScroll:nZ.enabled},onSettingsChange:sE,isLoading:nW}),(0,n.jsx)(rc,{isOpen:nm,onClose:()=>np(!1),params:{temperature:nU.temperature,topP:nU.topP,presencePenalty:nU.presencePenalty,frequencyPenalty:nU.frequencyPenalty},onSave:s_,isLoading:nW}),(0,n.jsx)(ru,{isOpen:nh,onClose:()=>ng(!1),onSend:oy,savedConfig:null==tR?void 0:tR.quick_start_config,onConfigSaved:e=>{tR&&C.useUserStore.getState().setUser({...tR,quick_start_config:e})},mode:nf}),(0,n.jsx)(rm,{isOpen:nx,onClose:()=>{nw(!1),nS(null),nI(!1)},characterId:tw||t,characterName:(null==rP?void 0:rP.title)||(null==rP?void 0:rP.n
51ame),characterBuiltInCss:(null==rP?void 0:rP.builtInCss)??"",characterThumbnail:(null==rP?void 0:rP.thumbnail)??(null==rP?void 0:rP.cover_tiny)??"",characterOpeningStatement:null==rP?void 0:rP.opening_statement,editingMod:nk,newModDraft:nC,onSaveSuccess:()=>{nG(),nM(e=>e+1),nY(),tw&&tA&&ev.Pt.getInitialState(tw,{skipCache:!0}).then(e=>{e&&rT(e)})}}),(0,n.jsx)(rp,{isOpen:nN,onClose:()=>{nE(!1),nY(),tw&&tA&&ev.Pt.getInitialState(tw,{skipCache:!0}).then(e=>{e&&rT(e)})},characterId:tw||t,initialTab:n_,initialPublicModType:nP,openFocusNonce:nA,onCreate:()=>{nS(null),nI(!0),nw(!0)},onEditMod:e=>{nI(!1),nS(e),nw(!0)},nestedCustomConfigOpen:nx,listRefreshNonce:nj}),(0,n.jsx)(rh,{isOpen:ah,onConfirm:()=>{ag(!1);try{localStorage.setItem(ap,"1")}catch{}}}),tw&&(tE?(0,n.jsx)(e2.default,{open:nO,onClose:()=>nF(!1),title:"评论与评分",showCloseButton:!0,showHandle:!0,enableDragToClose:!0,contentClassName:"overflow-hidden p-0 flex flex-col",children:(0,n.jsx)(rg,{characterId:tw})}):nO?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"chat-modal-overlay fixed inset-0 z-[60]",style:{backgroundColor:"var(--v2-bg-overlay)"},onClick:()=>nF(!1)}),(0,n.jsxs)("div",{className:"fixed top-0 right-0 bottom-0 z-[61] flex flex-col w-full md:max-w-[420px] overflow-hidden",style:{backgroundColor:"var(--v2-bg-primary)",boxShadow:"-4px 0 24px rgba(0,0,0,0.18)"},children:[(0,n.jsxs)("div",{className:"flex-shrink-0 flex items-center justify-between px-4 py-3 border-b",style:{borderColor:"var(--v2-border-primary)"},children:[(0,n.jsx)("span",{className:"text-base font-semibold",style:{color:"var(--v2-text-primary)"},children:"评论与评分"}),(0,n.jsx)("button",{type:"button",onClick:()=>nF(!1),className:"p-1 rounded-full hover:opacity-70",style:{color:"var(--v2-text-secondary)"},children:(0,n.jsx)("svg",{className:"w-5 h-5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),(0,n.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,n.jsx)(rg,{characterId:tw})})]})]}):null),(0,n.jsx)(tD,{open:sh.open,messageId:sh.messageId,rawContent:sh.rawContent,onClose:()=>sg(e=>({...e,open:!1})),onSuccess:sy,onStartGenerating:sv,onErrorOrCancel:sb,onPlaySystemSpeech:(e,t)=>{(0,tB.mV)({messageId:e,rawText:t,lang:(null==tf?void 0:tf.language)||"zh-CN",emptyTip:tg("module.messageFooter.speechEmptyTip","该消息无有效台词可朗读"),unsupportedTip:tg("module.messageFooter.speechUnsupportedTip","当前浏览器不支持文字转语音")})}})]})}},12775:(e,t,r)=>{r.d(t,{$:()=>a});var n=r(14232);let a=()=>{let[e,t]=(0,n.useState)(!1),[r,a]=(0,n.useState)(void 0),[o,s]=(0,n.useState)(void 0),i=(0,n.useCallback)((e,r)=>{a(e),s(r),t(!0)},[]);return{isOpen:e,initialMode:r,analyticsSource:o,openModal:i,closeModal:(0,n.useCallback)(()=>{t(!1),a(void 0),s(void 0)},[]),handlePaymentComplete:(0,n.useCallback)(async e=>{e.success||console.error("Payment failed:",e.error)},[])}}},16146:(e,t,r)=>{r.d(t,{A:()=>X});var n=r(37876),a=r(14232),o=r(51895),s=r(18312),i=r(16429),l=r(86517),d=r(97445);let c=`
52<style id="iframe-v2-variables">
53  :root {
54    --v2-bg-primary: #ffffff;
55    --v2-bg-secondary: #f6f8fa;
56    --v2-bg-card: #ffffff;
57    --v2-bg-overlay: rgba(31, 35, 40, 0.4);
58    --v2-bg-hover: rgba(0, 0, 0, 0.04);
59    --v2-text-primary: #1f2328;
60    --v2-text-secondary: #656d76;
61    --v2-text-tertiary: #8c959f;
62    --v2-text-inverse: #ffffff;
63    --v2-border-primary: #d1d9e0;
64    --v2-border-secondary: #c4cdd5;
65    --v2-border-focus: #0969da;
66    --v2-accent-primary: #0969da;
67    --v2-accent-hover: #0550ae;
68    --v2-state-success: #22c55e;
69    --v2-state-warning: #f59e0b;
70    --v2-state-error: #ef4444;
71    --v2-state-info: #3b82f6;
72  }
73</style>
74`,u=`
75<style id="iframe-v2-variables">
76  :root {
77    --v2-bg-primary: #282828;
78    --v2-bg-secondary: #3c3836;
79    --v2-bg-card: #232221;
80    --v2-bg-overlay: rgba(0, 0, 0, 0.7);
81    --v2-bg-hover: rgba(235, 219, 178, 0.08);
82    --v2-text-primary: #ebdbb2;
83    --v2-text-secondary: #bdae93;
84    --v2-text-tertiary: #a89984;
85    --v2-text-inverse: #282828;
86    --v2-border-primary: rgba(235, 219, 178, 0.14);
87    --v2-border-secondary: rgba(235, 219, 178, 0.2);
88    --v2-border-focus: #fabd2f;
89    --v2-accent-primary: #fabd2f;
90    --v2-accent-hover: #d79921;
91    --v2-state-success: #22c55e;
92    --v2-state-warning: #f59e0b;
93    --v2-state-error: #ef4444;
94    --v2-state-info: #3b82f6;
95  }
96</style>
97`,m=["--v2-bg-primary","--v2-bg-secondary","--v2-bg-card","--v2-bg-overlay","--v2-bg-hover","--v2-text-primary","--v2-text-secondary","--v2-text-tertiary","--v2-text-inverse","--v2-border-primary","--v2-border-secondary","--v2-border-focus","--v2-accent-primary","--v2-accent-hover","--v2-state-success","--v2-state-warning","--v2-state-error","--v2-state-info"],p=["一键复制 Prompt","一键复制剧本设定","一键复制配置词","一键复制当前参数","复制角色信息和开场白","复制存档信息","复制完整档案","生成并复制角色设定","生成并复制角色信息","生成并复制档案","生成并录入档案","生成并复制","生成并录入","复制剧本设定","复制角色设定","复制角色信息","复制配置文本","复制配置","复制档案信息","复制设置并开始游戏","复制信息","开启你的人生","开始创作","生成角色卡","开始游戏","一键复制","复制","生成"],h="EXTRACT_CHARACTER_PROFILE",g="CHARACTER_PROFILE_RESULT";function f(e){let{activeElement:t,iframeElement:r,lastRealInteractionAt:n,now:a}=e,o=e.windowMs??2500;return null!=r&&t===r||a-n<=o}var v=r(37354);let b=`
98<style id="mobile-iframe-gutter-fix">
99  @media (pointer: coarse) {
100    html, body {
101      padding-left: 0 !important;
102      padding-right: 0 !important;
103      margin-left: 0 !important;
104      margin-right: 0 !important;
105    }
106  }
107</style>
108`,y=`
109<style id="mobile-perf-guard">
110  @media (pointer: coarse) {
111    /* ① 全局禁用 backdrop-filter:手机每帧都要模糊背景所有像素,极耗 GPU */
112    * {
113      backdrop-filter: none !important;
114      -webkit-backdrop-filter: none !important;
115    }
116
117    /* ② 装饰粒子/光晕:只停动画和模糊,不藏节点。
118     *    禁止子串 star 宽松匹配(会误伤 intro-start-screen)。 */
119    [class*="particle"], [class*="particles"],
120    [class*="bg-circle"], [class*="bg-decoration"],
121    [class*="bubbles"], [class*="orb"], [class*="blob"],
122    [class*="aurora"], [class*="light-ring"], [class*="glow-ring"],
123    .star, .stars, .star-field, [class*="stars"], [class*="star-"], [class*="-star-"], [class$="-star"],
124    [class*="float-element"], [class*="floating"],
125    .circle-1, .circle-2, .circle-3, .circle-4, .circle-5 {
126      animation: none !important;
127      -webkit-animation: none !important;
128      filter: none !important;
129      -webkit-filter: none !important;
130    }
131
132    /* ③ 禁用 inline style 写的 filter:blur */
133    *[style*="filter"][style*="blur"],
134    *[style*="filter: blur"],
135    *[style*="filter:blur"] {
136      filter: none !important;
137      -webkit-filter: none !important;
138    }
139
140    /* ④ 进入层立刻可点:取消延迟淡入。
141     *    NEVER 对 #loading / #splash / #loading-screen / *screen 写 display:none。 */
142    #loading-screen button,
143    #loading-screen [onclick],
144    .loading-screen button,
145    .loading-enter-btn,
146    .loading-skip,
147    #splash button,
148    #splash [onclick],
149    .splash-screen button,
150    .splash-screen [onclick],
151    .notification-bar,
152    .skip-btn {
153      opacity: 1 !important;
154      animation: none !important;
155      visibility: visible !important;
156      pointer-events: auto !important;
157    }
158    /* 开场常把 body overflow:hidden,手机上恢复可滚,避免误以为卡死 */
159    html, body {
160      overflow: auto !important;
161    }
162
163    /* ⑤ 停止高耗无限动画(不停功能型动画:排除 button/input/a/label/card) */
164    [class*="spin"]:not(button):not(input),
165    [class*="rotate"]:not(button):not(input),
166    [class*="glow"]:not(button):not(input),
167    [class*="pulse"]:not(button):not(a):not(input),
168    [class*="float"]:not(button):not(a):not(label):not(div[class*="card"]) {
169      animation: none !important;
170      -webkit-animation: none !important;
171    }
172    *[style*="animation"][style*="infinite"],
173    *[style*="-webkit-animation"][style*="infinite"] {
174      animation-iteration-count: 1 !important;
175      -webkit-animation-iteration-count: 1 !important;
176    }
177
178    /* ⑥ 卡片 hover 的 translateY/scale 在触屏上无意义 */
179    .card:hover, .setting-card:hover, [class*="card"]:hover {
180      transform: none !important;
181    }
182  }
183</style>
184`;var x=r(32655);function w(e){let t=e.trim().toLowerCase();return t.startsWith("<!doctype")||t.startsWith("<html")||t.includes("<html")&&t.includes("</html>")}let k=`
185<style id="iframe-hide-scrollbar">
186  html, body {
187    scrollbar-width: none;
188    -ms-overflow-style: none;
189  }
190  html::-webkit-scrollbar,
191  body::-webkit-scrollbar {
192    display: none;
193    width: 0;
194    height: 0;
195  }
196</style>
197`,S=`
198<style id="custom-modal-styles">
199  .custom-modal-overlay {
200    position: fixed;
201    top: 0;
202    left: 0;
203    right: 0;
204    bottom: 0;
205    background: var(--v2-bg-overlay);
206    display: flex;
207    align-items: center;
208    justify-content: center;
209    z-index: 999999;
210    animation: modalFadeIn 0.2s ease-out;
211    padding: 16px;
212    box-sizing: border-box;
213  }
214  
215  .custom-modal-box {
216    background: var(--v2-bg-card);
217    border-radius: 12px;
218    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
219    max-width: 360px;
220    width: 100%;
221    overflow: hidden;
222    animation: modalSlideIn 0.25s ease-out;
223  }
224  
225  .custom-modal-content {
226    padding: 24px;
227  }
228  
229  .custom-modal-message {
230    font-size: 15px;
231    line-height: 1.5;
232    color: var(--v2-text-primary);
233    word-break: break-word;
234    white-space: pre-wrap;
235    margin: 0;
236  }
237  
238  .custom-modal-input {
239    width: 100%;
240    padding: 12px;
241    border: 1px solid var(--v2-border-primary);
242    border-radius: 8px;
243    font-size: 14px;
244    margin-top: 16px;
245    box-sizing: border-box;
246    outline: none;
247    transition: border-color 0.2s;
248    background: var(--v2-bg-card);
249    color: var(--v2-text-primary);
250  }
251  
252  .custom-modal-input:focus {
253    border-color: var(--v2-border-focus);
254  }
255  
256  .custom-modal-buttons {
257    display: flex;
258    border-top: 1px solid var(--v2-border-primary);
259  }
260  
261  .custom-modal-btn {
262    flex: 1;
263    padding: 14px 16px;
264    border: none;
265    background: transparent;
266    font-size: 15px;
267    font-weight: 500;
268    cursor: pointer;
269    transition: background-color 0.15s;
270  }
271  
272  .custom-modal-btn:hover {
273    background-color: var(--v2-bg-hover);
274  }
275  
276  .custom-modal-btn:active {
277    background-color: var(--v2-bg-active);
278  }
279  
280  .custom-modal-btn-cancel {
281    color: var(--v2-text-secondary);
282    border-right: 1px solid var(--v2-border-primary);
283  }
284  
285  .custom-modal-btn-confirm {
286    color: var(--v2-accent-primary);
287  }
288  
289  .custom-modal-btn-single {
290    color: var(--v2-accent-primary);
291  }
292  
293  @keyframes modalFadeIn {
294    from { opacity: 0; }
295    to { opacity: 1; }
296  }
297  
298  @keyframes modalSlideIn {
299    from { 
300      opacity: 0;
301      transform: scale(0.95) translateY(-10px);
302    }
303    to { 
304      opacity: 1;
305      transform: scale(1) translateY(0);
306    }
307  }
308</style>
309`,C=`
310<script>
311  (function() {
312    // 保存原生方法的引用(以防万一需要)
313    var nativeAlert = window.alert;
314    var nativeConfirm = window.confirm;
315    var nativePrompt = window.prompt;
316    
317    /**
318     * 创建自定义弹窗
319     * @param {string} message - 显示的消息
320     * @param {string} type - 弹窗类型: 'alert' | 'confirm' | 'prompt'
321     * @param {string} defaultValue - prompt 的默认值
322     * @returns {Promise} - 返回用户的选择结果
323     */
324    function createCustomModal(message, type, defaultValue) {
325      return new Promise(function(resolve) {
326        // 创建遮罩层
327        var overlay = document.createElement('div');
328        overlay.className = 'custom-modal-overlay';
329        
330        // 创建弹窗容器
331        var box = document.createElement('div');
332        box.className = 'custom-modal-box';
333        
334        // 创建内容区域
335        var content = document.createElement('div');
336        content.className = 'custom-modal-content';
337        
338        // 创建消息文本
339        var messageEl = document.createElement('p');
340        messageEl.className = 'custom-modal-message';
341        messageEl.textContent = message || '';
342        content.appendChild(messageEl);
343        
344        // 如果是 prompt,添加输入框
345        var input = null;
346        if (type === 'prompt') {
347          input = document.createElement('input');
348          input.type = 'text';
349          input.className = 'custom-modal-input';
350          input.value = defaultValue || '';
351          input.placeholder = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.promptPlaceholder) || 'Please enter...';
352          content.appendChild(input);
353        }
354        
355        box.appendChild(content);
356        
357        // 创建按钮区域
358        var buttons = document.createElement('div');
359        buttons.className = 'custom-modal-buttons';
360        
361        // 关闭弹窗的函数
362        function closeModal(result) {
363          overlay.style.opacity = '0';
364          overlay.style.transition = 'opacity 0.15s';
365          setTimeout(function() {
366            if (overlay.parentNode) {
367              overlay.parentNode.removeChild(overlay);
368            }
369            resolve(result);
370          }, 150);
371        }
372        
373        if (type === 'alert') {
374          // alert 只有一个确定按钮
375          var okBtn = document.createElement('button');
376          okBtn.className = 'custom-modal-btn custom-modal-btn-single';
377          okBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.ok) || 'OK';
378          okBtn.onclick = function() { closeModal(undefined); };
379          buttons.appendChild(okBtn);
380        } else if (type === 'confirm') {
381          // confirm 有取消和确定按钮
382          var cancelBtn = document.createElement('button');
383          cancelBtn.className = 'custom-modal-btn custom-modal-btn-cancel';
384          cancelBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.cancel) || 'Cancel';
385          cancelBtn.onclick = function() { closeModal(false); };
386          buttons.appendChild(cancelBtn);
387          
388          var confirmBtn = document.createElement('button');
389          confirmBtn.className = 'custom-modal-btn custom-modal-btn-confirm';
390          confirmBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.ok) || 'OK';
391          confirmBtn.onclick = function() { closeModal(true); };
392          buttons.appendChild(confirmBtn);
393        } else if (type === 'prompt') {
394          // prompt 有取消和确定按钮
395          var cancelBtn = document.createElement('button');
396          cancelBtn.className = 'custom-modal-btn custom-modal-btn-cancel';
397          cancelBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.cancel) || 'Cancel';
398          cancelBtn.onclick = function() { closeModal(null); };
399          buttons.appendChild(cancelBtn);
400          
401          var confirmBtn = document.createElement('button');
402          confirmBtn.className = 'custom-modal-btn custom-modal-btn-confirm';
403          confirmBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.ok) || 'OK';
404          confirmBtn.onclick = function() { closeModal(input.value); };
405          buttons.appendChild(confirmBtn);
406          
407          // 支持回车确认
408          input.onkeydown = function(e) {
409            if (e.key === 'Enter') {
410              closeModal(input.value);
411            }
412          };
413        }
414        
415        box.appendChild(buttons);
416        overlay.appendChild(box);
417        document.body.appendChild(overlay);
418        
419        // 如果是 prompt,自动聚焦输入框
420        if (input) {
421          setTimeout(function() { input.focus(); }, 100);
422        }
423        
424        // 点击遮罩层关闭(仅对 alert 生效)
425        overlay.onclick = function(e) {
426          if (e.target === overlay && type === 'alert') {
427            closeModal(undefined);
428          }
429        };
430      });
431    }
432    
433    /**
434     * 覆盖 window.alert
435     * 由于原生 alert 是同步的,但我们的实现是异步的
436     * 这可能会影响某些依赖同步行为的代码
437     */
438    window.alert = function(message) {
439      createCustomModal(message, 'alert');
440    };
441    
442    /**
443     * 不覆盖原生 window.confirm / window.prompt:原生 API 为同步返回,异步自定义弹窗无法保持语义,
444     * 会导致 iframe 内脚本逻辑错乱(尤其移动端 WebView)。
445     * 需要异步确认/输入时请使用 window.customConfirm / window.customPrompt。
446     */
447    
448    /**
449     * 提供异步版本的方法,供需要真正异步行为的代码使用
450     */
451    window.customAlert = function(message) {
452      return createCustomModal(message, 'alert');
453    };
454    
455    window.customConfirm = function(message) {
456      return createCustomModal(message, 'confirm');
457    };
458    
459    window.customPrompt = function(message, defaultValue) {
460      return createCustomModal(message, 'prompt', defaultValue);
461    };
462  })();
463</script>
464`,I=`
465<script>
466  (function() {
467    /**
468     * 执行复制操作的核心函数
469     * 通过 postMessage 发送内容到父窗口的输入框
470     */
471    function sendToInput(textStr) {
472      return new Promise(function(resolve, reject) {
473        try {
474          var text = textStr == null ? '' : String(textStr);
475          var msg;
476          if (window.__QUICK_START_CAPTURE) {
477            window.__QUICK_START_CAPTURE = false;
478            window.__QUICK_START_EXTRACT_DONE = true;
479            msg = { type: 'CHARACTER_PROFILE_RESULT', text: text };
480          } else {
481            msg = { type: 'COPY_TO_INPUT', text: text };
482          }
483          // 沿 parent 链向上投递:聊天页若被嵌套在多层 iframe / 部分 WebView 中,仅 post 到
484          // 直接 parent 时,承载 React 监听器的窗口可能收不到 message。
485          var w = window;
486          var depth = 0;
487          while (depth < 16 && w.parent) {
488            try {
489              var p = w.parent;
490              if (!p || p === w) break;
491              p.postMessage(msg, '*');
492              w = p;
493            } catch (e) {
494              break;
495            }
496            depth++;
497          }
498          resolve();
499        } catch (err) {
500          reject(err);
501        }
502      });
503    }
504    
505    /**
506     * 拦截 document.querySelector,兼容风月平台选择器
507     * 角色卡用 .chatMsgTextarea textarea 或 .chatMsgTextarea 找输入框,
508     * 在我们平台这些元素不存在,返回代理对象把 value 赋值转成 postMessage
509     */
510    var originalQuerySelector = document.querySelector.bind(document);
511    document.querySelector = function(selector) {
512      var result = originalQuerySelector(selector);
513      if (result) return result;
514      // 兼容风月平台的输入框选择器
515      var inputSelectors = ['.chatMsgTextarea textarea', '.chatMsgTextarea', '#chat-input', '.chat-input textarea'];
516      if (inputSelectors.indexOf(selector) !== -1) {
517        // 返回代理对象,value 赋值触发 postMessage
518        return {
519          _isProxy: true,
520          _value: '',
521          get value() { return this._value; },
522          set value(v) {
523            this._value = v;
524            sendToInput(String(v));
525          },
526          dispatchEvent: function() { return true; },
527          focus: function() {},
528          blur: function() {}
529        };
530      }
531      return null;
532    };
533
534    /**
535     * 通用复制函数 - 支持有参数和无参数调用
536     * 无参数时从 #clipboard-output 获取内容
537     */
538    function universalCopyToClipboard(text) {
539      return new Promise(function(resolve, reject) {
540        var textToCopy = text;
541        
542        // 如果没有传递参数,尝试从常见元素获取内容
543        if (textToCopy === undefined || textToCopy === null || textToCopy === '') {
544          // 优先从 #clipboard-output 获取(角色卡片常用)
545          var outputDiv = document.getElementById('clipboard-output');
546          if (outputDiv) {
547            textToCopy = outputDiv.textContent || outputDiv.innerText;
548          }
549          
550          // 如果还是没有,尝试其他常见选择器
551          if (!textToCopy || textToCopy === '') {
552            var copyableElement = document.querySelector('[data-copyable]') || 
553                                  document.querySelector('.copyable') ||
554                                  document.querySelector('[data-copy-content]');
555            if (copyableElement) {
556              textToCopy = copyableElement.textContent || copyableElement.innerText;
557            }
558          }
559          
560          // 如果还是没有内容,尝试从最近点击的按钮的父元素或相邻元素获取
561          if (!textToCopy || textToCopy === '') {
562            // 尝试从事件源获取(如果有的话)
563            var activeElement = document.activeElement;
564            if (activeElement && activeElement.tagName === 'BUTTON') {
565              // 尝试从按钮的 data 属性获取
566              textToCopy = activeElement.getAttribute('data-copy-text') ||
567                          activeElement.getAttribute('data-clipboard-text');
568              
569              // 尝试从按钮的相邻元素获取
570              if (!textToCopy) {
571                var sibling = activeElement.previousElementSibling || activeElement.nextElementSibling;
572                if (sibling) {
573                  textToCopy = sibling.textContent || sibling.innerText;
574                }
575              }
576              
577              // 尝试从按钮的父元素获取
578              if (!textToCopy && activeElement.parentElement) {
579                var parent = activeElement.parentElement;
580                // 排除按钮本身的文本
581                var clone = parent.cloneNode(true);
582                var buttons = clone.querySelectorAll('button');
583                for (var i = 0; i < buttons.length; i++) {
584                  buttons[i].remove();
585                }
586                textToCopy = clone.textContent || clone.innerText;
587              }
588            }
589          }
590        }
591        
592        // 最终验证
593        if (!textToCopy || String(textToCopy).trim() === '') {
594          // 不要直接 reject,而是显示友好提示
595          reject(new Error((window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.copyNotFound) || 'No content found to copy. Make sure there is copyable content on the page'));
596          return;
597        }
598        
599        sendToInput(String(textToCopy).trim()).then(resolve).cat
599ch(reject);
600      });
601    }
602    
603    /**
604     * 覆盖 navigator.clipboard.writeText
605     * 这是关键!角色卡片中的 copyLoginInfo 等函数直接调用 navigator.clipboard.writeText
606     * 在沙箱 iframe 中 navigator.clipboard 是 undefined,所以需要 polyfill
607     */
608    if (!navigator.clipboard) {
609      navigator.clipboard = {};
610    }
611    navigator.clipboard.writeText = function(text) {
612      return sendToInput(text);
613    };
614    // 同时提供 readText 的空实现,防止其他代码报错
615    if (!navigator.clipboard.readText) {
616      navigator.clipboard.readText = function() {
617        return Promise.reject(new Error((window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.clipboardReadUnavailable) || 'Clipboard reading is unavailable in this environment'));
618      };
619    }
620    
621    // 立即设置函数
622    window.__copyToClipboard = universalCopyToClipboard;
623    window.copyToClipboard = universalCopyToClipboard;
624    
625    // 空的 selectScenario 函数,防止报错
626    window.selectScenario = function(scenario) {
627      // 空函数,防止报错
628    };
629    
630    /**
631     * 在 DOMContentLoaded 后再次设置,确保覆盖角色卡片的函数
632     */
633    document.addEventListener('DOMContentLoaded', function() {
634      window.__copyToClipboard = universalCopyToClipboard;
635      window.copyToClipboard = universalCopyToClipboard;
636      // 再次确保 navigator.clipboard.writeText 被覆盖
637      if (!navigator.clipboard) {
638        navigator.clipboard = {};
639      }
640      navigator.clipboard.writeText = function(text) {
641        return sendToInput(text);
642      };
643    });
644    
645    /**
646     * 在页面完全加载后最后一次设置,确保覆盖所有脚本定义的函数
647     */
648    window.addEventListener('load', function() {
649      window.__copyToClipboard = universalCopyToClipboard;
650      window.copyToClipboard = universalCopyToClipboard;
651    });
652    
653    /**
654     * 使用 MutationObserver 监听脚本执行,确保我们的函数始终是最终版本
655     */
656    setTimeout(function() {
657      window.__copyToClipboard = universalCopyToClipboard;
658      window.copyToClipboard = universalCopyToClipboard;
659    }, 0);
660    
661    setTimeout(function() {
662      window.__copyToClipboard = universalCopyToClipboard;
663      window.copyToClipboard = universalCopyToClipboard;
664    }, 100);
665    
666    /**
667     * 拦截 document.execCommand('copy')
668     * 很多旧的角色卡片使用 textarea + execCommand 的方式复制
669     * 我们需要拦截这种方式,获取选中的文本并发送到输入框
670     */
671    var originalExecCommand = document.execCommand.bind(document);
672    document.execCommand = function(command) {
673      if (command === 'copy') {
674        // 获取当前选中的文本
675        var selectedText = '';
676        var selection = window.getSelection();
677        if (selection && selection.toString()) {
678          selectedText = selection.toString();
679        }
680        
681        // 如果没有选中文本,尝试从 activeElement 获取(通常是 textarea)
682        if (!selectedText && document.activeElement) {
683          var el = document.activeElement;
684          if (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT') {
685            selectedText = el.value;
686          }
687        }
688        
689        // 如果获取到了文本,发送到输入框
690        if (selectedText && selectedText.trim()) {
691          sendToInput(selectedText.trim());
692          return true; // 返回 true 表示命令执行成功
693        }
694      }
695      // 其他命令或没有获取到文本时,调用原始方法
696      return originalExecCommand.apply(document, arguments);
697    };
698  })();
699</script>
700`,j=`
701<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
702<style>
703  /* 防止 iOS Safari 的双击缩放 */
704  * {
705    touch-action: manipulation;
706  }
707  /* 图片懒加载占位 - 防止布局抖动,使用 V2 变量 */
708  img[loading="lazy"] {
709    background: linear-gradient(90deg, var(--v2-skeleton-base) 25%, var(--v2-skeleton-highlight) 50%, var(--v2-skeleton-base) 75%);
710    background-size: 200% 100%;
711    animation: shimmer 1.5s infinite;
712  }
713  @keyframes shimmer {
714    0% { background-position: 200% 0; }
715    100% { background-position: -200% 0; }
716  }
717</style>
718`,M=`
719<script>
720(function() {
721  var lastHeight = 0;
722  var queued = false;
723  function getHeight() {
724    var html = document.documentElement;
725    var body = document.body;
726    return Math.ceil(Math.max(
727      html ? html.scrollHeight : 0,
728      body ? body.scrollHeight : 0,
729      html ? html.offsetHeight : 0,
730      body ? body.offsetHeight : 0,
731      html ? html.clientHeight : 0
732    ));
733  }
734  function reportHeight() {
735    var height = getHeight();
736    if (!height || Math.abs(height - lastHeight) < 2) return;
737    lastHeight = height;
738    try {
739      parent.postMessage({ type: 'DESCRIPTION_IFRAME_HEIGHT', height: height }, '*');
740    } catch (e) {}
741  }
742  function scheduleReport() {
743    if (queued) return;
744    queued = true;
745    requestAnimationFrame(function() {
746      queued = false;
747      reportHeight();
748    });
749  }
750  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', reportHeight);
751  else reportHeight();
752  window.addEventListener('load', reportHeight);
753  window.addEventListener('resize', scheduleReport);
754  if (typeof ResizeObserver !== 'undefined') {
755    var ro = new ResizeObserver(scheduleReport);
756    if (document.documentElement) ro.observe(document.documentElement);
757    if (document.body) ro.observe(document.body);
758    document.addEventListener('DOMContentLoaded', function() {
759      if (document.body) ro.observe(document.body);
760    });
761  }
762  if (typeof MutationObserver !== 'undefined' && document.documentElement) {
763    new MutationObserver(scheduleReport).observe(document.documentElement, {
764      childList: true,
765      subtree: true,
766      attributes: true,
767      characterData: true
768    });
769  }
770  setTimeout(reportHeight, 50);
771  setTimeout(reportHeight, 250);
772  setTimeout(reportHeight, 1000);
773})();
774</script>
775`,N=`
776<script>
777(function() {
778  function canScrollY(el) {
779    if (!el || el === document || el === window) return false;
780    var style = window.getComputedStyle(el);
781    var overflowY = style.overflowY;
782    if (overflowY !== 'auto' && overflowY !== 'scroll') return false;
783    return el.scrollHeight > el.clientHeight + 1;
784  }
785  function findScrollableAncestor(start) {
786    var el = start;
787    while (el && el !== document.documentElement) {
788      if (canScrollY(el)) return el;
789      el = el.parentElement;
790    }
791    return canScrollY(document.scrollingElement) ? document.scrollingElement : null;
792  }
793  document.addEventListener('touchmove', function(e) {
794    var target = e.target;
795    if (!target || !target.nodeType) return;
796    if (findScrollableAncestor(target)) {
797      e.stopImmediatePropagation();
798    }
799  }, { capture: true, passive: true });
800})();
801</script>
802`,E=`
803<script>
804(function() {
805  var mq = window.matchMedia && window.matchMedia('(pointer: coarse)');
806  if (!mq || !mq.matches) return;
807  function syncIframeInnerHeight() {
808    var h = window.innerHeight;
809    if (window.visualViewport && window.visualViewport.height > 0) {
810      h = Math.round(window.visualViewport.height);
811    }
812    if (h > 0) {
813      document.documentElement.style.setProperty('--iframe-inner-h', h + 'px');
814    }
815  }
816  syncIframeInnerHeight();
817  window.addEventListener('resize', syncIframeInnerHeight);
818  window.addEventListener('orientationchange', syncIframeInnerHeight);
819  if (window.visualViewport) {
820    window.visualViewport.addEventListener('resize', syncIframeInnerHeight);
821  }
822  if (document.readyState === 'loading') {
823    document.addEventListener('DOMContentLoaded', syncIframeInnerHeight);
824  }
825})();
826</script>
827<style id="mobile-opening-overlay-fix">
828  @media (pointer: coarse) {
829    /* 开场层:fixed+100vh → absolute+iframe 可视高度,避免跳过按钮落在裁切区 */
830    .opening, #opening,
831    .opening-screen, #opening-screen,
832    .intro-overlay, #intro-overlay,
833    #splash, .splash-screen, .splash, #splash-screen {
834      position: absolute !important;
835      top: 0 !important;
836      left: 0 !important;
837      right: 0 !important;
838      width: 100% !important;
839      height: var(--iframe-inner-h, 100dvh) !important;
840      min-height: var(--iframe-inner-h, 100dvh) !important;
841      max-height: var(--iframe-inner-h, 100dvh) !important;
842    }
843
844    .skip-btn, [class*="skip-btn"], #skip-btn, #skip-button, button#skip {
845      position: absolute !important;
846      top: auto !important;
847      z-index: 2147483646 !important;
848      bottom: max(12px, env(safe-area-inset-bottom, 0px)) !important;
849      right: max(12px, env(safe-area-inset-right, 0px)) !important;
850      pointer-events: auto !important;
851    }
852  }
853</style>
854`,_=`
855<script>
856  (function() {
857    // 提供 localStorage 的内存替代实现
858    try {
859      // 测试 localStorage 是否可用
860      window.localStorage.getItem('__test__');
861    } catch(e) {
862      // localStorage 不可用,提供内存替代
863      var memoryStorage = {};
864      Object.defineProperty(window, 'localStorage', {
865        value: {
866          getItem: function(key) { return memoryStorage[key] || null; },
867          setItem: function(key, value) { memoryStorage[key] = String(value); },
868          removeItem: function(key) { delete memoryStorage[key]; },
869          clear: function() { memoryStorage = {}; },
870          get length() { return Object.keys(memoryStorage).length; },
871          key: function(i) { return Object.keys(memoryStorage)[i] || null; }
872        },
873        writable: false,
874        configurable: false
875      });
876    }
877    
878    // 提供 sessionStorage 的内存替代实现
879    try {
880      window.sessionStorage.getItem('__test__');
881    } catch(e) {
882      var sessionMemory = {};
883      Object.defineProperty(window, 'sessionStorage', {
884        value: {
885          getItem: function(key) { return sessionMemory[key] || null; },
886          setItem: function(key, value) { sessionMemory[key] = String(value); },
887          removeItem: function(key) { delete sessionMemory[key]; },
888          clear: function() { sessionMemory = {}; },
889          get length() { return Object.keys(sessionMemory).length; },
890          key: function(i) { return Object.keys(sessionMemory)[i] || null; }
891        },
892        writable: false,
893        configurable: false
894      });
895    }
896
897    // 提供 document.cookie 的安全替代
898    // 沙箱 iframe(无 allow-same-origin)访问 document.cookie 会抛 SecurityError,
899    // 需在此提供内存实现,防止角色卡脚本的未捕获异常冒泡到父页面触发 React 错误边界。
900    try {
901      // 先测试 document.cookie 是否可用
902      void document.cookie;
903    } catch(e) {
904      var memoryCookies = {};
905      try {
906        Object.defineProperty(document, 'cookie', {
907          get: function() {
908            return Object.keys(memoryCookies).map(function(k) {
909              return k + '=' + memoryCookies[k];
910            }).join('; ');
911          },
912          set: function(val) {
913            if (!val || typeof val !== 'string') return;
914            var pair = val.split(';')[0];
915            var eqIdx = pair.indexOf('=');
916            if (eqIdx < 0) return;
917            var k = pair.slice(0, eqIdx).trim();
918            var v = pair.slice(eqIdx + 1).trim();
919            // 检测删除指令(过期 或 max-age=0)
920            var isDelete = /expires=Thu,s*01 Jan 1970/i.test(val) || /max-age=0/i.test(val);
921            if (isDelete) { delete memoryCookies[k]; } else { memoryCookies[k] = v; }
922          },
923          configurable: true,
924        });
925      } catch(e2) {
926        // defineProperty 也失败时静默处理
927      }
928    }
929  })();
930</script>
931`,T=`
932<script>
933  (function() {
934    // 用户最近一次在 iframe 内真实交互的「允许 focus」截止时间戳
935    var allowFocusUntil = 0;
936    var ALLOW_WINDOW_MS = 1500;
937    function markUserInteraction() {
938      allowFocusUntil = Date.now() + ALLOW_WINDOW_MS;
939    }
940    ['pointerdown', 'mousedown', 'touchstart', 'keydown'].forEach(function(evt) {
941      window.addEventListener(evt, markUserInteraction, true);
942    });
943    function isFocusAllowed() {
944      return Date.now() <= allowFocusUntil;
945    }
946
947    try {
948      var originalFocus = HTMLElement.prototype.focus;
949      HTMLElement.prototype.focus = function() {
950        if (!isFocusAllowed()) return;
951        try { return originalFocus.apply(this, arguments); } catch (e) { /* 忽略 */ }
952      };
953    } catch (e) { /* prototype 不可写时放弃守卫,保持原生行为 */ }
954
955    try {
956      // input/textarea 的 select() 同样会把焦点拉进 iframe(两者的 select 各自独立定义,需分别守卫)
957      var originalInputSelect = HTMLInputElement.prototype.select;
958      HTMLInputElement.prototype.select = function() {
959        if (!isFocusAllowed()) return;
960        try { return originalInputSelect.apply(this, arguments); } catch (e) { /* 忽略 */ }
961      };
962    } catch (e) { /* 同上 */ }
963
964    try {
965      var originalTextAreaSelect = HTMLTextAreaElement.prototype.select;
966      HTMLTextAreaElement.prototype.select = function() {
967        if (!isFocusAllowed()) return;
968        try { return originalTextAreaSelect.apply(this, arguments); } catch (e) { /* 忽略 */ }
969      };
970    } catch (e) { /* 同上 */ }
971
972    try {
973      var originalWindowFocus = window.focus;
974      window.focus = function() {
975        if (!isFocusAllowed()) return;
976        try { return originalWindowFocus.apply(window, arguments); } catch (e) { /* 忽略 */ }
977      };
978    } catch (e) { /* 同上 */ }
979
980    // autofocus 属性由浏览器原生处理,prototype 守卫拦不住,需要摘除
981    function stripAutofocus() {
982      try {
983        var nodes = document.querySelectorAll('[autofocus]');
984        for (var i = 0; i < nodes.length; i++) {
985          nodes[i].removeAttribute('autofocus');
986        }
987      } catch (e) { /* 忽略 */ }
988    }
989    if (document.readyState === 'loading') {
990      document.addEventListener('DOMContentLoaded', stripAutofocus);
991    } else {
992      stripAutofocus();
993    }
994    // 兜底:加载期若已被抢焦点(如 autofocus 在守卫前生效),把焦点还给父页
995    window.addEventListener('load', function() {
996      if (isFocusAllowed()) return;
997      try {
998        var active = document.activeElement;
999        if (active && active !== document.body && typeof active.blur === 'function') {
1000          active.blur();
1001        }
1002      } catch (e) { /* 忽略 */ }
1003    });
1004  })();
1005</script>
1006`,P=`
1007<script>
1008  (function() {
1009    // 立即执行:标记页面开始渲染时间
1010    var startTime = Date.now();
1011    
1012    // DOMContentLoaded 后的优化 - 简化版,只做必要的操作
1013    document.addEventListener('DOMContentLoaded', function() {
1014      // 使用 requestAnimationFrame 确保首次渲染完成后再执行优化
1015      requestAnimationFrame(function() {
1016        // 图片懒加载 - 只处理没有 loading 属性的图片
1017        var images = document.querySelectorAll('img:not([loading])');
1018        for (var i = 0; i < images.length; i++) {
1019          var img = images[i];
1020          // 首屏图片(前3张)使用 eager 加载,其他使用 lazy
1021          if (i < 3) {
1022            img.setAttribute('loading', 'eager');
1023            img.setAttribute('fetchpriority', 'high');
1024          } else {
1025            img.setAttribute('loading', 'lazy');
1026          }
1027          img.setAttribute('decoding', 'async');
1028        }
1029      });
1030    });
1031  })();
1032</script>
1033`,R=`
1034<style id="android-select-fix-style">
1035  .android-select-wrap { position: relative; display: inline-block; min-width: 8em; max-width: 100%; vertical-align: middle; }
1036  .android-select-wrap select[data-android-native-hidden] {
1037    position: absolute !important; opacity: 0 !important; width: 100% !important; height: 100% !important;
1038    left: 0; top: 0; margin: 0 !important; padding: 0 !important; border: none !important;
1039    pointer-events: none !important; z-index: -1;
1040  }
1041  .android-select-wrap .android-select-btn {
1042    display: block; width: 100%; box-sizing: border-box; padding: 0.4em 0.6em; font: inherit;
1043    text-align: left; cursor: pointer; border: 1px solid var(--v2-border-primary, #ccc); border-radius: 6px;
1044    background: var(--v2-bg-card, #fff); color: var(--v2-text-primary, #111);
1045  }
1046  .android-select-wrap .android-select-btn:disabled { opacity: 0.6;
1046 cursor: not-allowed; }
1047  .android-select-overlay { position: fixed; inset: 0; z-index: 2147483646; background: rgba(0,0,0,0.4); }
1048  .android-select-sheet {
1049    position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);
1050    width: 92vw; max-width: 560px; max-height: 68vh; overflow-y: auto; z-index: 2147483647;
1051    background: var(--v2-bg-card, #fff); border-radius: 12px;
1052    box-shadow: 0 8px 32px rgba(0,0,0,0.22); padding: 8px 0 0;
1053  }
1054  .android-select-sheet button {
1055    display: block; width: 100%; padding: 12px 16px; border: none; background: none;
1056    font: inherit; text-align: left; color: var(--v2-text-primary, #111);
1057  }
1058  .android-select-sheet button:active { background: var(--v2-bg-hover, rgba(0,0,0,0.06)); }
1059  .android-select-sheet .android-select-group-label { padding: 8px 16px 4px; font-size: 0.75em; color: var(--v2-text-tertiary, #999); }
1060  .android-select-multi-row {
1061    display: flex; align-items: center; gap: 12px; padding: 10px 16px; border-bottom: 1px solid var(--v2-border-primary, #eee);
1062    cursor: pointer; font: inherit; color: var(--v2-text-primary, #111);
1063  }
1064  .android-select-multi-row input { flex-shrink: 0; width: 1.1em; height: 1.1em; }
1065  .android-select-multi-row span { flex: 1; text-align: left; }
1066  .android-select-multi-done { padding: 12px 16px 16px; border-top: 1px solid var(--v2-border-primary, #eee); }
1067  .android-select-multi-done-btn {
1068    display: block; width: 100%; padding: 12px; border-radius: 8px; border: none;
1069    background: var(--v2-accent-primary, #2d2d2d); color: var(--v2-text-inverse, #fff); font: inherit; font-weight: 600;
1070  }
1071</style>
1072<script>
1073(function() {
1074  if (!/Android/i.test(navigator.userAgent || '')) return;
1075  function closeOverlay(el) {
1076    if (el && el.parentNode) el.parentNode.removeChild(el);
1077  }
1078  function dispatchChange(sel) {
1079    var ev;
1080    try { ev = new Event('change', { bubbles: true }); } catch (err) {
1081      ev = document.createEvent('Event'); ev.initEvent('change', true, true);
1082    }
1083    sel.dispatchEvent(ev);
1084  }
1085  function openSheet(sel, btn) {
1086    var overlay = document.createElement('div');
1087    overlay.className = 'android-select-overlay';
1088    overlay.addEventListener('click', function(e) {
1089      if (e.target === overlay) closeOverlay(overlay);
1090    });
1091    var sheet = document.createElement('div');
1092    sheet.className = 'android-select-sheet';
1093    function applyIndex(idx) {
1094      if (idx < 0 || idx >= sel.options.length) return;
1095      sel.selectedIndex = idx;
1096      dispatchChange(sel);
1097      btn.textContent = sel.options[sel.selectedIndex] ? sel.options[sel.selectedIndex].text : '';
1098      closeOverlay(overlay);
1099    }
1100    var i, node, j, o, b, gl;
1101    for (i = 0; i < sel.children.length; i++) {
1102      node = sel.children[i];
1103      if (node.tagName === 'OPTGROUP') {
1104        gl = document.createElement('div');
1105        gl.className = 'android-select-group-label';
1106        gl.textContent = node.label || '';
1107        sheet.appendChild(gl);
1108        for (j = 0; j < node.children.length; j++) {
1109          o = node.children[j];
1110          if (o.tagName !== 'OPTION') continue;
1111          b = document.createElement('button');
1112          b.type = 'button';
1113          b.textContent = o.text;
1114          (function(idx) {
1115            b.addEventListener('click', function() { applyIndex(idx); });
1116          })(o.index);
1117          sheet.appendChild(b);
1118        }
1119      } else if (node.tagName === 'OPTION') {
1120        b = document.createElement('button');
1121        b.type = 'button';
1122        b.textContent = node.text;
1123        (function(idx) {
1124          b.addEventListener('click', function() { applyIndex(idx); });
1125        })(node.index);
1126        sheet.appendChild(b);
1127      }
1128    }
1129    overlay.appendChild(sheet);
1130    document.body.appendChild(overlay);
1131  }
1132  function openMultiSheet(sel, btn) {
1133    var overlay = document.createElement('div');
1134    overlay.className = 'android-select-overlay';
1135    overlay.addEventListener('click', function(e) {
1136      if (e.target === overlay) closeOverlay(overlay);
1137    });
1138    var sheet = document.createElement('div');
1139    sheet.className = 'android-select-sheet';
1140    function onToggle(opt) {
1141      dispatchChange(sel);
1142      syncBtn(sel, btn);
1143    }
1144    function addRow(opt) {
1145      var row = document.createElement('label');
1146      row.className = 'android-select-multi-row';
1147      var cb = document.createElement('input');
1148      cb.type = 'checkbox';
1149      cb.checked = opt.selected;
1150      cb.disabled = opt.disabled;
1151      cb.addEventListener('change', function() {
1152        opt.selected = cb.checked;
1153        onToggle(opt);
1154      });
1155      var span = document.createElement('span');
1156      span.textContent = opt.text;
1157      row.appendChild(cb);
1158      row.appendChild(span);
1159      sheet.appendChild(row);
1160    }
1161    var i, node, j, o, gl;
1162    for (i = 0; i < sel.children.length; i++) {
1163      node = sel.children[i];
1164      if (node.tagName === 'OPTGROUP') {
1165        gl = document.createElement('div');
1166        gl.className = 'android-select-group-label';
1167        gl.textContent = node.label || '';
1168        sheet.appendChild(gl);
1169        for (j = 0; j < node.children.length; j++) {
1170          o = node.children[j];
1171          if (o.tagName === 'OPTION') addRow(o);
1172        }
1173      } else if (node.tagName === 'OPTION') {
1174        addRow(node);
1175      }
1176    }
1177    var doneBar = document.createElement('div');
1178    doneBar.className = 'android-select-multi-done';
1179    var doneBtn = document.createElement('button');
1180    doneBtn.type = 'button';
1181    doneBtn.className = 'android-select-multi-done-btn';
1182    doneBtn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.done) || 'Done';
1183    doneBtn.addEventListener('click', function() { closeOverlay(overlay); });
1184    doneBar.appendChild(doneBtn);
1185    sheet.appendChild(doneBar);
1186    overlay.appendChild(sheet);
1187    document.body.appendChild(overlay);
1188  }
1189  function syncBtn(sel, btn) {
1190    if (sel.multiple) {
1191      var n = 0;
1192      var texts = [];
1193      var k, op;
1194      for (k = 0; k < sel.options.length; k++) {
1195        op = sel.options[k];
1196        if (op.selected) {
1197          n++;
1198          if (texts.length < 3) texts.push(op.text);
1199        }
1200      }
1201      if (n === 0) btn.textContent = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.pleaseSelect) || 'Please select...';
1202      else if (n <= 3 && texts.length === n) btn.textContent = texts.join(',');
1203      else {
1204        var selectedTemplate = (window.__DESCRIPTION_IFRAME_I18N__ && window.__DESCRIPTION_IFRAME_I18N__.selectedItems) || '{{count}} selected';
1205        btn.textContent = selectedTemplate.replace('{{count}}', String(n));
1206      }
1207    } else {
1208      var opt = sel.options[sel.selectedIndex];
1209      btn.textContent = opt ? opt.text : '';
1210    }
1211    btn.disabled = !!sel.disabled;
1212  }
1213  function enhanceSelect(sel) {
1214    if (sel.getAttribute('data-android-select-enhanced')) return;
1215    if (!sel.parentNode) return;
1216    sel.setAttribute('data-android-select-enhanced', '1');
1217    sel.setAttribute('data-android-native-hidden', '1');
1218    var wrap = document.createElement('span');
1219    wrap.className = 'android-select-wrap';
1220    sel.parentNode.insertBefore(wrap, sel);
1221    wrap.appendChild(sel);
1222    var btn = document.createElement('button');
1223    btn.type = 'button';
1224    btn.className = 'android-select-btn';
1225    wrap.appendChild(btn);
1226    sel.addEventListener('change', function() { syncBtn(sel, btn); });
1227    var mo = new MutationObserver(function() { syncBtn(sel, btn); });
1228    mo.observe(sel, { attributes: true, attributeFilter: ['disabled', 'multiple'] });
1229    btn.addEventListener('click', function() {
1230      if (sel.disabled) return;
1231      if (sel.multiple) openMultiSheet(sel, btn);
1232      else openSheet(sel, btn);
1233    });
1234    syncBtn(sel, btn);
1235  }
1236  function scan() {
1237    var list = document.querySelectorAll('select:not([data-android-select-enhanced])');
1238    var i;
1239    for (i = 0; i < list.length; i++) {
1240      enhanceSelect(list[i]);
1241    }
1242  }
1243  function run() {
1244    scan();
1245    var mo = new MutationObserver(function() { scan(); });
1246    mo.observe(document.documentElement, { childList: true, subtree: true });
1247  }
1248  if (document.readyState === 'loading') {
1249    document.addEventListener('DOMContentLoaded', run);
1250  } else {
1251    run();
1252  }
1253})();
1254</script>
1255`,A=`
1256<style id="android-native-input-fix-style">
1257  @media (pointer: coarse) {
1258    input[type="date"], input[type="time"], input[type="datetime-local"],
1259    input[type="month"], input[type="week"], input[type="color"], input[type="file"] {
1260      min-height: 44px;
1261    }
1262    input[type="range"] {
1263      min-height: 44px;
1264      touch-action: pan-x;
1265    }
1266  }
1267</style>
1268<script>
1269(function() {
1270  if (!/Android/i.test(navigator.userAgent || '')) return;
1271  function enhanceColor(inp) {
1272    if (inp.getAttribute('data-android-color-enhanced')) return;
1273    if (inp.type !== 'color') return;
1274    inp.setAttribute('data-android-color-enhanced', '1');
1275    inp.addEventListener('click', function(e) {
1276      e.preventDefault();
1277      e.stopPropagation();
1278      var t = document.createElement('input');
1279      t.type = 'color';
1280      t.value = inp.value || '#000000';
1281      t.setAttribute('aria-hidden', 'true');
1282      t.style.cssText = 'position:fixed;left:0;top:0;width:100%;height:100%;opacity:0.02;z-index:2147483647;';
1283      document.body.appendChild(t);
1284      function dispatch(inpEl, name) {
1285        var ev;
1286        try { ev = new Event(name, { bubbles: true }); } catch (err) {
1287          ev = document.createEvent('Event'); ev.initEvent(name, true, true);
1288        }
1289        inpEl.dispatchEvent(ev);
1290      }
1291      function cleanup() {
1292        t.removeEventListener('blur', onBlur);
1293        if (t.parentNode) t.parentNode.removeChild(t);
1294      }
1295      function onBlur() { cleanup(); }
1296      t.addEventListener('input', function() {
1297        inp.value = t.value;
1298        dispatch(inp, 'input');
1299      });
1300      t.addEventListener('change', function() {
1301        inp.value = t.value;
1302        dispatch(inp, 'change');
1303      });
1304      t.addEventListener('blur', onBlur);
1305      try { t.focus(); t.click(); } catch (err) { cleanup(); }
1306    }, true);
1307  }
1308  function enhancePicker(inp) {
1309    if (inp.getAttribute('data-android-picker-enhanced')) return;
1310    var ty = inp.type;
1311    if (ty !== 'date' && ty !== 'time' && ty !== 'datetime-local' && ty !== 'month' && ty !== 'week') return;
1312    inp.setAttribute('data-android-picker-enhanced', '1');
1313    inp.addEventListener('click', function() {
1314      if (typeof inp.showPicker !== 'function') return;
1315      try { inp.showPicker(); } catch (e) {}
1316    }, true);
1317  }
1318  function scan() {
1319    var i;
1320    var colors = document.querySelectorAll('input[type="color"]:not([data-android-color-enhanced])');
1321    for (i = 0; i < colors.length; i++) enhanceColor(colors[i]);
1322    var pickers = document.querySelectorAll(
1323      'input[type="date"]:not([data-android-picker-enhanced]),' +
1324      'input[type="time"]:not([data-android-picker-enhanced]),' +
1325      'input[type="datetime-local"]:not([data-android-picker-enhanced]),' +
1326      'input[type="month"]:not([data-android-picker-enhanced]),' +
1327      'input[type="week"]:not([data-android-picker-enhanced])'
1328    );
1329    for (i = 0; i < pickers.length; i++) enhancePicker(pickers[i]);
1330  }
1331  function run() {
1332    scan();
1333    var mo = new MutationObserver(function() { scan(); });
1334    mo.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['type'] });
1335  }
1336  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);
1337  else run();
1338})();
1339</script>
1340`,L=`
1341<script>
1342(function() {
1343  if (!/Android/i.test(navigator.userAgent || '')) return;
1344  function safeHttpUrl(href) {
1345    try {
1346      var u = new URL(href, document.baseURI);
1347      if (u.protocol === 'http:' || u.protocol === 'https:') return u.href;
1348    } catch (e) {}
1349    return null;
1350  }
1351  document.addEventListener('click', function(e) {
1352    var el = e.target;
1353    if (!el || !el.closest) return;
1354    var a = el.closest('a[href]');
1355    if (!a) return;
1356    if (a.hasAttribute('download')) return;
1357    var tgt = a.getAttribute('target');
1358    if (tgt !== '_blank' && tgt !== '_new') return;
1359    var url = safeHttpUrl(a.getAttribute('href') || '');
1360    if (!url) return;
1361    e.preventDefault();
1362    try {
1363      window.parent.postMessage({ type: 'OPEN_EXTERNAL_URL', url: url }, '*');
1364    } catch (err) {}
1365  }, true);
1366  var origOpen = window.open;
1367  window.open = function(url, name, specs) {
1368    if (url != null && String(url).trim() !== '') {
1369      var resolved = safeHttpUrl(String(url));
1370      if (resolved) {
1371        try {
1372          window.parent.postMessage({ type: 'OPEN_EXTERNAL_URL', url: resolved }, '*');
1373        } catch (e) {}
1374        return null;
1375      }
1376    }
1377    return origOpen.apply(window, arguments);
1378  };
1379})();
1380</script>
1381`,O=`
1382<style id="android-misc-fix-style">
1383  @media (pointer: coarse) {
1384    input[type="radio"], input[type="checkbox"] {
1385      min-width: 22px; min-height: 22px; margin: 4px;
1386    }
1387    label { padding: 4px 0; }
1388    summary { min-height: 44px; display: flex; align-items: center; cursor: pointer; }
1389  }
1390</style>
1391<script>
1392(function() {
1393  if (!/Android/i.test(navigator.userAgent || '')) return;
1394
1395  /* ---------- 1. audio/video autoplay 降级:首次可见时 play ---------- */
1396  function tryAutoplay() {
1397    var medias = document.querySelectorAll('audio[autoplay], video[autoplay]');
1398    for (var i = 0; i < medias.length; i++) {
1399      (function(m) {
1400        if (m.getAttribute('data-android-autoplay-fixed')) return;
1401        m.setAttribute('data-android-autoplay-fixed', '1');
1402        var p = m.play();
1403        if (p && p.catch) {
1404          p.catch(function() {
1405            m.muted = true;
1406            var p2 = m.play();
1407            if (p2 && p2.catch) p2.catch(function() {});
1408          });
1409        }
1410      })(medias[i]);
1411    }
1412  }
1413
1414  /* ---------- 2. details/summary polyfill(旧版 WebView) ---------- */
1415  function polyfillDetails() {
1416    if (typeof HTMLDetailsElement !== 'undefined' && 'open' in document.createElement('details')) return;
1417    var allDetails = document.querySelectorAll('details');
1418    for (var i = 0; i < allDetails.length; i++) {
1419      (function(d) {
1420        if (d.getAttribute('data-android-details-polyfill')) return;
1421        d.setAttribute('data-android-details-polyfill', '1');
1422        var summary = d.querySelector('summary');
1423        if (!summary) return;
1424        if (!d.hasAttribute('open')) {
1425          var children = d.children;
1426          for (var j = 0; j < children.length; j++) {
1427            if (children[j] !== summary) children[j].style.display = 'none';
1428          }
1429        }
1430        summary.addEventListener('click', function(e) {
1431          e.preventDefault();
1432          var isOpen = d.hasAttribute('open');
1433          if (isOpen) d.removeAttribute('open'); else d.setAttribute('open', '');
1434          var children = d.children;
1435          for (var j = 0; j < children.length; j++) {
1436            if (children[j] !== summary) children[j].style.display = isOpen ? 'none' : '';
1437          }
1438        });
1439      })(allDetails[i]);
1440    }
1441  }
1442
1443  /* ---------- 3. 长按选择文字保障 ---------- */
1444  function enableLongPressSelect() {
1445    var style = document.createElement('style');
1446    style.textContent = 'body, p, span, div, li, td, th, h1, h2, h3, h4, h5, h6 { -webkit-user-select: text !important; user-select: text !important; }';
1447    document.head.appendChild(style);
1448  }
1449
1450  function run() {
1451    tryAutoplay();
1452    polyfillDetails();
1453    enableLongPressSelect();
1454    var mo = new MutationObserver(function() { tryAutoplay(); polyfillDetails(); });
1455    mo.observe(document.documentElement, { childList: true, subtree: true });
1456  }
1457  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);
1458  else run();
1459})();
1460</script>
1461`,F="fonts.googleapis.cn",$=[/noto.*(sc|tc|hk|jp|kr)/i,/zcool/i,/ma[\s+]shan[\s+]zheng/i,/long[\s+
1461]cang/i,/liu[\s+]jian/i,/zhi[\s+]mang/i,/smiley[\s+]sans/i,/source[\s+]han/i];function D(e){try{return e.replace(/([?&]family=)([^&]+)/gi,(e,t,r)=>{let n=r.replace(/\+/g," "),a=n.indexOf(":");if(-1===a)return e;let o=n.slice(0,a);if(!$.some(e=>e.test(o)))return e;let s=n.slice(a+1).match(/^wght@([\d;]+)$/);if(!s)return e;let i=s[1].split(";").map(Number).filter(e=>!isNaN(e)&&e>0),l=function(e,t){if(e.length<=2)return e;let r=[];for(let t of[400,700]){if(r.length>=2)break;let n=e.reduce((e,r)=>Math.abs(e-t)<Math.abs(r-t)?e:r);r.includes(n)||r.push(n)}return r.sort((e,t)=>e-t)}(i,0);return`${t}${o.replace(/ /g,"+")}:wght@${l.join(";")}`})}catch{return e}}let B=(0,a.forwardRef)(function(e,t){let{characterId:r,description:o,builtInCss:i,isVisible:l,onAnimationEnd:$,autoHeight:B=!1,onCopyToInput:q}=e,{t:H}=(0,d.Bd)("chat"),z=(0,a.useRef)(null),U=(0,a.useRef)(q);U.current=q;let W=(0,a.useRef)(null),K=(0,a.useRef)(null),V=(0,a.useRef)(0),G=B&&!w(o),[Q,Y]=a.useState(!1),[X,J]=a.useState(void 0),[Z,ee]=a.useState(!1),[et,er]=a.useState(null),{themeId:en}=(0,s.gj)(),ea=(0,a.useMemo)(()=>({promptPlaceholder:H("module.descriptionIframe.promptPlaceholder"),ok:H("module.descriptionIframe.ok"),cancel:H("module.descriptionIframe.cancel"),copyNotFound:H("module.descriptionIframe.copyNotFound"),clipboardReadUnavailable:H("module.descriptionIframe.clipboardReadUnavailable"),done:H("module.descriptionIframe.done"),pleaseSelect:H("module.descriptionIframe.pleaseSelect"),selectedItems:H("module.descriptionIframe.selectedItems",{count:"{{count}}"})}),[H]);(0,a.useImperativeHandle)(t,()=>({extractCharacterProfile:()=>{var e;let t=null==(e=z.current)?void 0:e.contentWindow;return t?new Promise(e=>{W.current&&(W.current(null),W.current=null);let r=window.setTimeout(()=>{W.current&&(W.current(null),W.current=null)},2e3);W.current=t=>{clearTimeout(r),e(t)},t.postMessage({type:h},"*")}):Promise.resolve(null)}}),[]),(0,a.useEffect)(()=>{let e=()=>{setTimeout(()=>{document.activeElement===z.current&&(V.current=Date.now())},0)};return window.addEventListener("blur",e),()=>{window.removeEventListener("blur",e)}},[]),(0,a.useEffect)(()=>{let e=e=>{var t;let r=null==(t=z.current)?void 0:t.contentWindow;if(null!=r&&null!=e.source&&e.source!==r)return;let n=e.data;if("object"==typeof n&&null!==n){if(G&&"DESCRIPTION_IFRAME_HEIGHT"===n.type){let e=Number(n.height);Number.isFinite(e)&&e>0&&J(Math.min(Math.max(Math.ceil(e),200),3e4));return}if("OPEN_EXTERNAL_URL"===n.type&&"string"==typeof n.url){if(!f({activeElement:document.activeElement,iframeElement:z.current,lastRealInteractionAt:V.current,now:Date.now()}))return void console.warn("[DescriptionIframe] 忽略无真实交互信号的 OPEN_EXTERNAL_URL(疑似角色卡自动触发)");try{let e=new URL(n.url);if("http:"!==e.protocol&&"https:"!==e.protocol)return;window.open(n.url,"_blank","noopener,noreferrer")}catch{}return}}let a=function(e){let t=e;if("string"==typeof e)try{t=JSON.parse(e)}catch{return null}if(null==t||"object"!=typeof t)return null;let r=t;if(r.type!==g)return null;let n=r.text;return"string"==typeof n?n:"number"==typeof n||"boolean"==typeof n?String(n):null}(n);if(null!==a){let e=W.current;e&&(W.current=null,e(a.trim()?a:null));return}let o=function(e){let t=e;if("string"==typeof e)try{t=JSON.parse(e)}catch{return null}if(null==t||"object"!=typeof t)return null;let r=t;if("COPY_TO_INPUT"!==r.type)return null;let n=r.text;return"string"==typeof n?n:"number"==typeof n||"boolean"==typeof n?String(n):null}(n);if(null==o)return;if(!f({activeElement:document.activeElement,iframeElement:z.current,lastRealInteractionAt:V.current,now:Date.now()}))return void console.warn("[DescriptionIframe] 忽略无真实交互信号的 COPY_TO_INPUT(疑似角色卡自动触发)");let s=U.current;s&&s(o.slice(0,4e3))};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}},[G]);let eo=(0,a.useMemo)(()=>{try{if(o&&o.length>1e6)return console.warn("[DescriptionIframe] description 过大,跳过渲染:",o.length),"";return(0,v.L7)(function(e,t,r){let n,a,o=e&&"string"==typeof e?e:"",s=(0,x.X)(t&&"string"==typeof t?t:""),i=`<script>window.__DESCRIPTION_IFRAME_I18N__=${JSON.stringify(r).replace(/<\//g,"<\\/")};</script>`,l=function(){if("u"<typeof document)return u;let e=getComputedStyle(document.documentElement),t=m.map(t=>{let r=e.getPropertyValue(t).trim();return r?`    ${t}: ${r};`:""}).filter(e=>e.length>0).join("\n");return t?`<style id="iframe-v2-variables">
1462  :root {
1463${t}
1464  }
1465</style>`:"u"<typeof document||document.documentElement.classList.contains("dark")?u:c}(),d=`
1466<script id="quick-start-extract">
1467(function() {
1468  var KEYWORDS = ${JSON.stringify([...p])};
1469  var PLACEHOLDER_EXACT = ${JSON.stringify(["未命名","未知","未设定","未设置","未填","暂无","无","空","待定","待填","待补充","n/a","none","null","-","—","...","…"])};
1470  var PLACEHOLDER_PARTS = ${JSON.stringify(["未填写","等待输入","待填写","待输入","请填写","请输入","请选择","暂无背景"])};
1471
1472  function postToParent(payload) {
1473    var w = window;
1474    var depth = 0;
1475    while (depth < 16 && w.parent) {
1476      try {
1477        var p = w.parent;
1478        if (!p || p === w) break;
1479        p.postMessage(payload, '*');
1480        w = p;
1481      } catch (e) {
1482        break;
1483      }
1484      depth++;
1485    }
1486  }
1487
1488  function isVisible(el) {
1489    if (!el || el.disabled) return false;
1490    var style = window.getComputedStyle(el);
1491    if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') return false;
1492    var rect = el.getBoundingClientRect();
1493    return rect.width > 0 && rect.height > 0;
1494  }
1495
1496  function buttonText(el) {
1497    return (el.textContent || el.innerText || el.value || el.getAttribute('aria-label') || '').trim();
1498  }
1499
1500  function scoreButton(el) {
1501    var text = buttonText(el);
1502    if (!text) return -1;
1503    var best = -1;
1504    for (var i = 0; i < KEYWORDS.length; i++) {
1505      if (text.indexOf(KEYWORDS[i]) !== -1) {
1506        var score = KEYWORDS[i].length * 100 - i;
1507        if (score > best) best = score;
1508      }
1509    }
1510    return best;
1511  }
1512
1513  function findTriggerButton() {
1514    var candidates = document.querySelectorAll('button, input[type="button"], input[type="submit"], a[role="button"], [onclick]');
1515    var bestEl = null;
1516    var bestScore = -1;
1517    for (var i = 0; i < candidates.length; i++) {
1518      var el = candidates[i];
1519      if (!isVisible(el)) continue;
1520      var score = scoreButton(el);
1521      if (score > bestScore) {
1522        bestScore = score;
1523        bestEl = el;
1524      }
1525    }
1526    return bestScore > 0 ? bestEl : null;
1527  }
1528
1529  function isPlaceholderValue(val) {
1530    var t = (val || '').trim();
1531    if (!t) return true;
1532    var lower = t.toLowerCase();
1533    for (var j = 0; j < PLACEHOLDER_EXACT.length; j++) {
1534      if (lower === PLACEHOLDER_EXACT[j]) return true;
1535    }
1536    for (var i = 0; i < PLACEHOLDER_PARTS.length; i++) {
1537      if (t.indexOf(PLACEHOLDER_PARTS[i]) !== -1) return true;
1538    }
1539    return false;
1540  }
1541
1542  function getLabelForInput(input) {
1543    var id = input.getAttribute('id');
1544    if (id) {
1545      var label = document.querySelector('label[for="' + id.replace(/"/g, '') + '"]');
1546      if (label) return (label.textContent || '').trim().replace(/[::]\\s*$/, '');
1547    }
1548    var parent = input.parentElement;
1549    if (parent) {
1550      var siblingLabel = parent.querySelector('label');
1551      if (siblingLabel) return (siblingLabel.textContent || '').trim().replace(/[::]\\s*$/, '');
1552    }
1553    return input.getAttribute('placeholder') || input.getAttribute('name') || input.getAttribute('id') || '';
1554  }
1555
1556  function extractProfileFromDom() {
1557    var ro = document.querySelector('textarea[readonly]');
1558    if (ro && ro.value && ro.value.trim()) return ro.value.trim();
1559
1560    var out = document.getElementById('clipboard-output');
1561    if (out) {
1562      var outText = (out.textContent || out.innerText || '').trim();
1563      if (outText && !isPlaceholderValue(outText)) return outText;
1564    }
1565
1566    var lines = [];
1567    var inputs = document.querySelectorAll('input:not([type="hidden"]):not([type="button"]):not([type="submit"]), textarea:not([readonly]), select');
1568    for (var i = 0; i < inputs.length; i++) {
1569      var input = inputs[i];
1570      if (!isVisible(input)) continue;
1571      var tag = input.tagName.toLowerCase();
1572      var val = '';
1573      if (tag === 'select') {
1574        val = input.options[input.selectedIndex] ? input.options[input.selectedIndex].text : input.value;
1575      } else if (input.type === 'radio' || input.type === 'checkbox') {
1576        if (!input.checked) continue;
1577        val = input.value || buttonText(input) || '已选';
1578      } else if (input.type === 'range') {
1579        val = String(input.value);
1580      } else {
1581        val = input.value || '';
1582      }
1583      val = (val || '').trim();
1584      if (!val || isPlaceholderValue(val)) continue;
1585      var label = getLabelForInput(input);
1586      if (!label) continue;
1587      lines.push(label + ':' + val);
1588    }
1589
1590    var checkedRadios = document.querySelectorAll('input[type="radio"]:checked');
1591    for (var r = 0; r < checkedRadios.length; r++) {
1592      var radio = checkedRadios[r];
1593      if (!isVisible(radio)) continue;
1594      var rLabel = getLabelForInput(radio);
1595      var rVal = (radio.value || '').trim();
1596      if (!rVal) {
1597        var next = radio.nextSibling;
1598        if (next && next.nodeType === 3) rVal = next.textContent.trim();
1599      }
1600      if (!rVal || isPlaceholderValue(rVal)) continue;
1601      if (rLabel) lines.push(rLabel + ':' + rVal);
1602    }
1603
1604    return lines.length ? lines.join('\\n') : '';
1605  }
1606
1607  function finishExtract(text) {
1608    window.__QUICK_START_CAPTURE = false;
1609    window.__QUICK_START_EXTRACT_DONE = true;
1610    postToParent({ type: '${g}', text: text == null ? '' : String(text) });
1611  }
1612
1613  window.addEventListener('message', function(event) {
1614    var data = event.data;
1615    if (!data || data.type !== '${h}') return;
1616
1617    window.__QUICK_START_CAPTURE = true;
1618    window.__QUICK_START_EXTRACT_DONE = false;
1619
1620    var btn = findTriggerButton();
1621    if (btn) {
1622      try { btn.click(); } catch (e) { /* ignore */ }
1623    }
1624
1625    setTimeout(function() {
1626      if (window.__QUICK_START_EXTRACT_DONE) return;
1627      window.__QUICK_START_CAPTURE = false;
1628      var scanned = extractProfileFromDom();
1629      finishExtract(scanned || '');
1630    }, 500);
1631  });
1632})();
1633</script>`,f=l+k+_+T+i+S+C+j+M+N+y+E+b+I+d+P+R+A+L+O;try{n=function(e){if(!e||"string"!=typeof e)return"";if(e.length>2e5)return console.warn("[sanitizeHtml] 内容过大,跳过正则修复:",e.length),e;let t=e,r=(t=t.replace(/<a\s+([^>]*?)\s+<\/a>/gi,"<a $1></a>")).match(/<style[^>]*>/gi)||[],n=t.match(/<\/style>/gi)||[];if(r.length>n.length){let e,r="",n=0,a=0,o=/<style[^>]*>|<\/style>|<\/[a-zA-Z][a-zA-Z0-9]*>/gi;for(;null!==(e=o.exec(t));){let o=e[0].toLowerCase();o.startsWith("<style")?a++:"</style>"===o?a=Math.max(0,a-1):a>0&&(r+=t.substring(n,e.index)+"</style>",n=e.index,a--)}for(r+=t.substring(n);a>0;){let e=r.lastIndexOf("</body>"),t=r.lastIndexOf("</html>"),n=e>0?e:t>0?t:r.length;r=r.substring(0,n)+"</style>"+r.substring(n),a--}t=r}return t=(t=(t=t.replace(/@import\s*;/gi,"/* removed empty @import */")).replace(/(--[a-zA-Z0-9_-]+)\s*:\s*;/g,"$1: inherit;")).replace(/<iframe\b([^>]*?)\bsrc=(["'])(https?:\/\/[^"']+)\2([^>]*)(?:><\/iframe>|\/?>)/gi,(e,t,r,n,a)=>{try{let t=new URL(n);if(["www.youtube.com","youtube.com","youtu.be","player.bilibili.com","www.bilibili.com","player.vimeo.com","vimeo.com"].some(e=>t.hostname===e||t.hostname.endsWith("."+e)))return e}catch{}return""})}(o)}catch(e){console.error("[generateIframeContent] sanitizeHtml 失败,使用原始内容:",e),n=o}if(w(n)){let e,t;try{let r,a,o=(r=n,a=[],r=r.replace(/<style[^>]*>([\s\S]*?)<\/style>/gi,(e,t)=>{let r,n=/@import\s+url\(['"]?(https?:\/\/fonts\.googleapis\.com[^'")\s]+)['"]?\)[^;]*;?/gi,o=t;for(;null!==(r=n.exec(t));){var s;let e=r[1];s=e=D(e),(e=F?s.replace("fonts.googleapis.com",F):s).includes("display=")||(e+=(e.includes("?")?"&":"?")+"display=swap"),a.push(`<link rel="preload" href="${e}" as="style" onload="this.onload=null;this.rel='stylesheet'">`),a.push(`<noscript><link rel="stylesheet" href="${e}"></noscript>`)}return o=o.replace(n,""),`<style${e.slice(6,e.indexOf(">"))}>${o}</style>`}),F&&(r=r.replace(/https?:\/\/fonts\.googleapis\.com/gi,`https://${F}`)),{html:r=(r=r.replace(/<link([^>]*href=["'])(https?:\/\/fonts\.(?:googleapis|googlefonts)\.(?:com|cn)[^"']+)(["'][^>]*\/?>)/gi,(e,t,r,n)=>{if(!/rel=["']stylesheet["']/i.test(e))return e;let a=D(r);return a.includes("display=")||(a+=(a.includes("?")?"&":"?")+"display=swap"),`<link rel="preload" href="${a}" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="${a}"></noscript>`})).replace(/<link([^>]*)href=["'](https?:\/\/(?:cdnjs\.cloudflare\.com|cdn\.jsdelivr\.net|unpkg\.com)\/[^"']+\.css[^"']*)["']([^>]*\/?>)/gi,(e,t,r,n)=>/rel=["']stylesheet["']/i.test(e)?`<link rel="preload" href="${r}" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="${r}"></noscript>`:e),asyncFontLinks:a.join("\n")});e=o.html,t=o.asyncFontLinks}catch(r){console.error("[generateIframeContent] preprocessHtmlForPerformance 失败:",r),e=n,t=""}let r=e;r=r.replace(/<meta[^>]*name=["']viewport["'][^>]*>/gi,"");let a=t+f,o=r.toLowerCase().indexOf("</head>");if(-1!==o)return r.slice(0,o)+a+r.slice(o);let s=r.toLowerCase().indexOf("<head>");if(-1!==s){let e=s+6;return r.slice(0,e)+a+r.slice(e)}let i=r.toLowerCase().indexOf("<body>");if(-1!==i){let e=i+6;return r.slice(0,e)+a+r.slice(e)}let l=r.toLowerCase().indexOf("<html");if(-1!==l){let e=r.indexOf(">",l);if(-1!==e){let t=e+1;return r.slice(0,t)+"<head>"+a+"</head>"+r.slice(t)}}return r}let v=/<script\b[^>]*>([\s\S]*?)<\/script>/gi,$=[],B=n;for(;null!==(a=v.exec(n));)$.push(a[0]);return B=n.replace(v,""),`<!DOCTYPE html>
1634<html lang="zh-CN">
1635<head>
1636  <meta charset="UTF-8">
1637  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
1638  ${l}
1639  ${S}
1640  <style>
1641    /* Reset default styles */
1642    * {
1643      margin: 0;
1644      padding: 0;
1645      box-sizing: border-box;
1646      /* 防止 iOS Safari 的双击缩放,修复移动端点击位置偏移 */
1647      touch-action: manipulation;
1648    }
1649    
1650    html {
1651      width: 100%;
1652      height: 100%;
1653      max-width: 100%;
1654      overflow-x: hidden;
1655      overflow-y: auto;
1656      scrollbar-width: none;
1657      -ms-overflow-style: none;
1658      /* 防止文字大小自动调整导致的布局偏移 */
1659      -webkit-text-size-adjust: 100%;
1660      -ms-text-size-adjust: 100%;
1661      text-size-adjust: 100%;
1662    }
1663    html::-webkit-scrollbar,
1664    body::-webkit-scrollbar {
1665      display: none;
1666      width: 0;
1667      height: 0;
1668    }
1669    
1670    body {
1671      width: 100%;
1672      min-height: 100%;
1673      max-width: 100%;
1674      overflow-x: hidden;
1675      scrollbar-width: none;
1676      -ms-overflow-style: none;
1677      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
1678        'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
1679      -webkit-font-smoothing: antialiased;
1680      -moz-osx-font-smoothing: grayscale;
1681      overflow-wrap: break-word;
1682      word-wrap: break-word;
1683      word-break: break-word;
1684      /* 保留换行符,将 
1685 渲染为换行 */
1686      white-space: pre-line;
1687    }
1688    
1689    /* 图片懒加载占位 - 使用 V2 变量 */
1690    img[loading="lazy"] {
1691      background: linear-gradient(90deg, var(--v2-skeleton-base) 25%, var(--v2-skeleton-highlight) 50%, var(--v2-skeleton-base) 75%);
1692      background-size: 200% 100%;
1693      animation: shimmer 1.5s infinite;
1694    }
1695    @keyframes shimmer {
1696      0% { background-position: 200% 0; }
1697      100% { background-position: -200% 0; }
1698    }
1699    
1700    /* 确保所有元素不超出容器宽度 */
1701    img, video, iframe, embed, object {
1702      max-width: 100% !important;
1703      height: auto !important;
1704    }
1705    
1706    /* 确保文本内容自动换行 */
1707    p, div, span, pre, code {
1708      max-width: 100%;
1709      overflow-wrap: break-word;
1710      word-wrap: break-word;
1711      word-break: break-word;
1712    }
1713    
1714    /* User-provided CSS */
1715    ${s}
1716  </style>
1717  ${_}
1718  ${T}
1719  ${i}
1720  ${k}
1721  ${C}
1722  ${M}
1723  ${N}
1724  ${y}
1725  ${E}
1726  ${b}
1727  ${I}
1728  ${d}
1729  ${P}
1730  ${R}
1731  ${A}
1732  ${L}
1733  ${O}
1734</head>
1735<body>
1736  ${B}
1737  ${$.join("\n")}
1738  ${I}
1739</body>
1740</html>`}(o,i,ea))}catch(e){return console.error("[DescriptionIframe] generateIframeContent 失败:",e),""}},[o,i,ea,en]);(0,a.useEffect)(()=>{!eo&&o&&o.length<=1e6?er(H("module.descriptionIframe.contentLoadFailed")):eo&&et&&er(null)},[eo,o,H]),(0,a.useEffect)(()=>{if(!Q&&l){let e=setTimeout(()=>{ee(!0)},150);return()=>clearTimeout(e)}ee(!1)},[Q,l]),(0,a.useEffect)(()=>{let e=setTimeout(()=>{Q||Y(!0)},100);return()=>clearTimeout(e)},[Q]);let es=(0,a.useCallback)(()=>{if(Y(!0),G&&z.current)try{var e;let t=z.current.contentDocument??(null==(e=z.current.contentWindow)?void 0:e.document);t&&setTimeout(()=>{let e=t.documentElement.scrollHeight;J(e)},100)}catch(e){}},[G]);return(0,a.useEffect)(()=>{let e=K.current;if(!e)return;let t=e=>{"opacity"===e.propertyName&&!l&&$&&$()};return e.addEventListener("transitionend",t),()=>{e.removeEventListener("transitionend",t)}},[l,$]),(0,n.jsx)("div",{ref:K,className:"flex min-h-0 flex-1 flex-col items-center gap-2 px-3 md:px-4 w-full",style:{flex:G?"0 0 auto":void 0,opacity:+!!l,transition:"opacity 200ms ease-out"},children:(0,n.jsx)("div",{className:"flex min-h-0 flex-1 flex-col items-center gap-2 w-full",style:{flex:G?"0 0 auto":void 0},children:(0,n.jsxs)("div",{className:"relative w-full min-h-0 flex-1 max-h-full",style:{flex:G?"0 0 auto":void 0,maxHeight:G?"none":void 0,height:G?X?`${X}px`:"auto":"100%",minHeight:G?"200px":0},children:[et&&(0,n.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"32px",color:"var(--v2-text-secondary)",textAlign:"center",height:"100%"},children:[(0,n.jsx)("p",{style:{fontSize:"14px",marginBottom:"8px"},children:H("module.descriptionIframe.introLoadFailed")}),(0,n.jsx)("p",{style:{fontSize:"12px",color:"var(--v2-text-tertiary)"},children:et})]}),!et&&Z&&(0,n.jsxs)("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",backgroundColor:"var(--v2-bg-card)",zIndex:10,opacity:+!!Z,transition:"opacity 150ms ease-out"},className:"loading-overlay",children:[(0,n.jsx)("div",{style:{width:"48px",height:"48px",border:"4px solid var(--v2-border-primary)",borderTopColor:"var(--v2-accent-primary)",borderRadius:"50%",animation:"spin 1s linear infinite"},className:"loading-spinner"}),(0,n.jsx)("p",{style:{marginTop:"16px",color:"var(--v2-text-secondary)",fontSize:"14px",fontWeight:500},children:H("module.descriptionIframe.loadingIntro")})]}),!et&&(0,n.jsx)("iframe",{ref:z,srcDoc:eo,referrerPolicy:"no-referrer",sandbox:"allow-scripts allow-forms",allow:"clipboard-write; fullscreen; autoplay",title:"Character Description",className:"h-full w-full scrollbar-hide",loading:"eager",onLoad:es,style:{width:"100%",maxWidth:"100%",height:"100%",minHeight:0,border:"none",backgroundColor:"transparent",opacity:+!!Q,transition:"opacity 150ms ease-out",overflow:"auto"}}),(0,n.jsx)("style",{children:`
1741        @keyframes spin {
1742          0% { transform: rotate(0deg); }
1743          100% { transform: rotate(360deg); }
1744        }
1745        
1746        /* 深色模式支持 - 使用 V2 CSS 变量自动适配 */
1747      `})]})})})});var q=r(5617),H=r(6621),z=r(92789),U=r(68587),W=r(64422),K=r(77497),V=r(17308),G=r(26381),Q=r(28975);let Y=(0,a.forwardRef)(function(e,t){let{t:r}=(0,d.Bd)("chat"),{messages:c,character:u,onSendMessage:m,isLoading:p=!1,disabled:h=!1,showHeader:g=!1,showStreamToggle:f=!1,showModelSelector:v=!1,placeholder:b,emptyStateMessage:y,className:x="",isStreamingEnabled:w,streamAutoScrollEnabled:k=!1,onToggleStreaming:S,onOpenChatHistory:C,characterId:I,recommendedModelId:j,onModelChange:M,onUserModelSelect:N,initialModels:E,onModelSelectorClick:_,lockedModelId:T,preferredDefaultModelId:P,onRefreshMessage:R,onEditMessage:A,onDeleteMessage:L,onGenerateImageFromMessage:O,onOpenFishSpeech:F,onOpenJailbreakMods:$,onBranchOrShare:D,onOpenQuickStartSettings:Y,renderMessageComponent:X,description:J,builtInCss:Z,hasMessageHistory:ee=!1,onCancelStreaming:et,suggestedQuestions:er,inputPositionMode:en="fixed",hideSuggestedQuestionsBar:ea=!1,suggestedTourKeepOpen:eo,shortcutCommands:es,openingStatements:ei,currentOpeningIndex:el,onSwitchOpeningStatement:ed,cgBookHitsByMessageId:ec,overrideBgImage:eu,overrideBgMobile:em,inputValue:ep,onInputChange:eh,hideInputArea:eg=!1,paginationPage:ef,paginationTotalPages:ev,paginationTotal:eb,onPageChange:ey,paginationHasArchived:ex=!1,paginationArchivedBefore:ew=null,onLoadArchivedMessages:ek,isLoadingArchived:eS=!1,paginationArchivedExhausted:eC=!1}=e,[eI,ej]=(0,a.useState)(""),eM=ep??eI,eN=(0,a.useCallback)(e=>{eh?eh(e):ej(e)},[eh]),[eE,e_]=(0,a.useState)(!1),[,eT]=(0,a.useState)(!1),{isMobile:eP}=(0,K.X)();(0,s.f5)();let{showImages:eR}=(0,G.b)();(0,a.useLayoutEffect)(()=>{eT(!0)},[]);let eA=(0,a.useRef)(null),eL=(0,a.useRef)(null),eO=(0,a.useRef)(!0),eF=(0,a.useRef)(null),[e$,eD]=(0,a.useState)(null),eB=(0,a.useCallback)(e=>{eL.current=e,eD(e)},[]),eq=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"smooth";eO.current=!0;let t=()=>{let t=eL.current;t&&t.scrollTo({top:t.scrollHeight,behavior:e})};t(),setTimeout(t,50),setTimeout(t,150),setTimeout(t,300),setTimeout(t,500),requestAnimationFrame(()=>{t(),requestAnimationFrame(t)})},[]);(0,a.useEffect)(()=>
1747{if(!e$)return;let e=()=>{eO.current=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:24;return e.scrollHeight-e.scrollTop-e.clientHeight<=t}(e$)};return e(),e$.addEventListener("scroll",e,{passive:!0}),()=>{e$.removeEventListener("scroll",e)}},[e$]),(0,a.useImperativeHandle)(t,()=>({scrollToBottom:eq,setInputValue:e=>eN(e),extractCharacterProfile:()=>{var e;return(null==(e=eF.current)?void 0:e.extractCharacterProfile())??Promise.resolve(null)}}),[eq,eN]);let eH=(0,a.useCallback)(e=>{!e.trim()||p||h||(m(e),eq("smooth"))},[m,eq,p,h]);(0,a.useMemo)(()=>{let e=eu??(null==u?void 0:u.bg_image),t=em??(null==u?void 0:u.bg_mobile);if(!e&&!t)return null;let r=eP?t??null:e??null;return r?(0,V.C5)(r):null},[u,eP,eu,em]);let ez=(0,a.useMemo)(()=>"string"==typeof Z&&Z.trim().length>0,[Z]),eU=(0,a.useMemo)(()=>{let e=[];for(let t=0;t<c.length;t++){let r=c[t],n=(0,i.zK)(r);0===t&&"character"===n&&!0===r.isOpeningStatement&&J&&""!==J.trim()||e.push(t)}return e},[c,J]),eW=(0,a.useMemo)(()=>{for(let e=c.length-1;e>=0;e--){let t=c[e];if("character"===(0,i.zK)(t)&&!(0,Q.n)(t.text))return e}return -1},[c]),eK=b??r("module.chatWindow.placeholder"),eV=!ez&&!X&&eU.length>=32,eG=(0,o.Te)({count:eV?eU.length:0,getScrollElement:()=>eV?eL.current:null,estimateSize:e=>(function(e){let t;if(!e)return 120;let r=("string"==typeof e.text?e.text:e.content)??"",n=r.length;return"user"===(0,i.zK)(e)?n<50?64:n<150?88:120:(t=n<100?80:n<300?140:n<600?220:n<1200?340:420,/<think(?:ing)?>/i.test(r)&&(t+=56),(r.match(/```/g)??[]).length>=2&&(t+=60),t)})(c[eU[e]]),overscan:8}),eQ=(0,a.useMemo)(()=>c.filter(e=>"user"===(0,i.zK)(e)).length>0,[c]),eY=(0,a.useMemo)(()=>!!J&&""!==J.trim()&&!ee&&!eQ&&!eE,[J,ee,eQ,eE]),eX=(0,a.useMemo)(()=>eY&&!eQ,[eY,eQ]),eJ=(0,a.useCallback)(()=>{eX||e_(!0)},[eX]),eZ=(0,a.useRef)(c.length),e0=(0,a.useRef)(""),e1=(0,a.useRef)(0);(0,a.useEffect)(()=>{let e=eZ.current,t=c.length,r=c[t-1],n=r?`${String(r.id??"")}|${"string"==typeof r.dbMessageId?r.dbMessageId:""}`:"",a=e0.current,o=("string"==typeof(null==r?void 0:r.text)?r.text:"string"==typeof(null==r?void 0:r.content)?r.content:"").length,s=!!r&&"character"===(0,i.zK)(r)&&(!0===r.isStreaming||"receiving"===r.streamingStatus),l=s&&o>e1.current;if(k&&eO.current&&(t>e&&n!==a||l)){let e=eL.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight,behavior:"auto"})})}eZ.current=t,e0.current=n,e1.current=s?o:0},[c,k]);let e2=(0,a.useCallback)(()=>{!eM.trim()||p||h||(eH(eM),eN(""))},[eM,p,h,eH,eN]),e4=(0,a.useCallback)(()=>{S&&S()},[S]);return(0,n.jsxs)(n.Fragment,{children:[Array.isArray(er)&&er.length>0&&!eQ&&!ea&&(0,n.jsx)("div",{className:"flex-shrink-0 flex justify-center items-center py-1.5 sm:py-2 border-b border-v2-border-primary",style:{background:"linear-gradient(to bottom right, var(--v2-sidebar-gradient-from), var(--v2-sidebar-gradient-via), var(--v2-sidebar-gradient-to))"},children:(0,n.jsx)(z.A,{questions:er,onSelectQuestion:eH,disabled:p||h,tourKeepOpen:eo})}),(0,n.jsxs)("div",{ref:eB,id:"chat-messages-scroll-area",className:"min-h-0 overflow-y-auto w-full h-full chat-container mx-auto",style:{background:"transparent",display:eY?"flex":void 0,flexDirection:eY?"column":void 0},children:[eY&&J&&(0,n.jsx)(B,{ref:eF,characterId:u.id,description:J,builtInCss:Z??"",isVisible:eX,onAnimationEnd:eJ,autoHeight:eP,onCopyToInput:eN}),!eY&&(0,n.jsxs)(n.Fragment,{children:[0===c.length&&(0,n.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,n.jsx)("div",{className:"text-center text-v2-text-secondary",children:(0,n.jsx)("p",{className:"text-lg mb-2",children:y??r("module.chatWindow.empty")})})}),(0,n.jsxs)("div",{className:"mx-auto pt-24 pb-3 w-full max-w-[720px] px-0.5 md:px-4 relative",children:[(ef??1)>=(ev??1)&&ex&&!eC&&ek?(0,n.jsx)("div",{className:"flex justify-center py-2 mb-2",children:(0,n.jsx)("button",{type:"button",className:"px-4 py-1.5 text-xs font-medium text-v2-text-secondary bg-v2-bg-card border border-v2-border-primary hover:border-v2-border-focus hover:text-v2-text-link rounded-full shadow-sm hover:shadow transition-v2-interactive duration-200",onClick:ek,disabled:eS,children:r("module.loadArchivedMessages")})}):null,eV?(0,n.jsx)("div",{className:"relative w-full",style:{height:eG.getTotalSize()},children:eG.getVirtualItems().map(e=>{let t=eU[e.index],r=c[t];r.id?r.id:String(t);let a=t===eU[eU.length-1];return(0,n.jsx)("div",{"data-index":e.index,ref:eG.measureElement,className:"absolute top-0 left-0 right-0",style:{transform:`translateY(${e.start}px)`},children:(0,n.jsx)("div",{className:`chat-msg-wrapper${a?"":" mb-2 md:mb-4"}`,children:(0,n.jsx)(H.A,{messageId:r.id,fallbackText:"string"==typeof r.text?r.text:void 0,onDelete:L,children:(0,n.jsx)(q.A,{message:r,character:u,builtInCss:Z,cgBookHit:null==ec?void 0:ec.get(r.id),onRefreshMessage:R,onEditMessage:A,onDeleteMessage:L,onGenerateImageFromMessage:O,onOpenFishSpeech:F,onOpenJailbreakMods:$,onSendMessage:eH,onFillInput:eN,isLoading:p,isLatestAiMessage:t===eW,openingStatements:ei,currentOpeningIndex:el,onSwitchOpeningStatement:ed,onOpenQuickStartSettings:Y,archivedBefore:ew,isLastMessage:a,onBranchOrShare:D})})})},e.key)})}):eU.map(e=>{let t=c[e],r=t.id?`${t.id}-${e}
1747`:String(e);if(X)return(0,n.jsx)("div",{className:"mb-2 md:mb-4 last:mb-0",children:X(t,u)},r);let a=e===eW,o=e===eU[eU.length-1];return(0,n.jsx)("div",{className:"chat-msg-wrapper mb-2 md:mb-4 last:mb-0",children:(0,n.jsx)(H.A,{messageId:t.id,fallbackText:"string"==typeof t.text?t.text:void 0,onDelete:L,children:(0,n.jsx)(q.A,{message:t,character:u,builtInCss:Z,cgBookHit:null==ec?void 0:ec.get(t.id),onRefreshMessage:R,onEditMessage:A,onDeleteMessage:L,onGenerateImageFromMessage:O,onOpenFishSpeech:F,onOpenJailbreakMods:$,onSendMessage:eH,onFillInput:eN,isLoading:p,isLatestAiMessage:a,openingStatements:ei,currentOpeningIndex:el,onSwitchOpeningStatement:ed,onOpenQuickStartSettings:Y,archivedBefore:ew,isLastMessage:o,onBranchOrShare:D})})},r)})]})]}),(0,n.jsx)("div",{ref:eA})]}),e$&&!eY&&c.length>0?(0,n.jsx)(W.default,{scrollContainer:e$,direction:"down",onScrollAction:()=>eq("smooth"),showThreshold:80,rightPosition:eP?"left-1/2 -translate-x-1/2":"right-4",bottomPosition:eP?"bottom-[calc(7.5rem+env(safe-area-inset-bottom,0px))]":"bottom-6",className:"z-30"}):null,!eg&&(0,n.jsx)("div",{className:"bg-gradient-to-t from-white via-white to-transparent chat-input-container z-10 pb-[calc(0.375rem+var(--mobile-keyboard-safe-bottom,env(safe-area-inset-bottom,0px)))] md:pb-[calc(1rem+var(--mobile-keyboard-safe-bottom,env(safe-area-inset-bottom,0px)))]",style:{position:en,bottom:"fixed"===en?"var(--embed-parent-bottom-inset, 0px)":0,left:"fixed"===en?"var(--chat-sidebar-offset, 0px)":0,right:0,transition:"fixed"===en?"left 500ms cubic-bezier(0.4, 0, 0.2, 1)":void 0,display:"flex",justifyContent:"center",paddingTop:"2rem"},children:(0,n.jsx)("div",{className:"mx-auto w-full max-w-[720px] px-3 md:px-4",children:(0,n.jsxs)("div",{className:"relative mt-2",children:[ev&&ev>1&&ey?(0,n.jsx)(U.A,{currentPage:ef??1,totalPages:ev,total:eb??0,onPageChange:ey,disabled:p}):(0,n.jsx)("div",{className:"w-full z-5 py-1","aria-hidden":"true",children:(0,n.jsx)("div",{className:"relative",children:(0,n.jsx)("div",{className:"py-0 w-full flex flex-wrap justify-center items-center",style:{minHeight:"24px"}})})}),(0,n.jsx)(l.A,{value:eM,onChange:eN,onSend:e2,disabled:h||p,placeholder:eK,isStreaming:p&&w,onCancel:et,showStreamToggle:f,isStreamingEnabled:w,onToggleStreaming:e4,showModelSelector:v,characterId:I,recommendedModelId:j,onModelChange:M,onUserModelSelect:N,initialModels:E,onModelSelectorClick:_,lockedModelId:T,preferredDefaultModelId:P,showChatHistory:!!C,onOpenChatHistory:C,isLoading:p,shortcutCommands:es})]})})})]})});Y.displayName="ChatWindow";let X=(0,a.memo)(Y,(e,t)=>e.messages===t.messages&&e.isLoading===t.isLoading&&e.character===t.character&&e.disabled===t.disabled&&e.isStreamingEnabled===t.isStreamingEnabled&&e.streamAutoScrollEnabled===t.streamAutoScrollEnabled&&e.onSendMessage===t.onSendMessage&&e.onToggleStreaming===t.onToggleStreaming&&e.onOpenChatHistory===t.onOpenChatHistory&&e.onModelChange===t.onModelChange&&e.onModelSelectorClick===t.onModelSelectorClick&&e.lockedModelId===t.lockedModelId&&e.preferredDefaultModelId===t.preferredDefaultModelId&&e.onRefreshMessage===t.onRefreshMessage&&e.onGenerateImageFromMessage===t.onGenerateImageFromMessage&&e.onOpenFishSpeech===t.onOpenFishSpeech&&e.onOpenJailbreakMods===t.onOpenJailbreakMods&&e.onEditMessage===t.onEditMessage&&e.onDeleteMessage===t.onDeleteMessage&&e.onBranchOrShare===t.onBranchOrShare&&e.onOpenQuickStartSettings===t.onOpenQuickStartSettings&&e.onCancelStreaming===t.onCancelStreaming&&e.showHeader===t.showHeader&&e.showStreamToggle===t.showStreamToggle&&e.showModelSelector===t.showModelSelector&&e.placeholder===t.placeholder&&e.emptyStateMessage===t.emptyStateMessage&&e.className===t.className&&e.renderMessageComponent===t.renderMessageComponent&&e.characterId===t.characterId&&e.recommendedModelId===t.recommendedModelId&&e.description===t.description&&e.builtInCss===t.builtInCss&&e.hasMessageHistory===t.hasMessageHistory&&e.inputPositionMode===t.inputPositionMode&&e.openingStatements===t.openingStatements&&e.currentOpeningIndex===t.currentOpeningIndex&&e.onSwitchOpeningStatement===t.onSwitchOpeningStatement&&e.cgBookHitsByMessageId===t.cgBookHitsByMessageId&&e.overrideBgImage===t.overrideBgImage&&e.overrideBgMobile===t.overrideBgMobile&&e.inputValue===t.inputValue&&e.onInputChange===t.onInputChange&&e.hideInputArea===t.hideInputArea&&e.paginationPage===t.paginationPage&&e.paginationTotalPages===t.paginationTotalPages&&e.paginationTotal===t.paginationTotal&&e.onPageChange===t.onPageChange&&e.paginationHasArchived===t.paginationHasArchived&&e.paginationArchivedBefore===t.paginationArchivedBefore&&e.isLoadingArchived===t.isLoadingArchived&&e.paginationArchivedExhausted===t.paginationArchivedExhausted&&e.onLoadArchivedMessages===t.onLoadArchivedMessages&&!0)},24442:(e,t,r)=>{r.d(t,{A:()=>G});var n=r(37876),a=r(14232),o=r(53731),s=r(67768),i=r(97445),l=r(42194);let d=e=>{let{currentModel:t,onClick:r,disabled:s=!1,id:d,className:c,"data-tour":u,emptyLabel:m}=e,{t:p}=(0,i.Bd)("chat"),h=t?(0,l.N)(t.name):void 0,g=h??m??p("module.modelSelector.model"),f=(0,a.useMemo)(()=>{let e=h??m;return e?e.length>16?e.slice(0,16)+"...":e:p("module.modelSelector.model")},[h,m,p]),[v,b]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=()=>{b(window.innerWidth<640)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,n.jsxs)("button",{type:"button",id:d,"data-tour":u,onClick:r,disabled:s,className:`MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary compact flex items-center justify-center flex-shrink-0 ${c||""}`,style:{borderRadius:"6px",cursor:s?"not-allowed":"pointer"},tabIndex:0,"aria-label":t?p("module.modelSelector.currentModel",{model:g}):p("module.modelSelector.selectModel"),title:s?p("module.modelSelector.modelUnavailable"):t?p("module.modelSelector.clickSwitchCurrentModel",{model:g}):p("module.modelSelector.clickSwitchModel"),children:[(0,n.jsx)("svg",{className:"w-4 h-4 md:w-5 md:h-5 flex-shrink-0 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2,"aria-hidden":"true",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"})}),(0,n.jsx)("span",{children:v?f:g}),(0,n.jsx)(o.A,{className:"h-2.5 w-2.5 md:h-3 md:w-3 flex-shrink-0 ml-1"})]})};var c=r(98477),u=r(97685),m=r(22691),p=r(60299),h=r(65685);let g=e=>{let{categories:t,currentCategory:r,onCategoryChange:o,trailingSlot:s,embedded:l
1747=!1}=e,{t:d}=(0,i.Bd)("chat"),c=(0,a.useRef)(null),[u,m]=(0,a.useState)(!1),[p,h]=(0,a.useState)(0),[g,f]=(0,a.useState)(0),v=(0,a.useCallback)(()=>{let e=c.current;return!!e&&e.scrollWidth>e.clientWidth},[]),b=["__favorites__","__featured__",...t],y=(0,a.useCallback)(e=>{!c.current||v()&&(m(!0),h(e.pageX-c.current.offsetLeft),f(c.current.scrollLeft),c.current&&(c.current.style.cursor="grabbing"))},[v]),x=(0,a.useCallback)(e=>{if(!u||!c.current)return;e.preventDefault();let t=(e.pageX-c.current.offsetLeft-p)*2;c.current.scrollLeft=g-t},[u,p,g]),w=(0,a.useCallback)(()=>{m(!1),c.current&&(c.current.style.cursor="grab")},[]),k=(0,a.useCallback)(()=>{u&&(m(!1),c.current&&(c.current.style.cursor="grab"))},[u]),S=(0,a.useCallback)(e=>{!c.current||v()&&(m(!0),h(e.touches[0].pageX-c.current.offsetLeft),f(c.current.scrollLeft))},[v]),C=(0,a.useCallback)(e=>{if(!u||!c.current)return;let t=(e.touches[0].pageX-c.current.offsetLeft-p)*2;c.current.scrollLeft=g-t},[u,p,g]),I=(0,a.useCallback)(()=>{m(!1)},[]),j=(0,a.useCallback)((e,t)=>{u?t.preventDefault():o(e)},[u,o]);return(0,n.jsxs)("div",{className:`flex flex-wrap items-center bg-v2-bg-card min-w-0 sm:flex-nowrap ${l?"flex-1":"border-b border-v2-border-primary"}`,children:[(0,n.jsx)("div",{ref:c,onMouseDown:y,onMouseMove:x,onMouseUp:w,onMouseLeave:k,onTouchStart:S,onTouchMove:C,onTouchEnd:I,className:"w-full sm:w-auto sm:flex-1 min-w-0 relative overflow-x-auto overflow-y-hidden cursor-grab select-none scrollbar-hide",style:{scrollBehavior:u?"auto":"smooth",WebkitOverflowScrolling:"touch"},children:(0,n.jsx)("div",{className:`flex gap-1 flex-nowrap items-center ${l?"px-0":"px-3 sm:px-3 md:px-2"}`,children:b.map(e=>{let t=e===r,a=function(e){switch(e){case"Claude":return{labelKey:"module.modelSelector.hardToCrack",titleKey:"module.modelSelector.hardToCrackTitle"};case"Gemini":return{labelKey:"module.modelSelector.highIq",titleKey:"module.modelSelector.highIqTitle"};case"Grok":return{labelKey:"module.modelSelector.lessCensored",titleKey:"module.modelSelector.lessCensoredTitle"};case"Deepseek":return{labelKey:"module.modelSelector.costEffective",titleKey:"module.modelSelector.costEffectiveTitle"};default:return null}}(e),s="__favorites__"===e?d("module.modelSelector.favorites"):"__all__"===e?d("module.modelSelector.all"):"__featured__"===e?d("module.modelSelector.featured"):e,i="__favorites__"===e?d("module.modelSelector.favorites"):"__all__"===e?d("module.modelSelector.allModels"):"__featured__"===e?d("module.modelSelector.featuredModels"):e,l=a?`${s} \xb7 ${d(a.labelKey)}`:s;return(0,n.jsxs)("div",{onClick:t=>j(e,t),title:a?d(a.titleKey):void 0,className:`
1748                  relative flex items-center justify-center
1749                  min-h-9 md:flex-1 md:min-w-0
1750                  px-2.5 md:px-1
1751                  cursor-pointer flex-shrink-0
1752                  transition-colors duration-200
1753                  ${t?"text-v2-accent-primary":"text-v2-text-secondary hover:text-v2-text-primary"}
1754                `,role:"tab",tabIndex:0,onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),o(e))},"aria-selected":t,"aria-label":d("module.modelSelector.filterCategoryModels",{category:i}),children:[(0,n.jsx)("span",{className:`text-[13px] leading-5 whitespace-nowrap ${t?"font-semibold":"font-medium"}`,children:s}),t&&(0,n.jsx)("span",{className:"absolute bottom-0 left-2.5 right-2.5 h-0.5 bg-v2-accent-primary rounded-full"}),(0,n.jsx)("span",{className:"sr-only",children:a?l:null})]},e)})})}),s?(0,n.jsx)("div",{className:"flex w-full justify-end flex-shrink-0 px-3 py-1.5 sm:w-auto sm:border-l border-v2-border-primary/50",children:s}):null]})},f=e=>{let{value:t,onChange:r,placeholder:o="",inputRef:s,onBlur:l,compact:d=!1}=e,{t:c}=(0,i.Bd)("chat"),[u,m]=(0,a.useState)(t);(0,a.useEffect)(()=>{m(t)},[t]),(0,a.useEffect)(()=>{let e=setTimeout(()=>{u!==t&&r(u)},300);return()=>clearTimeout(e)},[u,t,r]);let g=(0,a.useCallback)(e=>{m(e.target.value)},[]),f=(0,a.useCallback)(()=>{m(""),r("")},[r]),v=u.length>0;return(0,n.jsxs)("div",{className:"relative w-full",children:[(0,n.jsx)("div",{className:`absolute top-1/2 -translate-y-1/2 pointer-events-none ${d?"left-2.5":"left-3"}`,children:(0,n.jsx)(p.A,{className:`text-v2-text-secondary opacity-60 ${d?"w-4 h-4":"w-5 h-5"}`})}
1754),(0,n.jsx)("input",{ref:s,type:"text",value:u,onChange:g,onBlur:l,placeholder:o||c("module.modelSelector.searchDefaultPlaceholder"),autoComplete:"off",spellCheck:!1,"aria-label":c("module.modelSelector.searchModel"),className:`
1755          w-full
1756          ${d?"pl-9 pr-9 py-1.5 text-xs sm:text-[13px] rounded-md":"pl-10 pr-10 py-2 sm:py-2.5 text-[13px] sm:text-sm rounded-lg"}
1757          text-v2-text-primary
1758          placeholder:text-v2-text-tertiary
1759          bg-v2-bg-card
1760          border border-v2-border-primary
1761          outline-none
1762          transition-v2-interactive duration-200
1763          hover:border-v2-border-secondary
1764          focus:border-v2-border-focus focus:ring-2 focus:ring-v2-border-focus/20
1765        `}),v&&(0,n.jsx)("button",{type:"button",onClick:f,"aria-label":c("module.modelSelector.clearSearch"),className:`
1766            absolute top-1/2 -translate-y-1/2 p-0.5
1767            text-v2-text-secondary
1768            hover:text-v2-text-primary hover:bg-v2-bg-hover
1769            rounded transition-colors duration-200
1770            ${d?"right-1.5":"right-2"}
1771          `,children:(0,n.jsx)(h.A,{className:d?"w-4 h-4":"w-[18px] h-[18px]"})})]})};var v=r(51895),b=r(41370),y=r(51669),x=r(96959);let w=e=>{let{model:t,compact:r,hideHealthErrorLabel:a=!1}=e,{t:o}=(0,i.Bd)("chat"),s=t.usage_stats_snapshot,l=null==s?void 0:s.success_rate;if(s&&(0,x.Bx)(s)&&null!=l&&Number.isFinite(l)){let e=s.window_days??7;return(0,n.jsxs)("span",{className:`
1772          inline-flex items-center tabular-nums font-semibold
1773          border rounded-md
1774          ${r?"text-[11px] px-1 py-px border-0 bg-transparent whitespace-nowrap":"text-[11px] px-2 py-0.5"}
1775          ${l>=95?"text-emerald-600 dark:text-emerald-400 bg-emerald-500/12 border-emerald-500/25":l>=80?"text-amber-600 dark:text-amber-400 bg-amber-500/12 border-amber-500/25":"text-red-600 dark:text-red-400 bg-red-500/12 border-red-500/25"}
1776        `,title:o("module.modelSelector.successRateTitle",{days:e}),children:[r?(0,n.jsx)("span",{className:"font-normal mr-1 whitespace-nowrap",children:o("module.modelSelector.successRateLabel")}):(0,n.jsx)("span",{className:"opacity-80 font-normal mr-0.5",children:o("module.modelSelector.recentDays",{days:e})}),(0,n.jsxs)("span",{className:"whitespace-nowrap",children:[l.toFixed(1),"%"]})]})}if(s&&(0,x.S2)(s)){let e=s.window_days??7;return(0,n.jsxs)("span",{className:`
1777          inline-flex items-center tabular-nums
1778          ${r?"text-[10px]":"text-[11px]"}
1779          text-v2-text-tertiary
1780        `,title:o("module.modelSelector.hiddenRateTitle",{days:e}),children:[!r&&(0,n.jsx)("span",{className:"opacity-70 font-normal mr-0.5",children:o("module.modelSelector.recentDays",{days:e})}),(0,n.jsx)("span",{className:"opacity-60",children:o("module.modelSelector.hidden")})]})}let d=t.health_status;if(d)return a&&"error"===d?null:(0,n.jsxs)("span",{className:`
1781          inline-flex items-center gap-1
1782          ${r?"text-[10px]":"text-[11px]"}
1783          text-v2-text-secondary
1784        `,title:t.health_error||null!=t.response_time?o("module.modelSelector.lineCheckWithLatency",{latency:t.response_time??"—"}):o("module.modelSelector.lineCheck"),children:[(0,n.jsx)("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${function(e){switch(e){case"idle":return"bg-emerald-500";case"smooth":return"bg-lime-500";case"congested":return"bg-amber-500";case"error":return"bg-red-500";default:return"bg-v2-text-tertiary"}}(d)}`,"aria-hidden":!0}),(0,n.jsx)("span",{className:"tabular-nums",children:o(function(e){switch(e){case"idle":return"module.modelSelector.status.idle";case"smooth":return"module.modelSelector.status.smooth";case"congested":return"module.modelSelector.status.congested";case"error":return"module.modelSelector.status.error";default:return"module.modelSelector.status.unknown"}}(d))})]});if(s&&0>=(0,x.IS)(s)){let e=s.window_days??7;return(0,n.jsxs)("span",{className:`
1785          inline-flex items-center tabular-nums
1786          ${r?"text-[10px]":"text-[11px]"}
1787          text-v2-text-tertiary
1788        `,title:o("module.modelSelector.noUsageDataTitle",{days:e}),children:[!r&&(0,n.jsx)("span",{className:"opacity-70 font-normal mr-0.5",children:o("module.modelSelector.recentDays",{days:e})}),(0,n.jsx)("span",{className:"opacity-60",children:o("module.modelSelector.hidden")})]})}return null};var k=r(90777);let S=a.memo(e=>{let{model:t,isSelected:r,isFavorite:o,onSelect:s,onToggleFavorite:d,compact:c=!1,hideHealthErrorLabel:u=!1}=e,{t:m}=(0,i.Bd)("chat"),p=(0,a.useCallback)(e=>{e.stopPropagation(),d()},[d]),h="number"==typeof t.price_coefficient?t.price_coefficient.toFixed(4):"—",g=Number(t.price_coefficient),f=Number.isFinite(g)&&g>1,v=(0,l.N)(t.name),x=t.provider_name||t.provider,S=(0,k.Oi)(t);return(0,n.jsx)("div",{className:c?"":"mb-1",children:(0,n.jsxs)("div",{role:"button",tabIndex:0,"aria-pressed":r,onClick:s,onKeyDown:e=>
1788{e.target===e.currentTarget&&("Enter"===e.key||" "===e.key)&&(e.preventDefault(),s())},className:`
1789            flex flex-col
1790            ${c?"relative gap-0.5 pl-2.5 pr-10 py-1.5 rounded-md":"gap-1.5 px-3 py-2.5 rounded-xl"}
1791            cursor-pointer transition-colors duration-200
1792            focus-visible:outline focus-visible:outline-2 focus-visible:outline-v2-accent-primary
1793            ${r?c?"bg-v2-accent-primary/10":"border-2 border-v2-accent-primary bg-v2-accent-primary/10 rounded-xl":c?"hover:bg-v2-bg-hover/50":"border-2 border-transparent hover:bg-v2-bg-hover/60 rounded-xl"}
1794          `,children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,n.jsx)("span",{className:`
1795                min-w-0 flex-1 truncate
1796                ${r?"font-semibold":"font-medium"}
1797                ${c?"text-[13px] leading-5":"text-sm"}
1798                text-v2-text-primary
1799              `,title:t.name,children:v}),r&&c&&(0,n.jsx)("span",{className:"shrink-0 text-sm font-semibold text-v2-accent-primary",title:m("module.modelSelector.current"),"aria-label":m("module.modelSelector.current"),children:"✓"}),"adjustable"===S?(0,n.jsx)("span",{className:`
1800                  shrink-0 rounded px-1.5 py-0.5 font-normal
1801                  ${c?"text-[10px] leading-3":"text-[11px] leading-4"}
1802                  text-v2-text-tertiary
1803                  ${c?"":"bg-v2-bg-secondary border border-v2-border-primary/50"}
1804                `,title:m("module.modelSelector.thinkingLevelBadgeTitle"),children:m("module.modelSelector.thinkingLevelBadge")}):null,(0,n.jsx)("button",{type:"button",onClick:p,"aria-label":m(o?"module.modelSelector.unfavoriteModel":"module.modelSelector.favoriteModel"),className:`
1805                ${c?"compact absolute right-1 top-1/2 -translate-y-1/2 h-8 w-8 min-h-0 p-1.5 inline-flex items-center justify-center":"p-1.5"}
1806                rounded-md transition-colors shrink-0
1807                ${o?"text-v2-accent-primary":"text-v2-text-tertiary hover:text-v2-accent-primary"}
1808                hover:bg-v2-bg-hover
1809              `,children:o?(0,n.jsx)(y.A,{className:c?"w-3.5 h-3.5":"w-5 h-5"}):(0,n.jsx)(b.A,{className:c?"w-3.5 h-3.5":"w-5 h-5"})})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 min-w-0",children:[x&&(0,n.jsx)("span",{className:`
1810                  ${c?"text-[11px]":"h-5 text-[11px] px-2 border border-v2-border-primary/80 bg-v2-bg-secondary/90 rounded-md"}
1811                  inline-flex items-center text-v2-text-secondary shrink-0 max-w-[46%] truncate
1812                `,children:x}),r&&!c&&(0,n.jsx)("span",{className:"h-5 text-[11px] px-2 inline-flex items-center font-medium bg-v2-accent-primary text-white rounded-md shrink-0",children:m("module.modelSelector.current")}),t.is_recommended&&!r&&!c&&(0,n.jsx)("span",{className:"h-5 text-[11px] px-2 inline-flex items-center font-medium bg-emerald-600/90 text-white rounded-md shrink-0",children:m("module.modelSelector.recommended")}),(0,n.jsxs)("span",{className:`${c?"text-[11px] leading-4":"text-xs"} text-v2-text-tertiary shrink-0`,title:m("module.modelSelector.priceCoefficientLabel"),children:[(0,n.jsx)("span",{className:c?"sr-only":void 0,children:m("module.modelSelector.priceCoefficientLabel")}),(0,n.jsx)("span",{className:"mx-1 opacity-40","aria-hidden":"true",children:"\xb7"}),(0,n.jsx)("span",{style:f?{color:"var(--v2-state-warning)"}:void 0,className:"tabular-nums text-v2-text-secondary",children:h})]}),(0,n.jsx)("span",{className:"ml-auto shrink-0",children:(0,n.jsx)(w,{model:t,compact:c,hideHealthErrorLabel:u})})]})]})})});S.displayName="ModelItem";let C=a.memo(function(e){let{models:t,currentModel:r,onSelectModel:o,favoriteModels:s,onToggleFavorite:l,compact:d=!1,preserveModelsOrder:c=!1,hideHealthErrorLabel:u=!1,listFooter:m=null}=e,{t:p}=(0,i.Bd)("chat"),h=(0,a.useRef)(null),g=(0,a.useMemo)(()=>{let e=c?[...t]:[...t].sort((e,t)=>{let r="number"==typeof e.sort_order?e.sort_order:0,n="number"==typeof t.sort_order?t.sort_order:0;return r!==n?r-n:(e.name||"").localeCompare(t.name||"")});if(!c&&(null==r?void 0:r.id)){let t=e.findIndex(e=>e.id===r.id);if(t>0){let[r]=e.splice(t,1);e.unshift(r)}}return e},[t,r,c]),f=g.length>400,b=(0,v.Te)({count:g.length,getScrollElement:()=>h.current,estimateSize:()=>50,overscan:12});return 0===t.length?(0,n.jsxs)("div",{className:"flex h-full min-h-[160px] flex-col justify-center items-center p-4 gap-3",children:[(0,n.jsx)("span",{className:"text-v2-text-secondary text-[13px]",children:p("module.modelSelector.noModels")}),m]}):f?(0,n.jsxs)("div",{ref:h,className:"w-full h-full overflow-y-auto overflow-x-hidden scrollbar-thin",children:[(0,n.jsx)("ul",{className:"w-full relative list-none m-0 p-0",style:{height:`${b.getTotalSize()}px`},children:b.getVirtualItems().map(e=>{let t=g[e.index];return(0,n.jsx)("li",{"data-index":e.index,ref:b.measureElement,className:"absolute top-0 left-0 w-full",style:{transform:`translateY(${e.start}px)`},children:(0,n.jsx)(S,{model:t,isSelected:(null==r?void 0:r.id)===t.id,isFavorite:s.includes(t.id),onSelect:()=>o(t),onToggleFavorite:()=>l(t.id),compact:d,hideHealthErrorLabel:u})},e.key)})}),m]}):(0,n.jsxs)("div",{className:"w-full h-full overflow-y-auto overflow-x-hidden scrollbar-thin",children:[(0,n.jsx)("ul",{className:"w-full list-none m-0 p-0",children:g.map(e=>(0,n.jsx)(S,{model:e,isSelected:(null==r?void 0:r.id)===e.id,isFavorite:s.includes(e.id),onSelect:()=>o(e),onToggleFavorite:()=>l(e.id),compact:d,hideHealthErrorLabel:u},e.id))}),m]})}),I=e=>{let{models:t,onSwitch:r,disabled:a=!1,isMobile:o=!1,leadingSlot:s}=e,{t:d}=(0,i.Bd)("chat"),c=t.find(e=>!0===e.is_default)||null,u=c?(0,l.N)(c.name):void 0,m=a||!c;return(0,n.jsxs)("div",{className:"relative w-full min-w-0",children:[s?(0,n.jsx)("div",{className:"min-w-0 
1812w-full",children:s}):null,(0,n.jsx)("button",{type:"button",onClick:()=>{c&&r(c)},disabled:m,title:u?d("module.modelSelector.switchToDefault",{model:u}):void 0,className:`
1813          absolute right-0 top-0 rounded-md border border-v2-border-primary
1814          bg-v2-bg-card px-2.5 py-1.5 text-[11px] font-medium leading-5
1815          text-v2-text-secondary shadow-sm
1816          hover:border-v2-accent-primary hover:text-v2-accent-primary hover:bg-v2-accent-primary/10
1817          transition-v2-interactive duration-200
1818          ${m?"opacity-40 border-v2-border-secondary text-v2-text-disabled cursor-not-allowed":"cursor-pointer active:scale-95"}
1819        `,"aria-label":d(m?"module.modelSelector.noDefaultModelAria":"module.modelSelector.oneClickSwitchDefault"),children:d("module.modelSelector.oneClickSwitch")})]})},j={off:{label:"module.modelSelector.thinkingLevelOff",title:"module.modelSelector.thinkingLevelOffTitle",hint:"module.modelSelector.thinkingLevelHintOff"},low:{label:"module.modelSelector.thinkingLevelLow",title:"module.modelSelector.thinkingLevelLowTitle",hint:"module.modelSelector.thinkingLevelHintLow"},medium:{label:"module.modelSelector.thinkingLevelMedium",title:"module.modelSelector.thinkingLevelMediumTitle",hint:"module.modelSelector.thinkingLevelHintMedium"},high:{label:"module.modelSelector.thinkingLevelHigh",title:"module.modelSelector.thinkingLevelHighTitle",hint:"module.modelSelector.thinkingLevelHintHigh"}},M=k.EU.length-1;function N(e,t){let r=t.getBoundingClientRect(),n=r.width;return n<=0?0:Math.min(M,Math.floor(Math.min(n,Math.max(0,e-r.left))/n*k.EU.length))}let E=e=>{let{value:t,onChange:r}=e,{t:o}=(0,i.Bd)("chat"),s=(0,a.useId)(),l=(0,a.useRef)(null),d=Math.max(0,k.EU.indexOf(t)),c=j[t],u=(0,a.useCallback)(e=>{let n=k.EU[e];n&&n!==t&&r(n)},[r,t]),m=(0,a.useCallback)(e=>{if(0!==e.button)return;let t=l.current;t&&(t.setPointerCapture(e.pointerId),u(N(e.clientX,t)))},[u]),p=(0,a.useCallback)(e=>{let t=l.current;(null==t?void 0:t.hasPointerCapture(e.pointerId))&&u(N(e.clientX,t))},[u]),h=(0,a.useCallback)(e=>{if("ArrowRight"===e.key||"ArrowUp"===e.key){e.preventDefault(),u(Math.min(M,d+1));return}if("ArrowLeft"===e.key||"ArrowDown"===e.key){e.preventDefault(),u(Math.max(0,d-1));return}if("Home"===e.key){e.preventDefault(),u(0);return}"End"===e.key&&(e.preventDefault(),u(M))},[u,d]);return(0,n.jsxs)("div",{className:"flex w-full min-w-0 flex-col gap-1",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5",children:[(0,n.jsx)("span",{className:"shrink-0 text-[12px] font-medium text-v2-text-secondary whitespace-nowrap select-none",children:o("module.modelSelector.thinkingLevel")}),(0,n.jsx)("div",{ref:l,role:"slider",tabIndex:0,"aria-label":o("module.modelSelector.thinkingLevel"),"aria-valuemin":0,"aria-valuemax":M,"aria-valuenow":d,"aria-valuetext":o(c.label),"aria-describedby":s,title:`${o(c.title)} \xb7 ${o(c.hint)}`,onPointerDown:m,onPointerMove:p,onKeyDown:h,className:"relative grid h-8 min-w-0 max-w-52 flex-1 grid-cols-4 cursor-pointer touch-none select-none rounded-md bg-v2-bg-secondary p-0.5 focus-visible:outline focus-visible:outline-2 focus-visible:outline-v2-accent-primary",children:k.EU.map((e,t)=>{let r=d===t;return(0,n.jsx)("span",{"aria-hidden":!0,className:`pointer-events-none flex items-center justify-center rounded text-[11px] transition-colors ${r?"bg-v2-accent-primary font-semibold text-white shadow-sm":"text-v2-text-secondary"}`,children:o(j[e].label)},e)})})]}),(0,n.jsx)("p",{id:s,"aria-live":"polite","aria-atomic":"true",title:o(c.hint),className:"min-w-0 truncate whitespace-nowrap text-[11px] leading-4 text-v2-text-tertiary",children:o(c.hint)})]})},_="chat_model_dialog_sort_mode_v2";function T(e,t){let r="number"==typeof e.sort_order?e.sort_order:0,n="number"==typeof t.sort_order?t.sort_order:0;return r!==n?r-n:(e.name||"").localeCompare(t.name||"")}let P=["Claude","Grok","Gemini","Deepseek","ChatGPT","Other"],R={claude:"Claude",grok:"Grok",gemini:"Gemini",deepseek:"Deepseek",chatgpt:"ChatGPT",gpt:"ChatGPT",官方破限:"Other",xiaomi:"Other",other:"Other",text:"Other"};function A(e){return null!=e.category&&""!==String(e.category).trim()?function(e){if(null==e)return"Other";let t=e.trim();if(!t)return"Other";let r=t.toLowerCase(),n=R[r];if(n)return n;let a=P.find(e=>e.toLowerCase()===r);return a||"Other"}(e.category):"Xiaomi"===e.providerCategory||"官方破限"===e.providerCategory?"Other":e.providerCategory?e.providerCategory:(`${e.provider_name??""} ${e.provider??""} ${e.name??""}`.toLowerCase().includes("xiaomi"),"Other")}let L="__favorites__",O="__all__",F="__featured__",$=["Deepseek","Gemini","Claude","ChatGPT","Other"];function D(e){return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}function B(){return window.innerWidth<640}function q(){return!1}let H=e=>{let{open:t,onClose:r,models:s,currentModel:d,onSelectModel:v,favoriteModels:b,onToggleFavorite:y,unsetSelectionLabel:x,onUnsetSelection:w}=e,{t:S}=(0,i.Bd)("chat"),[j,M]=(0,a.useState)(k._W),N=(0,a.useCallback)(e=>{M(e),(0,k.F7)(e)},[]),P=(0,a.useSyncExternalStore)(D,B,q),[R,H]=(0,a.useState)(F),[z,U]=(0,a.useState)(""),[W,K]=(0,a.useState)(!1),[V,G]=(0,a.useState)(null),[Q,Y]=(0,a.useState)(()=>(function(){try{let e=localStorage.getItem(_);if("popularity"===e||"price_coefficient"===e)return e}catch{}return"popularity"})()),[X,J]=(0,a.useState)(!1),Z=(0,a.useRef)(null);(0,a.useEffect)(()=>
1819{if(!X)return;let e=e=>{Z.current&&!Z.current.contains(e.target)&&J(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}},[X]),(0,a.useEffect)(()=>{t&&(((null==b?void 0:b.length)??0)>=10?H(L):H(F))},[t]);let ee=(0,a.useRef)(null),et=(0,a.useRef)(null),er=(0,a.useMemo)(()=>[...$],[]),en=(0,a.useMemo)(()=>{let e=s;if(R===L){let t=new Set(b??[]);e=e.filter(e=>t.has(e.id))}else R===F?e=e.filter(e=>!0===e.is_featured):R!==O&&(e=e.filter(e=>A(e)===R));if(z.trim()){let t=z.toLowerCase().trim();e=e.filter(e=>{var r,n;let a=(0,l.N)(e.name).toLowerCase().includes(t),o=null==(r=e.description)?void 0:r.toLowerCase().includes(t),s=A(e).toLowerCase().includes(t),i=null==(n=e.provider)?void 0:n.toLowerCase().includes(t);return a||o||s||i})}return e},[s,R,z,b]),ea=(0,a.useMemo)(()=>{let e;return(e=[...en]).sort((e,t)=>{if("price_coefficient"===Q){let r,n;return r="number"==typeof e.price_coefficient?e.price_coefficient:1/0,r!==(n="number"==typeof t.price_coefficient?t.price_coefficient:1/0)?r-n:T(e,t)}return function(e,t){var r,n;let a=null==(r=e.usage_stats_snapshot)?void 0:r.total_calls,o=null==(n=t.usage_stats_snapshot)?void 0:n.total_calls,s="number"==typeof a&&Number.isFinite(a)&&a>0,i="number"==typeof o&&Number.isFinite(o)&&o>0;if(s&&i){let r=o-a;return 0!==r?r:T(e,t)}return s&&!i?-1:!s&&i?1:T(e,t)}(e,t)}),e},[en,Q]),eo=(0,a.useCallback)(e=>{Y(e);try{localStorage.setItem(_,e)}catch{}J(!1)},[]),es=(0,a.useCallback)(e=>{H(e),et.current&&(et.current.scrollTop=0)},[]),ei=(0,a.useCallback)(e=>{U(e)},[]),el=(0,a.useCallback)(e=>{let t=(0,k.Oi)(e);"off"!==j&&"adjustable"!==t&&(0,u.default)(S("forced_off"===t?"module.modelSelector.thinkingLevelForcedOffToast":"module.modelSelector.thinkingLevelUnsupportedToast")),v(e),"adjustable"!==t&&r()},[r,v,S,j]),ed=(0,a.useCallback)(e=>{if((null==d?void 0:d.id)===e.id)return void el(e);let t=Number(e.price_coefficient);Number.isFinite(t)&&t>1?G(e):el(e)},[el,null==d?void 0:d.id]),ec=(0,a.useCallback)(e=>{ed(e)},[ed]),eu=(0,a.useCallback)(e=>{ed(e)},[ed]),em=(0,a.useCallback)(()=>{U(""),H(F),K(!1),J(!1),G(null),r()},[r]),ep=(0,a.useCallback)(()=>{G(null)},[]),eh=(0,a.useCallback)(()=>{V&&(el(V),G(null))},[el,V]),eg=(0,a.useCallback)(()=>{K(!0)},[]),ef=(0,a.useCallback)(()=>{z||K(!1)},[z]);if((0,a.useEffect)(()=>{W&&ee.current&&ee.current.focus()},[W]),(0,a.useEffect)(()=>{let e=e=>{if("Escape"===e.key&&t){if(V)return void G(null);em()}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,em,V]),(0,a.useEffect)(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t]),!t)return null;let ev=(0,n.jsxs)("div",{ref:Z,className:"relative inline-block shrink-0 text-left",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>J(e=>!e),"aria-expanded":X,"aria-haspopup":"listbox","aria-label":S("module.modelSelector.sortGroup"),title:S("popularity"===Q?"module.modelSelector.popularity":"module.modelSelector.priceCoefficient"),className:`
1820          inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium
1821          hover:bg-v2-bg-hover
1822          text-v2-text-secondary transition-colors focus-visible:outline focus-visible:outline-2
1823          focus-visible:outline-v2-accent-primary whitespace-nowrap
1824        `,children:[P?(0,n.jsx)(m.A,{className:"h-5 w-5","aria-hidden":"true"}):(0,n.jsx)("span",{children:"popularity"===Q?S("module.modelSelector.popularity"):S("module.modelSelector.priceCoefficient")}),!P&&(0,n.jsx)(o.A,{className:`h-3.5 w-3.5 text-v2-text-tertiary transition-transform duration-200 ${X?"rotate-180":""}`,"aria-hidden":"true"})]}),X&&(0,n.jsxs)("div",{role:"listbox","aria-label":S("module.modelSelector.sortGroup"),className:`
1825            absolute right-0 z-30 mt-1 min-w-[7.5rem] rounded-lg border border-v2-border-primary
1826            bg-v2-bg-card p-1 shadow-lg ring-1 ring-black/5 dark:ring-white/10
1827          `,children:[(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":"popularity"===Q,onClick:()=>eo("popularity"),className:`
1828              flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-left text-xs transition-colors
1829              ${"popularity"===Q?"bg-v2-accent-primary/10 font-semibold text-v2-accent-primary":"font-medium text-v2-text-secondary hover:bg-v2-bg-hover hover:text-v2-text-primary"}
1830            `,children:[(0,n.jsx)("span",{children:S("module.modelSelector.popularity")}),"popularity"===Q&&(0,n.jsx)("span",{className:"text-xs",children:"✓"})]}),(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":"price_coefficient"===Q,onClick:()=>eo("price_coefficient"),className:`
1831              flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-left text-xs transition-colors
1832              ${"price_coefficient"===Q?"bg-v2-accent-primary/10 font-semibold text-v2-accent-primary":"font-medium text-v2-text-secondary hover:bg-v2-bg-hover hover:text-v2-text-primary"}
1833            `,children:[(0,n.jsx)("span",{children:S("module.modelSelector.priceCoefficient")}),"price_coefficient"===Q&&(0,n.jsx)("span",{className:"text-xs",children:"✓"})]})]})]}),eb=(0,n.jsxs)("div",{className:"chat-modal-overlay fixed inset-0 flex items-center justify-center p-2 sm:p-4",style:{zIndex:"var(--v2-z-modal)",backgroundColor:"var(--v2-bg-overlay)",paddingTop:"max(1rem, var(--top-safe-area-inset, env(safe-area-inset-top, 0px)))",paddingBottom:"max(1rem, env(safe-area-inset-bottom, 0px))"},children:[(0,n.jsx)("div",{className:"absolute inset-0",onClick:em,"aria-hidden":!0}),(0,n.jsxs)("div",{className:`
1834          chat-modal-panel relative z-10
1835          flex shrink-0 flex-col
1836          overflow-hidden
1837          shadow-2xl
1838          m-auto
1839          ${P?"h-[94dvh] max-h-full w-full rounded-xl":"h-[88dvh] max-h-full w-full max-w-3xl rounded-xl"}
1840        `,style:{backgroundColor:"var(--v2-bg-card)"},role:"dialog","aria-labelledby":"model-selector-dialog-title","aria-modal":"true",children:[(0,n.jsxs)("div",{className:`
1841            flex shrink-0 items-center gap-1 sm:gap-2
1842            px-2 py-1 sm:px-3
1843            border-b border-v2-border-primary
1844          `,children:[!P&&(0,n.jsx)("h2",{id:"model-selector-dialog-title",className:"shrink-0 text-sm font-medium text-v2-text-primary",children:S("module.modelSelector.selectModel")}),P&&!W?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("h2",{id:"model-selector-dialog-title",className:"sr-only",children:S("module.modelSelector.selectModel")}
1844),(0,n.jsx)(g,{categories:er,currentCategory:R,onCategoryChange:es,embedded:!0})]}):(0,n.jsxs)("div",{className:`flex-1 min-w-0 ${P?"":"max-w-[500px] mx-auto"}`,children:[P&&(0,n.jsx)("h2",{id:"model-selector-dialog-title",className:"sr-only",children:S("module.modelSelector.selectModel")}),(0,n.jsx)(f,{value:z,onChange:ei,placeholder:S("module.modelSelector.searchPlaceholder"),inputRef:ee,onBlur:P?ef:void 0,compact:!0})]}),P&&!W&&ev,P&&!W&&(0,n.jsx)("button",{type:"button",onClick:eg,"aria-label":S("module.modelSelector.searchModel"),className:"shrink-0 p-2 text-v2-text-secondary hover:text-v2-text-primary hover:bg-v2-bg-hover rounded-md transition-colors",children:(0,n.jsx)(p.A,{className:"w-5 h-5"})}),(0,n.jsx)("button",{type:"button",onClick:em,"aria-label":S("module.modelSelector.closeModal"),className:"p-2 text-v2-text-tertiary hover:bg-v2-bg-hover rounded-md transition-colors shrink-0",children:(0,n.jsx)(h.A,{className:"w-5 h-5"})})]}),(0,n.jsxs)("div",{className:"flex-1 flex flex-col overflow-hidden min-h-0",children:[x&&w&&(0,n.jsx)("div",{className:`
1845                flex-shrink-0 border-b border-v2-border-primary
1846                ${P?"px-3.5 py-2":"px-4 py-1.5"}
1847              `,children:(0,n.jsx)("button",{type:"button",onClick:()=>{w(),em()},className:`
1848                  w-full text-left rounded-md px-2.5 py-2 text-[13px]
1849                  border border-v2-border-primary bg-v2-bg-hover/80
1850                  text-v2-text-primary hover:bg-v2-bg-hover transition-colors
1851                `,children:x})}),!P&&(0,n.jsx)("div",{className:"flex-shrink-0",children:(0,n.jsx)(g,{categories:er,currentCategory:R,onCategoryChange:es,trailingSlot:ev})}),(0,n.jsx)("div",{ref:et,className:"flex-1 min-h-0 overflow-hidden px-2 py-1 sm:px-3",children:(0,n.jsx)(C,{models:ea,currentModel:d,onSelectModel:ec,favoriteModels:b,onToggleFavorite:y,compact:!0,preserveModelsOrder:!0,hideHealthErrorLabel:!0,listFooter:R===F?(0,n.jsx)("div",{className:"px-1 py-1",children:(0,n.jsx)("button",{type:"button",onClick:()=>es(O),"aria-label":S("module.modelSelector.viewAllModelsAria"),className:"w-full min-h-8 rounded-md px-3 py-1 text-xs text-v2-text-secondary hover:bg-v2-bg-hover hover:text-v2-accent-primary transition-colors",children:S("module.modelSelector.viewAllModels")})}):null})}),(0,n.jsx)("div",{className:"flex-shrink-0 px-3 py-2 border-t border-v2-border-primary",style:P?{paddingBottom:"max(0.5rem, env(safe-area-inset-bottom, 0px))"}:void 0,children:(0,n.jsx)(I,{models:s,onSwitch:eu,isMobile:P,leadingSlot:(0,n.jsx)(E,{value:j,onChange:N})})})]})]}),V&&(0,n.jsxs)("div",{className:"absolute inset-0 z-20 flex items-center justify-center p-4",children:[(0,n.jsx)("div",{className:"absolute inset-0 chat-modal-overlay",style:{backgroundColor:"var(--v2-bg-overlay)"},onClick:ep}
1851),(0,n.jsxs)("div",{className:"relative w-full max-w-sm rounded-xl border border-v2-border-primary bg-v2-bg-card p-4 shadow-2xl",role:"alertdialog","aria-modal":"true",children:[(0,n.jsx)("p",{className:"text-sm leading-relaxed text-v2-text-primary",children:S("module.modelSelector.highPriceCoefficientConfirm",{coefficient:Number(V.price_coefficient).toFixed(2)})}),(0,n.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:ep,className:"rounded-lg border border-v2-border-primary px-3 py-1.5 text-sm text-v2-text-secondary hover:bg-v2-bg-hover",children:S("module.cancel")}),(0,n.jsx)("button",{type:"button",onClick:eh,className:"rounded-lg bg-v2-accent-primary px-3 py-1.5 text-sm text-white hover:bg-v2-accent-hover",children:S("module.confirm")})]})]})]})]});return"u"<typeof document?null:(0,c.createPortal)(eb,document.body)};var z=r(71673),U=r(73647),W=r(34978);let K="chat_favorite_models";function V(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(e){}}let G=e=>{let{characterId:t,recommendedModelId:r,onModelChange:c,onUserModelSelect:u,disabled:m=!1,className:p,initialModels:h,variant:g="select",id:f,"data-tour":v,onModelSelectorClick:b,lockedModelId:y,preferredDefaultModelId:x,selectionMode:w="chat",valueModelId:k,onAuthorValueChange:S,buttonEmptyLabel:C}=e,{t:I}=(0,i.Bd)("chat"),j=(0,s.jE)(),M=(0,a.useRef)(!1),N="authorForm"===w?"dialog":g,[E,_]=(0,a.useState)(!1),[T,P]=(0,a.useState)([]),[R,A]=(0,a.useState)(null),[L,O]=(0,a.useState)([]),[F,$]=(0,a.useState)(!0),[D,B]=(0,a.useState)(null),q=!!(h&&h.length>0),{data:G,isLoading:Q,isError:Y,error:X,isFetched:J}=(0,U.k)({enabled:!q});(0,a.useEffect)(()=>{O(function(e,t){try{let r=localStorage.getItem(e);return r?JSON.parse(r):t}catch(e){return t}}(K,[]))},[]),(0,a.useEffect)(()=>{if(!q&&!J)return void $(Q);if($(!1),!q&&Y){B(X instanceof Error?X.message:I("module.modelSelector.loadModelsFailed")),P([]);return}let e=q?h??[]:G??[];if(0===e.length){B(I("module.modelSelector.noModels")),P([]);return}if(B(null),P(e),"authorForm"===w)return;let{model:n,clearCharacterStorage:a,clearGlobalStorage:o}=(0,W.RP)(e,t,r??null,y,x);try{a&&(null==t?void 0:t.trim())&&localStorage.removeItem((0,W.L4)(t.trim())),o&&localStorage.removeItem(W.TY)}catch{}A(n),c&&c(n);let s="string"==typeof y?y.trim():"";!s||e.some(e=>e.id===s)||q||M.current||(M.current=!0,j.invalidateQueries({queryKey:z.lH.aiModels.active()}))},[q,h,G,J,Q,Y,X,t,r,y,x,w,c,j,I]),(0,a.useEffect)(()=>{(null==y?void 0:y.trim())||(M.current=!1)},[y]);let Z=(0,a.useMemo)(()=>{if("authorForm"!==w||0===T.length)return null;let e="string"==typeof k?k.trim():"";return e?T.find(t=>t.id===e)??null:(0,W.Rr)(T)},[w,k,T]),ee="authorForm"===w&&k?Z:null,et="authorForm"===w?Z:R,er="authorForm"===w?ee:R;(0,a.useEffect)(()=>{"authorForm"===w&&A(Z)},[w,Z]),(0,a.useEffect)(()=>{if("chat"!==w)return;let e=e=>{let{model:t,models:r}=e.detail;r&&r.length>0&&P(r),t&&A(t)};return window.addEventListener("model-disabled-switch",e),()=>{window.removeEventListener("model-disabled-switch",e)}},[w]);let en=(0,a.useCallback)(()=>{if(!m&&!F){if(b)return void b();_(!0)}},[m,F,b]),ea=(0,a.useCallback)(()=>{_(!1)},[]),eo=(0,a.useCallback)(e=>{let r="string"==typeof y?y.trim():"";if(!r||e.id===r){if(A(e),"authorForm"===w){null==S||S(e.id),null==c||c(e),null==u||u(e);return}(0,W.K4)(t,e),("idle"===e.status||"normal"===e.status)&&V("chat_last_stable_model",e),c&&c(e),null==u||u(e)}},[t,y,c,u,w,S]),es=(0,a.useCallback)(()=>{A(null),null==S||S(null),null==c||c(null),null==u||u(null)},[S,c,u]),ei=(0,a.useCallback)(e=>{O(t=>{let r=t.includes(e)?t.filter(t=>t!==e):[...t,e];return V(K,r),r})},[]);if("select"===N){let e=(null==R?void 0:R.id)??"",t=m||F||!!D||0===T.length;return b?(0,n.jsx)("div",{className:p,children:(0,n.jsxs)("div",{className:"group relative inline-flex items-center max-w-[260px]",children:[(0,n.jsx)("button",{type:"button",onClick:b,"aria-label":I("module.modelSelector.selectModel"),title:I("module.modelSelector.clickSwitchModel"),className:"   appearance-none bg-transparent border-0 shadow-none   h-6 sm:h-7 pr-4 sm:pr-5 pl-0.5 sm:pl-1   text-[11px] sm:text-sm font-medium   text-v2-text-secondary   cursor-pointer   hover:text-v2-text-primary   focus:outline-none focus:ring-0   max-w-[180px] sm:max-w-[260px] truncate text-left   ",children:R?(0,l.N)(R.name):I("module.modelSelector.selectModel")}),(0,n.jsx)(o.A,{className:"   pointer-events-none absolute right-0   h-3 w-3 sm:h-4 sm:w-4   text-v2-text-tertiary   group-hover:text-v2-text-secondary   "})]})}):(0,n.jsx)("div",{className:p,children:(0,n.jsxs)("div",{className:"group relative inline-flex items-center max-w-[260px]",children:[(0,n.jsxs)("select",{value:e,disabled:t,onChange:e=>{let t=e.target.value,r=T.find(e=>e.id===t);r&&eo(r)},"aria-label":I("module.modelSelector.selectModel"),title:t?I("module.modelSelector.modelUnavailable"):I("module.modelSelector.clickSwitchModel"),className:"   appearance-none bg-transparent border-0 shadow-none   h-6 sm:h-7 pr-4 sm:pr-5 pl-0.5 sm:pl-1   text-[11px] sm:text-sm font-medium   text-v2-text-secondary   cursor-pointer   hover:text-v2-text-primary   focus:outline-none focus:ring-0   disabled:opacity-50 disabled:cursor-not-allowed   max-w-[180px] sm:max-w-[260px] truncate   ",children:[F&&(0,n.jsx)("option",{value:"",children:I("module.modelSelector.loading")}),!F&&D&&(0,n.jsx)("option",{value:"",children:I("module.modelSelector.loadFailed")}),!F&&!D&&0===T.length&&(0,n.jsx)("option",{value:"",children:I("module.modelSelector.noModels")}),!F&&!D&&T.map(e=>(0,n.jsx)("option",{value:e.id,children:(0,l.N)(e.name)},e.id))]}),(0,n.jsx)(o.A,{className:"   pointer-events-none absolute right-0   h-3 w-3 sm:h-4 sm:w-4   text-v2-text-tertiary   group-hover:text-v2-text-secondary   "})]})})}let el="authorForm"===w?C:void 0;return F||D?(0,n.jsx)(d,{currentModel:et,onClick:en,disabled:!0,id:f,"data-tour":v,className:p,emptyLabel:el}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d,{currentModel:et,onClick:en,disabled:m||0===T.length,id:f,"data-tour":v,className:p,emptyLabel:el}),(0,n.jsx)(H,{open:E,onClose:ea,models:T,currentModel:er,onSelectModel:eo,favoriteModels:L,onToggleFavorite:ei,unsetSelectionLabel:"authorForm"===w?C:void 0,onUnsetSelection:"authorForm"===w?es:void 0})]})}},28157:(e,t,r)=>{r.d(t,{bv:()=>i,qn:()=>o,tg:()=>s,wf:()=>a});var n=r(34978);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();return(null==e?void 0:e.available)===!0&&e.remaining>0&&null!==e.expiresAt&&e.expiresAt>t}function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return e&&(0,n.GO)(t,r)}function s(e){var t;let r=e.now??Date.now();return e.isAuthenticated?e.isFreeTierUser?!function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),r=arguments.length>2?arguments[2]:void 0;if(e){let r=new Date(e).getTime();if(Number.isFinite(r))return t<r+72e5}return"number"==typeof r&&r>t}(e.createdAt,r,null==(t=e.trialStatus)?void 0:t.expiresAt)?o(!0,e.createdAt,r)?{shouldLock:!0,lockedModelId:"aefb8f0c-5438-4926-ae94-8e92f6ef046f"}:{shouldLock:!1}:{shouldLock:!1,preferredDefaultModelId:"aa8931b2-f637-43ed-8be9-10e73420c251"}:{shouldLock:!1}:{shouldLock:!0,lockedModelId:"fbfb20a5-0d59-40b3-b863-b83d652dd02f"}}
1851function i(e){let t=!e.shouldLoadTrialStatus||!e.isTrialStatusPending&&!e.isTrialStatusError&&void 0!==e.trialStatus;return e.hasLowBalance&&t&&!a(e.trialStatus,e.now)}},28458:(e,t,r)=>{r.d(t,{K$:()=>h,OE:()=>l,cf:()=>u,h8:()=>i,ws:()=>d});var n=r(14232);let a="bubble-font-size-global",o="bubble-font-size-global-schema",s="bubble-font-size-style",i=13,l=12,d=20,c="#installedBuiltInCss";function u(e){return Math.max(l,Math.min(d,Math.round(e)))}function m(){try{let e=localStorage.getItem(o),t=localStorage.getItem(a);if(null!==t){let r=Number(t);if(Number.isFinite(r)){let t=u(r);if("v2"!==e&&14===t)return localStorage.setItem(a,String(i)),localStorage.setItem(o,"v2"),i;return"v2"!==e&&localStorage.setItem(o,"v2"),t}}}catch{}return i}function p(e){let t=document.getElementById(s);t||((t=document.createElement("style")).id=s,document.head.appendChild(t));let r=`${c} .bubble-message-body:not(:has(ai)),
1852    ${c} .html-message-content.bubble-message-body:not(:has(ai)),
1853    ${c} .bubble-message-body.markdown-body:not(:has(ai)),
1854    ${c} .bubble-message-body .markdown-body:not(:has(ai)),
1855    ${c} .bubble-message-body .safe-html-content:not(:has(ai)),
1856    ${c} .bubble-message-body .v2-markdown-body:not(:has(ai)),
1857    ${c} .bubble-message-body .ai-content-body:not(:has(ai))`;t.textContent=`
1858    ${r} {
1859      font-size: ${e}px !important;
1860    }
1861    ${c} .bubble-message-body .text-sm,
1862    ${c} .bubble-message-body .prose {
1863      font-size: ${e}px !important;
1864    }
1865
1866    /* 移动端不再额外降字号,避免覆盖角色卡内联卡片(如行动推荐)排版。 */
1867  `}function h(){let[e,t]=(0,n.useState)(()=>m());return(0,n.useEffect)(()=>{p(e)},[e]),{fontSizePx:e,setFontSizePx:(0,n.useCallback)(e=>{let r=u(e);t(r);try{localStorage.setItem(a,String(r)),localStorage.setItem(o,"v2")}catch{}},[])}}p(m())},28975:(e,t,r)=>{r.d(t,{Z:()=>a,n:()=>o});let n=/!\[[^\]]*\]\([^)]*\)/g;function a(e){return e.includes("comfy://loading/")||e.includes("/comfyai/results/")}function o(e){return"string"==typeof e&&!!a(e)&&0===e.replace(n,"").trim().length}},29206:(e,t,r)=>{r.d(t,{$D:()=>c,AH:()=>i,CW:()=>g,Kq:()=>h,M:()=>d,Om:()=>s,Uy:()=>l,bq:()=>m,i$:()=>u,sb:()=>a,tE:()=>o,ur:()=>p});var n=r(77810);let a=30,o=20,s=80,i=12,l=1e3,d=100;function c(e){var t;let r=!!(null==(t=e.name)?void 0:t.trim()),n=(e.triggerKeywords??[]).some(e=>e.trim().length>0),a=(e.assets??[]).some(e=>{var t;return null==(t=e.url)?void 0:t.trim()});return!r&&!n&&!a}function u(e){if(""===e||null==e)return;let t="number"==typeof e?e:Number(e);if(Number.isFinite(t)&&!(t<=0))return Math.floor(t)}function m(){return{id:(0,n.b)(),name:"",triggerKeywords:[],triggerSource:"both",matchMode:"any",assetType:"image",assets:[],frequency:"once_per_session",enabled:!0}}let p=[{value:"once_per_session",labelKey:"cgBook.frequencyOncePerSession"},{value:"cooldown",labelKey:"cgBook.frequencyCooldown"}];function h(e){let t=e.trim();if(!t||t.length>l||t.startsWith("javascript:")||t.startsWith("data:")||t.startsWith("blob:"))return!1;if(t.startsWith("/"))return!0;try{let e=new URL(t);return"https:"===e.protocol||"http:"===e.protocol}catch{return!1}}let g=[{value:"any",labelKey:"cgBook.matchModeAny"},{value:"all",labelKey:"cgBook.matchModeAll"}]},30318:(e,t,r)=>{r.d(t,{IN:()=>o,YA:()=>s,lk:()=>n,Iv:()=>a,tN:()=>c,u2:()=>d,un:()=>l});let n=500,a=100,o=500,s=2e3,i=new Map;function l(e){let t=e.trim();return t.length>=2&&t.startsWith("`")&&t.endsWith("`")?t.slice(1,-1):t}function d(e){return/\([^()]*[+*{][^()]*\)[+*{]/.test(e)||/(\.\*|\.\+){2,}/.test(e)||(e.match(/\|/g)??[]).length>20}function c(e,t,r){return function(e,t,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"all";if(!e||!(null==t?void 0:t.length)||e.length>1e5)return e;let c=e;for(let e of t.slice(0,n)){if(!1===e.enabled||"all"!==e.scope&&e.scope!==r||"persist"===a&&e.renderOnly||"renderOnly"===a&&!e.renderOnly)continue;let t=l(e.matchRegex||"");if(!t)continue;let u=function(e){if(i.has(e))return i.get(e)??null;let t=null;if(e.length<=o&&!d(e))try{t=RegExp(e,"g")}catch(e){console.warn("[RegexScripts] cannot compile pattern:",e)}if(i.size>=n){let e=i.keys().next().value;void 0!==e&&i.delete(e)}return i.set(e,t),t}(t),m=null==e.replaceText?"":String(e.replaceText);if(!u||m.length>s){console.warn("[RegexScripts] skip invalid or unsafe rule:",e.id);continue}let p=function(e,t,r){let n=[],a=0;t.lastIndex=0;try{for(let o of function*(e,t,r){let n,a=0;for(;null!==(n=t.exec(e));)yield e.slice(a,n.index),yield*function*(e,t){let r=0,n=t.groups?/\$(\$|&|`|'|<[^>]*>|[0-9]{1,2})/g:/\$(\$|&|`|'|[0-9]{1,2})/g;for(let a of e.matchAll(n)){yield e.slice(r,a.index),r=a.index+a[0].length;let n=a[1];if("$"===n)yield"$";else if("&"===n)yield t[0];else if("`"===n)yield t.input.slice(0,t.index);else if("'"===n)yield t.input.slice(t.index+t[0].length);else if(n.startsWith("<"))yield t.groups?t.groups[n.slice(1,-1)]??"":a[0];else{let e=Number(n),r=Number(n[0]);e>0&&e<t.length?yield t[e]??"":2===n.length&&r>0&&r<t.length?(yield t[r]??"",yield n[1]):yield a[0]}}yield e.slice(r)}(r,n),a=n.index+n[0].length,0===n[0].length&&(t.lastIndex+=1);yield e.slice(a)}(e,t,r)){if(a+o.length>1e5)return{ok:!1};o&&n.push(o),a+=o.length}return{ok:!0,text:n.join("")}}finally{t.lastIndex=0}}(c,u,m);p.ok?c=p.text:console.warn("[RegexScripts] skip oversized replacement:",e.id)}return c}(e,t,"user"===r?"user":"assistant","all")}},32655:(e,t,r)=>{r.d(t,{X:()=>i});let n=/^```(?:css|scss|less)?[^\S\n]*\n([\s\S]*?)\n?```$/i,a=/^```(?:css|scss|less)?[^\S\n]*\n/i,o=/\n```[^\S\n]*$/,s=/^(?:css|scss|less)[^\S\n]*\n(?=\s*(?:\/\*|[.#@*:[\]\w-]))/i;function i(e){if(!e||"string"!=typeof e)return"";let t=e.trim();if(!t)return"";let r=t.match(n);return(t=r?r[1].trim():t.replace(a,"").replace(o,"").trim()).replace(s,"").trim()}},35003:(e,t,r)=>{r.d(t,{D:()=>l});var n=r(14232),a=r(53242),o=r(84421),s=r(97685),i=r(97445);function l(e){let{t}
1867=(0,i.Bd)("chat"),[r,l]=(0,n.useState)([]),[d,c]=(0,n.useState)(!1),u=(0,o.useUserStore)(e=>e.isAuthenticated),m=(0,n.useRef)(r);m.current=r;let p=(0,n.useRef)(null),h=(0,n.useRef)(e);h.current=e;let g=(0,n.useCallback)(async()=>{if(e&&u){c(!0);try{let t=await a.Ar(e);l(t)}catch{}finally{c(!1)}}},[e,u]);(0,n.useEffect)(()=>{g()},[g]);let f=(0,n.useCallback)(async(e,r)=>{try{return await a.bs(e,r),!0}catch{return s.default.error(t("module.mod.saveSelectionsFailed")),await g(),!1}},[g,t]),v=(0,n.useCallback)(async()=>{let e=p.current;p.current=null,e&&await f(e.characterId,e.selectedMods)},[f]),b=(0,n.useCallback)(e=>{let t=h.current;t&&(p.current={characterId:t,selectedMods:e})},[]),y=(0,n.useCallback)(async e=>{let t=m.current;if(t.includes(e))return;let r=[...t,e];l(r),b(r)},[b]);return{selectedMods:r,loading:d,saving:!1,fetchSelections:g,addMod:y,removeMod:(0,n.useCallback)(async e=>{let t=m.current.filter(t=>t!==e);l(t),b(t)},[b]),reorderMods:(0,n.useCallback)(async e=>{l(e),b(e)},[b]),flushPendingSave:v}}},35222:(e,t,r)=>{r.d(t,{Li:()=>u,i8:()=>c,mV:()=>p});var n=r(97685),a=r(17546),o=r(51988);let s=null,i=null,l=new Set;function d(){for(let e of l)try{e()}catch{}}function c(e){return l.add(e),()=>{l.delete(e)}}function u(){return s}function m(){if(i=null,"speechSynthesis"in window)try{window.speechSynthesis.cancel()}catch{}null!==s&&(s=null,d())}function p(e){if(!window.speechSynthesis||"u"<typeof SpeechSynthesisUtterance)return n.oR.error(e.unsupportedTip??(0,a.o)("systemUnsupported",e.lang)),!1;let t=String(e.messageId);if(s===t)return m(),!1;m();let r=(0,o.jQ)(e.rawText);if(!r.trim())return n.oR.error(e.emptyTip??(0,a.o)("emptyText",e.lang)),!1;try{let n,o=new SpeechSynthesisUtterance(r);o.lang=(n=(e.lang??"zh").toLowerCase()).startsWith("zh")?"zh-CN":n.startsWith("en")?"en-US":n.startsWith("ja")?"ja-JP":n.startsWith("ko")?"ko-KR":"zh-CN",o.rate=1;let l=()=>{i===o&&(i=null,s=null,d())};return o.onend=l,o.onerror=e=>{i===o&&(l(),(0,a.V)(e.error,"speech"))},i=o,s=t,d(),window.speechSynthesis.speak(o),!0}catch(e){return i=null,s=null,d(),(0,a.V)(e,"speech"),!1}}},42194:(e,t,r)=>{function n(e){return e.trim()}function a(e){let t="string"==typeof e.modelId?e.modelId.trim():"",r="string"==typeof e.modelName?e.modelName.trim():"",a=e.models;if(t){let e=a.find(e=>e.id===t);if(null==e?void 0:e.name.trim())return n(e.name)}if(r){let e=a.find(e=>e.name===r||e.id===r);return(null==e?void 0:e.name.trim())?n(e.name):n(r)}}r.d(t,{N:()=>n,p:()=>a})},44147:(e,t,r)=>{r.d(t,{Lf:()=>s,NJ:()=>i,hK:()=>o});var n=r(8779),a=r(92699);let o={list:["dailyTasks","list"]},s={staleTime:3e5,cacheTime:6e5,refetchInterval:!1};class i{static extractErrorMessage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,a.p4)("httpStatus.operationFailedRetry","操作失败,请稍后重试");if(e.request&&!e.response)return(0,a.p4)("httpStatus.networkFailed","网络连接失败,请检查网络设置");if("ECONNABORTED"===e.code)return(0,a.p4)("httpStatus.requestTimeout","请求超时,请重试");if(e.response){let{status:n,data:o}=e.response;if(o&&"object"==typeof o){var r;if(null==(r=o.error)?void 0:r.message)return o.error.message;if(o.message)return o.message}return({400:(0,a.p4)("httpStatus.badRequest400","请求参数错误,请检查输入"),401:(0,a.p4)("httpStatus.sessionExpired401","登录已过期,请重新登录"),403:(0,a.p4)("httpStatus.forbidden403","没有权限执行此操作"),404:(0,a.p4)("httpStatus.notFound404","请求的资源不存在"),500:(0,a.p4)("httpStatus.server500","服务器错误,请稍后重试"),502:(0,a.p4)("httpStatus.badGateway502","网关错误,请稍后重试"),503:(0,a.p4)("httpStatus.serviceUnavailable503","服务暂时不可用,请稍后重试")})[n]||t}return e.message||t}static errorWithCode(e,t){let r=Error(e);return t&&(r.code=t),r}static rejectClaimError(e,t){var r,n,a,o;if(e instanceof Error&&"code"in e&&e.code)throw e;let s=null==(r=e.response)?void 0:r.data;if(s&&"object"==typeof s&&((null==(n=s.error)?void 0:n.message)||s.message))throw i.errorWithCode((null==(a=s.error)?void 0:a.message)||s.message||t,null==(o=s.error)?void 0:o.code);throw Error(i.extractErrorMessage(e,t))}static async getDailyTasks(){try{let t=await n.default.get("/api/daily-tasks");
1867if(!t.data.success||!t.data.data){var e;throw Error((null==(e=t.data.error)?void 0:e.message)||(0,a.p4)("dailyTasks.getTaskListFailed","获取任务列表失败"))}return t.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,a.p4)("dailyTasks.getTaskListFailedRetry","获取任务列表失败,请稍后重试")))}}static async claimTaskReward(e){try{let o=await n.default.post(`/api/daily-tasks/${e}/claim`);if(!o.data.success||!o.data.data){var t,r;let e=o.data;throw i.errorWithCode((null==(t=e.error)?void 0:t.message)||e.message||(0,a.p4)("dailyTasks.claimRewardFailed","领取奖励失败"),null==(r=e.error)?void 0:r.code)}return o.data.data}catch(e){i.rejectClaimError(e,(0,a.p4)("dailyTasks.claimRewardFailedRetry","领取奖励失败,请稍后重试"))}}static async getDailyTasksWithStages(){try{let t=await n.default.get("/api/daily-tasks");if(!t.data.success||!t.data.data){var e;throw Error((null==(e=t.data.error)?void 0:e.message)||(0,a.p4)("dailyTasks.getTaskListFailed","获取任务列表失败"))}return t.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,a.p4)("dailyTasks.getTaskListFailedRetry","获取任务列表失败,请稍后重试")))}}static async claimStageReward(e){try{let o=await n.default.post(`/api/daily-tasks/stages/${e}/claim`);if(!o.data.success||!o.data.data){var t,r;let e=o.data;throw i.errorWithCode((null==(t=e.error)?void 0:t.message)||e.message||(0,a.p4)("dailyTasks.claimRewardFailed","领取奖励失败"),null==(r=e.error)?void 0:r.code)}return o.data.data}catch(e){i.rejectClaimError(e,(0,a.p4)("dailyTasks.claimRewardFailedRetry","领取奖励失败,请稍后重试"))}}static async claimStageRewardsBatch(e){try{let o=await n.default.post("/api/daily-tasks/stages/claim-batch",{stageIds:e});if(!o.data.success||!o.data.data){var t,r;let e=o.data;throw i.errorWithCode((null==(t=e.error)?void 0:t.message)||e.message||(0,a.p4)("dailyTasks.batchClaimRewardFailed","批量领取奖励失败"),null==(r=e.error)?void 0:r.code)}return o.data.data}catch(e){i.rejectClaimError(e,(0,a.p4)("dailyTasks.batchClaimRewardFailedRetry","批量领取奖励失败,请稍后重试"))}}}},45967:(e,t,r)=>{r.d(t,{A:()=>o});var n=r(37876);r(14232);var a=r(77086);let o=e=>{let{options:t,onSelectOption:r,disabled:o=!1,className:s=""}=e;return 0===t.length?null:(0,n.jsx)("div",{className:s.trim(),children:(0,n.jsx)(a.i,{options:t,isDisabled:o,onDirectSelect:r})})}},48227:(e,t,r)=>{r.d(t,{Yo:()=>i,qP:()=>l,v2:()=>s,v8:()=>d});let n={status:"unknown",remaining:0},a=new Set;function o(){a.forEach(e=>e())}function s(){return n}function i(e){return a.add(e),()=>{a.delete(e)}}function l(e){let t=Math.max(0,Math.floor(e));("ready"!==n.status||n.remaining!==t)&&(n={status:"ready",remaining:t},o())}function d(){n={status:"unknown",remaining:0},o()}},51988:(e,t,r)=>{r.d(t,{Wu:()=>i,jQ:()=>l,tV:()=>s});var n=r(63800);let a="\x3c!-- FISH_INLINE_AUDIO_START",o="\x3c!-- FISH_INLINE_AUDIO_END --\x3e";function s(e){let t=JSON.stringify({referenceId:e.referenceId.trim(),voiceTitle:e.voiceTitle.trim()});return`${a}:${t} -->
1868[语音朗读:${e.voiceTitle.trim()}](${e.audioUrl.trim()})
1869${o}`}function i(e){if(!e.includes(a))return e;let t=RegExp(`${a}[\\s\\S]*?${o}`,"g");return e.replace(t,"").replace(/\n{3,}/g,"\n\n").trim()}function l(e){let t="";if(Array.isArray(e))t=e.map(e=>"string"==typeof e?e:String(e??"")).join("\n");else if("string"==typeof e){let r=e.trim();if(r.startsWith("[")&&r.endsWith("]"))try{let n=JSON.parse(r);t=Array.isArray(n)?n.map(e=>"string"==typeof e?e:String(e??"")).join("\n"):e}catch{t=e}else t=e}else null!=e&&(t=String(e));
1869return t.trim()?(t=(t=(t=(t=(t=i(t=(t=t.replace(/\\n/g,"\n")).replace(/<!--\s*COMFY_INLINE_IMAGE_START\s*-->[\s\S]*?<!--\s*COMFY_INLINE_IMAGE_END\s*-->/g,""))).replace(/<!--[\s\S]*?-->/g,"")).replace(/<!--/g,"")).replace(/<(?:think|redacted_thinking|thinking)>[\s\S]*?<\/(?:think|redacted_thinking|thinking)>/gi,"").replace(/<\s*cot\s*>[\s\S]*?<\/\s*cot\s*>/gi,"").replace(/<(?:think|redacted_thinking|thinking)>[\s\S]*$/gi,"").replace(/<\s*cot\s*>[\s\S]*$/gi,"")).replace(/<next_prompt\b[^>]*>[\s\S]*?<\/next_prompt>/gi,"").replace(/<next_action\b[^>]*>[\s\S]*?<\/next_action>/gi,"").replace(/<opt\b[^>]*>[\s\S]*?<\/opt>/gi,"").replace(/<suggested_questions\b[^>]*>[\s\S]*?<\/suggested_questions>/gi,"").replace(/<details\b[^>]*>[\s\S]*?<\/details>/gi,""),(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(0,n.E)(t)).replace(/<Disclaimer\b[^>]*>[\s\S]*?<\/Disclaimer>/gi,"").replace(/<sprite\b[^>]*\/?>/gi,"").replace(/<sprite\b[^>]*>[\s\S]*?<\/sprite>/gi,"")).replace(/!\[[^\]]*\]\([^)]*\)/g,"")).replace(/<br\s*\/?>/gi,"\n")).replace(/<\/?[^>]+(>|$)/g,"")).replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&quot;/gi,'"').replace(/&#39;/gi,"'").replace(/&amp;/gi,"&")).replace(/```[\s\S]*?```/g,"").replace(/~~~[\s\S]*?~~~/g,"")).replace(/`([^`]+)`/g,"$1")).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1")).replace(/\*\*([^*]+)\*\*/g,"$1")).replace(/\*([^*\n]+)\*/g,"$1")).replace(/__([^_]+)__/g,"$1")).replace(/_([^_\n]+)_/g,"$1")).replace(/^\s*#{1,6}\s+/gm,"").replace(/^\s*>\s+/gm,"").replace(/^\s*[-*+]\s+/gm,"").replace(/^\s*\d+\.\s+/gm,"")).split("\n").map(e=>e.trim()).join("\n")).replace(/\n{3,}/g,"\n\n")).trim()):""}},52840:(e,t,r)=>{r.d(t,{D:()=>a});let n=new Set(["yeyu.ai","www.yeyu.ai"]);function a(e){try{let t=new URL(e).hostname.toLowerCase();if(n.has(t))return"https://www.yeyu.mom"}catch{}return e}},53242:(e,t,r)=>{r.d(t,{Ar:()=>u,Iu:()=>d,LE:()=>w,NE:()=>a,P0:()=>g,P9:()=>y,a8:()=>l,bs:()=>m,cy:()=>v,ev:()=>c,n5:()=>x,n_:()=>i,oz:()=>b,pE:()=>s,qY:()=>o,qz:()=>h,tO:()=>f,xP:()=>p});var n=r(8779);async function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.default.get("/api/mods/public",e)).data}async function o(){return(await n.default.get("/api/mods/my-created")).data.mods}async function s(){return(await n.default.get("/api/mods/my-purchased")).data.mods}async function i(e){return(await n.default.post("/api/mods",e)).data.mod}async function l(e,t){return(await n.default.put(`/api/mods/${e}`,t)).data.mod}async function d(e){await n.default.delete(`/api/mods/${e}`)}async function c(e){return(await n.default.post(`/api/mods/${e}/purchase`)).data}async function u(e){return(await n.default.get(`/api/mods/selections/${e}`)).data.selectedMods}async function m(e,t){await n.default.put(`/api/mods/selections/${e}`,{selectedMods:t})}async function p(){return(await n.default.get("/api/mods/groups")).data}async function h(e){return(await n.default.post("/api/mods/groups",{name:e})).data}async function g(e,t){await n.default.put(`/api/mods/groups/${e}`,t)}async function f(e){await n.default.delete(`/api/mods/groups/${e}`)}async function v(e,t){await n.default.post(`/api/mods/groups/${e}/members`,{modId:t})}async function b(e,t){await n.default.delete(`/api/mods/groups/${e}/members/${t}`)}async function y(e){await n.default.delete(`/api/mods/groups/members/${e}`)}async function x(e){return(await n.default.post(`/api/mods/${e}/fork`)).data.mod}async function w(e){return(await n.default.post(`/api/mods/${e}/promote`)).data.mod}},53940:(e,t,r)=>{r.d(t,{q:()=>a});var n=r(14232);function a(){let[e,t]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(!0)},[]),e}},55103:(e,t,r)=>{r.d(t,{Td:()=>a,d7:()=>s,fN:()=>i,jA:()=>c,pD:()=>d,qU:()=>o,tS:()=>l});var n=r(37876);r(14232);let a=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-a-icon-chat-copy01 ${t??""}`.trim(),viewBox:"0 0 1024 1024","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M395.4688 744.96c-19.2 0-35.6864-6.8608-49.3568-20.5312a67.328 67.328 0 0 1-20.5312-49.3568v-465.92c0-19.2512 6.8608-35.6864 20.48-49.3568 13.7216-13.7216 30.208-20.5312 49.408-20.5312h372.736c19.2 0 35.6864 6.8096 49.3568 20.48 13.6704 13.7216 20.48 30.208 20.48 49.408v465.92c0 19.2-6.8096 35.6352-20.48 49.3568-13.6704 13.6704-30.1568 20.48-49.3568 20.48h-372.736z m0-69.888h372.736v-465.92h-372.736v465.92z m-139.776 209.664c-19.2 0-35.6864-6.8608-49.3568-20.5312a67.328 67.328 0 0 1-20.5312-49.3568V279.04h69.888v535.808h442.624v69.888H255.6928z"})})},o=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-a-icon-chat-edit01 ${t??""}`.trim(),viewBox:"0 0 1024 1024","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M227.072 838.144v-148.48l483.4304-483.4304c7.1168-7.1168 14.848-12.288 23.296-15.5136a72.3968 72.3968 0 0 1 52.3776 0c8.448 3.2256 16.1792 8.3968 23.296 15.5136l49.5104 49.5104c7.168 7.1168 12.288 14.848 15.5648 23.296a72.3968 72.3968 0 0 1 0 52.4288 66.8672 66.8672 0 0 1-15.5648 23.296l-483.3792 483.328h-148.48zM296.96 768.256h49.5104L715.3152 399.36l-24.2176-25.2416-25.2416-24.2688L296.96 718.7456v49.5104z m394.1376-394.0864l-25.2416-24.2688 49.4592 49.5104-24.2176-25.2416z m-102.912 463.9744c39.424 0 78.4384-11.52 116.9408-34.4576 38.5024-22.9888 57.7536-54.2208 57.7536-93.696 0-22.016-5.0176-40.2432-15.0016-54.784-10.0352-14.592-26.112-28.672-48.0768-42.24l-52.4288 51.4048c16.1792 8.448 27.8528 15.7184 34.9696 21.8624s10.6496 14.08 10.6496 23.7568c0 14.8992-11.4688 28.3136-34.4576 40.2944-22.9376 11.9808-46.3872 17.92-70.3488 17.92a33.4336 33.4336 0 0 0-24.2688 10.752 33.4336 33.4336 0 0 0 0 48.9984c7.1168 6.8096 15.2064 10.1888 24.2688 10.1888zM250.368 567.296l54.3744-54.3232a123.2896 123.2896 0 0 1-37.376-15.5136c-11.3152-7.168-16.9984-13.9264-16.9984-20.4288 0-6.4512 5.6832-13.7216 16.9984-21.8112 11.3152-8.0896 33.1776-20.224 65.536-36.4032 51.0976-25.9072 85.0944-48.0768 101.888-66.5088 16.896-18.432 25.2416-38.9632 25.2416-61.6448 0-32.9728-12.1344-58.7264-36.352-77.1584-24.32-18.432-55.5008-27.648-93.696-27.648a219.136 219.136 0 0 0-75.7248 13.1072c-23.9104 8.704-41.4208 20.224-52.4288 34.4576a37.376 37.376 0 0 0-7.7312 25.7024 29.952 29.952 0 0 0 12.5952 22.8352 33.8432 33.8432 0 0 0 25.7536 7.2704 35.2256 35.2256 0 0 0 23.7568-11.1616c8.3968-8.3968 19.0976-14.2336 32.0512-17.4592 12.9536-3.2768 26.8288-4.864 41.728-4.864 20.0704 0 35.1232 3.3792 45.1584 10.1888 9.984 6.8096 15.0016 15.0528 15.0016 24.7296 0 8.448-5.3248 16.9984-15.9744 25.7536-10.7008 8.704-34.816 22.1696-72.3456 40.2944-45.312 22.016-76.8 41.728-94.6176 59.1872-17.8176 17.4592-26.7264 37.888-26.7264 61.1328 0 18.7904 5.6832 35.9424 16.9984 51.456 11.3152 15.5648 28.9792 28.4672 52.8896 38.8608z"})})},s=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-a-icon-chat-delete01 ${t??""}`.trim(),viewBox:"0 0 1024 1024","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M348.9792 838.144c-19.2 0-35.6864-6.8608-49.3568-20.5312a67.2768 67.2768 0 0 1-20.5312-49.3568v-465.92h-46.592V232.448h186.368v-46.592h186.368v46.592h186.368v69.888h-46.592v465.5104c0 19.6608-6.8608 36.352-20.5312 49.92a67.5328 67.5328 0 0 1-49.3568 20.3776
1869h-326.144z m326.144-535.808h-326.144v465.92h326.144v-465.92zM418.8672 698.368h69.888V372.224H418.8672v326.144z m116.48 0h69.888V372.224h-69.888v326.144z"})})},i=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-a-icon-chat-refresh01 ${t??""}`.trim(),viewBox:"0 0 1024 1024","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M418.816 843.0592l-49.4592-49.5104 55.296-55.296h-29.0816c-71.3728 0-131.9424-24.8832-181.7088-74.5472-49.664-49.664-74.5472-110.1824-74.5472-181.504 0-71.3216 24.832-131.8912 74.5472-181.76 49.7664-49.8176 110.336-74.752 181.7088-74.752h232.96c71.3728 0 131.9424 24.8832 181.6576 74.5472 49.7152 49.664 74.5984 110.1824 74.5984 181.5552 0 71.3216-24.8832 131.8912-74.5984 181.7088-49.7152 49.8176-110.2848 74.752-181.6576 74.752v-69.888c51.712 0 95.744-18.2272 131.9936-54.5792 36.2496-36.352 54.3744-80.384 54.3744-132.0448 0-51.6096-18.176-95.5392-54.528-131.7888a179.8656 179.8656 0 0 0-131.84-54.3232h-232.96A179.5072 179.5072 0 0 0 263.68 350.208a179.9168 179.9168 0 0 0-54.4768 131.9936c0 51.6096 18.1248 95.5392 54.3232 131.7888 36.2496 36.2496 80.2816 54.3744 132.0448 54.3744h29.0816l-55.296-55.296 49.5104-49.5616 139.776 139.776-139.776 139.776z"})})},l=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:t??"",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.75,"aria-hidden":"true",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13.19 8.688a4.5 4.5 0 011.242 7.244l-4.5 4.5a4.5 4.5 0 01-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 00-6.364-6.364l-4.5 4.5a4.5 4.5 0 001.242 7.244"})})},d=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:t??"",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.75,"aria-hidden":"true",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.757 3.63 8.25 4.51 8.25H6.75z"})})},c=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:t??"",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.75,"aria-hidden":"true",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17.25 9.75L19.5 12m0 0l2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-7.5l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.757 3.63 8.25 4.51 8.25H6.75z"})})}},56041:(e,t,r)=>{r.d(t,{Ay:()=>l,OR:()=>s});var n=r(8779),a=r(65229),o=r(92699);let s={balance:["points","balance"]};class i{static extractErrorMessage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,o.p4)("httpStatus.operationFailedRetry","操作失败,请稍后重试");if(e.request&&!e.response)return(0,o.p4)("httpStatus.networkFailed","网络连接失败,请检查网络设置");if("ECONNABORTED"===e.code)return(0,o.p4)("httpStatus.requestTimeout","请求超时,请重试");if(e.response){let{status:n,data:a}=e.response;if(a&&"object"==typeof a){var r;if(null==(r=a.error)?void 0:r.message)return a.error.message;if(a.message)return a.message}return({400:(0,o.p4)("httpStatus.badRequest400","请求参数错误,请检查输入"),401:(0,o.p4)("httpStatus.sessionExpired401","登录已过期,请重新登录"),403:(0,o.p4)("httpStatus.forbidden403","没有权限执行此操作"),404:(0,o.p4)("httpStatus.notFound404","请求的资源不存在"),500:(0,o.p4)("httpStatus.server500","服务器错误,请稍后重试"),502:(0,o.p4)("httpStatus.badGateway502","网关错误,请稍后重试"),503:(0,o.p4)("httpStatus.serviceUnavailable503","服务暂时不可用,请稍后重试")})[n]||t}return e.message||t}static async redeemVoucher(e){try{let r=await n.default.post(a.API_ENDPOINTS.points.redeemVoucher,{code:e.trim()});if(!r.data.success||!r.data.data){var t;throw Error((null==(t=r.data.error)?void 0:t.message)||(0,o.p4)("points.redeemFailed","兑换失败"))}return r.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("points.redeemFailedRetry","兑换失败,请稍后重试")))}}static async getPointsBalance(){try{let t=await n.default.get("/api/points/balance");if(!t.data.success||!t.data.data){var e;throw Error((null==(e=t.data.error)?void 0:e.message)||(0,o.p4)("points.fetchBalanceFailed","获取积分余额失败"))}return t.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("points.fetchBalanceFailedRetry","获取积分余额失败,请稍后重试")))}}}let l=i},64422:(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r(37876),a=r(14232),o=r(97445),s=r(45441);function i(e){return"string"==typeof e?document.querySelector(e):e instanceof HTMLElement?e:null}function l(e){let{scrollContainer:t,showThreshold:r=300,showThresholdScreens:l,className:d="",rightPosition:c="right-4",bottomPosition:u="bottom-20",direction:m="up",onScrollAction:p,ariaLabel:h}=e,{t:g}=(0,o.Bd)("common"),[f,v]=(0,a.useState)(!1),b=(0,a.useCallback)(()=>{let e=i(t);
1869if(e){let{scrollTop:t,scrollHeight:n,clientHeight:a}=e,o=void 0===l?r:a*l;"down"===m?v(n-t-a>o&&n>a+1):v(t>o);return}let n=window.pageYOffset||document.documentElement.scrollTop,a=document.documentElement.scrollHeight,o=window.innerHeight,s=void 0===l?r:o*l;"down"===m?v(a-n-o>s):v(n>s)},[t,r,l,m]),y=(0,a.useCallback)(()=>{if(p)return void p();let e=i(t);e?e.scrollTo({top:"down"===m?e.scrollHeight:0,behavior:"smooth"}):"down"===m?window.scrollTo({top:document.documentElement.scrollHeight,behavior:"smooth"}):window.scrollTo({top:0,behavior:"smooth"})},[t,m,p]);(0,a.useEffect)(()=>{let e,r=()=>{e&&clearTimeout(e),e=setTimeout(b,100)},n=requestAnimationFrame(()=>{b()});window.addEventListener("resize",r);let a=i(t);return a?(a.addEventListener("scroll",r),()=>{a.removeEventListener("scroll",r),window.removeEventListener("resize",r),cancelAnimationFrame(n),e&&clearTimeout(e)}):(window.addEventListener("scroll",r),()=>{window.removeEventListener("scroll",r),window.removeEventListener("resize",r),cancelAnimationFrame(n),e&&clearTimeout(e)})},[t,b]);let x=h??g("down"===m?"scrollToBottom":"scrollToTop");return f?(0,n.jsx)("button",{type:"button",onClick:y,className:(0,s.cn)("fixed flex h-9 w-9 items-center justify-center rounded-full","border border-v2-border-primary/50 bg-v2-bg-secondary","transition-v2-interactive duration-200","hover:bg-v2-bg-tertiary","z-20 animate-fade-in",c,u,d),"aria-label":x,title:x,children:(0,n.jsx)("svg",{className:(0,s.cn)("h-5 w-5 text-v2-accent-primary","down"===m&&"rotate-180"),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":!0,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 10l7-7m0 0l7 7m-7-7v18"})})}):null}},68587:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(37876),a=r(14232),o=r(97445);let s=(0,a.memo)(function(e){let{currentPage:t,totalPages:r,total:s,onPageChange:i,disabled:l=!1,loading:d=!1}=e,{t:c}=(0,o.Bd)("chat"),[u,m]=(0,a.useState)(""),[p,h]=(0,a.useState)(null),g=l||d,f=p??t;(0,a.useEffect)(()=>{null!==p&&t===p?h(null):d||null===p||t===p||h(null)},[t,d,p]);let v=(0,a.useCallback)(e=>{g||e<1||e>r||e!==f&&(h(e),i(e))},[g,r,f,i]),b=(0,a.useCallback)(()=>{let e=parseInt(u,10);e>=1&&e<=r&&e!==f&&(v(e),m(""))},[u,r,f,v]),y=(0,a.useCallback)(e=>{"Enter"===e.key&&b()},[b]),x=function(e,t){if(t<=7)return Array.from({length:t},(e,t)=>t+1);let r=[1];e>3&&r.push("ellipsis");let n=Math.max(2,e-1),a=Math.min(t-1,e+1);for(let e=n;e<=a;e++)r.push(e);return e<t-2&&r.push("ellipsis"),t>1&&r.push(t),r}(f,r);if(r<=1)return null;let w="inline-flex items-center justify-center min-w-[32px] h-8 px-2 text-xs rounded cursor-pointer select-none",k=`${w} text-v2-text-secondary active:bg-v2-bg-hover`,S=`${w} bg-v2-gradient-primary text-v2-text-inverse`,C=`${w} text-v2-text-disabled cursor-not-allowed`;return(0,n.jsx)("div",{className:"w-full z-5 py-1",role:"navigation","aria-label":c("module.paginator.aria"),style:{touchAction:"manipulation"},children:(0,n.jsx)("div",{className:"relative",children:(0,n.jsxs)("div",{className:"py-0 w-full flex flex-wrap justify-center items-center gap-1",style:{minHeight:"32px"},children:[d&&(0,n.jsx)("div",{className:"absolute inset-0 flex items-center justify-center",children:(0,n.jsx)("div",{className:"w-4 h-4 border-2 border-v2-border-primary border-t-v2-accent-primary rounded-full animate-spin"})}),(0,n.jsx)("button",{type:"button",className:f<=1||g?C:k,onClick:()=>v(f-1),disabled:f<=1||g,"aria-label":c("module.paginator.previous"),style:{opacity:d?.4:1},children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"15 18 9 12 15 6"})})}),x.map((e,t)=>"ellipsis"===e?(0,n.jsx)("span",{className:"inline-flex items-center justify-center w-7 h-8 text-xs text-v2-text-tertiary select-none",style:{opacity:d?.4:1},children:"…"},`e-${t}`):(0,n.jsx)("button",{type:"button",className:e===f?S:g?C:k,onClick:()=>v(e),disabled:g,"aria-label":c("module.paginator.page",{page:e}),"aria-current":e===f?"page":void 0,style:{opacity:d?.4:1},children:e},e)),(0,n.jsx)("button",{type:"button",className:f>=r||g?C:k,onClick:()=>v(f+1),disabled:f>=r||g,"aria-label":c("module.paginator.next"),style:{opacity:d?.4:1},children:(0,n.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"9 18 15 12 9 6"})})}),r>5&&(0,n.jsxs)("div",{className:"inline-flex items-center gap-1 ml-2 text-xs text-v2-text-tertiary",style:{opacity:d?.4:1},children:[(0,n.jsx)("span",{className:"whitespace-nowrap",children:c("module.paginator.jumpTo")}),(0,n.jsx)("input",{type:"number",min:1,max:r,value:u,onChange:e=>m(e.target.value),onKeyDown:y,className:"w-10 h-6 px-1 text-center text-xs border border-v2-border-primary rounded bg-v2-bg-card text-v2-text-primary focus:outline-none focus:border-v2-border-focus",disabled:g,"aria-label":c("module.paginator.jumpAria")}),(0,n.jsx)("span",{children:c("module.paginator.pageUnit")}),(0,n.jsx)("button",{type:"button",className:`h-6 px-2 text-xs rounded ${g?"text-v2-text-disabled cursor-not-allowed":"text-v2-text-secondary active:bg-v2-bg-hover cursor-pointer"}`,onClick:b,disabled:g,children:"GO"})]})]})})})})},69257:(e,t,r)=>{r.d(t,{$:()=>n});function n(e,t){return!!t.isFromColdArchive||null!=e&&!(e<=0)&&!!t.sentAt&&Math.floor(t.sentAt.getTime()/1e3)<=e}},69475:(e,t,r)=>{r.d(t,{A:()=>l,J:()=>i});var n=r(8779),a=r(52840),o=r(92699);function s(e,t){let r=t.toLowerCase();return{code:t,fullUrl:`${e}/user/register?ref=${r}`,shortUrl:`${e}/r/${r}`}}class i{static #e=this.CACHE_TTL_MS=6e4;static #t=this.REFERRAL_CODE_CACHE_TTL_MS=3e5;static #r=this.REFERRAL_CODE_SESSION_KEY="referral:code:v1";static #n=this.referralCodeCache=null;static #a=this.statisticsCache=null;static #o=this.shortLinkCache=null;static #s=this.summaryCache=null;static #i=this.inFlightReferralCode=null;static #l=this.inFlightStatistics=null;static #d=this.inFlightShortLink=null;static #c=this.inFlightSummary=null;static isFresh(e){return Date.now()-e<i.CACHE_TTL_MS}static isReferralCodeFresh(e){return Date.now()-e<i.REFERRAL_CODE_CACHE_TTL_MS}static loadReferralCodeFromSession(){if("u"<typeof sessionStorage)return null;try{var e;let t=sessionStorage.getItem(i.REFERRAL_CODE_SESSION_KEY);if(!t)return null;let r=JSON.parse(t);if(!(null==r||null==(e=r.value)?void 0:e.code)||!i.isReferralCodeFresh(r.ts))return sessionStorage.removeItem(i.REFERRAL_CODE_SESSION_KEY),null;return r.value}catch{return null}}static saveReferralCodeToSession(e){if("u">typeof sessionStorage)try{sessionStorage.setItem(i.REFERRAL_CODE_SESSION_KEY,JSON.stringify({value:e,ts:Date.now()}))}catch{}}static extractErrorMessage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,o.p4)("httpStatus.operationFailedRetry","操作失败,请稍后重试");if(e.request&&!e.response)return(0,o.p4)("httpStatus.networkFailed","网络连接失败,请检查网络设置");if("ECONNABORTED"===e.code)return(0,o.p4)("httpStatus.requestTimeout","请求超时,请重试");if(e.response){let{status:r,data:n}=e.response;if(n&&"object"==typeof n){if("message"in n&&"string"==typeof n.message)return n.message;if("error"in n&&"string"==typeof n.error)return n.error}return({400:(0,o.p4)("httpStatus.badRequest400","请求参数错误ï¼
1869Œè¯·æ£€æŸ¥è¾“å…¥"),401:(0,o.p4)("httpStatus.sessionExpired401","登录已过期,请重新登录"),403:(0,o.p4)("httpStatus.forbidden403","没有权限执行此操作"),404:(0,o.p4)("httpStatus.notFound404","请求的资源不存在"),500:(0,o.p4)("httpStatus.server500","服务器错误,请稍后重试"),502:(0,o.p4)("httpStatus.badGateway502","网关错误,请稍后重试"),503:(0,o.p4)("httpStatus.serviceUnavailable503","服务暂时不可用,请稍后重试")})[r]||t}return e.message||t}static prefetchCore(){i.getSummary()}static async getSummary(){if(i.summaryCache&&i.isFresh(i.summaryCache.ts))return i.summaryCache.value;if(i.inFlightSummary)return i.inFlightSummary;try{return i.inFlightSummary=n.default.get("/api/referral/summary").then(e=>{if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.summaryDataFailed","获取邀请数据失败"));let t=e.data.data,r=window.location.origin,n=(0,a.D)(r),l=s(n,t.code.code),d={code:t.code,shortLink:l,statistics:t.statistics,tasks:t.tasks,paidInviteesCount:t.paidInviteesCount,rebateEligibility:t.rebateEligibility,pendingRebateTokens:t.pendingRebateTokens,pendingRebateExpiresAt:t.pendingRebateExpiresAt};return i.summaryCache={value:d,ts:Date.now()},i.referralCodeCache={value:t.code,ts:Date.now()},i.shortLinkCache={value:l,ts:Date.now()},i.statisticsCache={value:t.statistics,ts:Date.now()},d}).finally(()=>{i.inFlightSummary=null}),await i.inFlightSummary}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.summaryDataFailedRetry","获取邀请数据失败,请稍后重试")))}}static clearSummaryCache(){i.summaryCache=null,i.statisticsCache=null}static async getReferralCode(){let e=i.loadReferralCodeFromSession();if(e)return i.referralCodeCache={value:e,ts:Date.now()},e;if(i.referralCodeCache&&i.isReferralCodeFresh(i.referralCodeCache.ts))return i.referralCodeCache.value;if(i.inFlightReferralCode)return i.inFlightReferralCode;try{return i.inFlightReferralCode=n.default.get("/api/referral/code").then(e=>{if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.getCodeFailed","获取邀请码失败"));let t=e.data.data;return i.referralCodeCache={value:t,ts:Date.now()},i.saveReferralCodeToSession(t),t}).finally(()=>{i.inFlightReferralCode=null}),await i.inFlightReferralCode}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getCodeFailedRetry","获取邀请码失败,请稍后重试")))}}static clearReferralCodeCache(){if(i.referralCodeCache=null,i.inFlightReferralCode=null,"u">typeof sessionStorage)try{sessionStorage.removeItem(i.REFERRAL_CODE_SESSION_KEY)}catch{}}static async getStatistics(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e&&i.statisticsCache&&i.isFresh(i.statisticsCache.ts))return i.statisticsCache.value;if(i.inFlightStatistics)return i.inFlightStatistics;try{return i.inFlightStatistics=n.default.get("/api/referral/statistics",{refresh:e?"true":void 0}).then(e=>{if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.getStatsFailed","获取统计数据失败"));return i.statisticsCache={value:e.data.data,ts:Date.now()},e.data.data}).finally(()=>{i.inFlightStatistics=null}),await i.inFlightStatistics}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getStatsFailedRetry","获取统计数据失败,请稍后重试")))}}static async refreshStatistics(){try{let e=await n.default.post("/api/referral/statistics/refresh");if(!e.data.success)throw Error(e.data.message||(0,o.p4)("referral.refreshStatsFailed","刷新统计数据失败"));i.clearSummaryCache()}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.refreshStatsFailedRetry","刷新统计数据失败,请稍后重试")))}}static async getRebateRecords(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20;try{let r=await n.default.get("/api/referral/rebates",{page:e,limit:t});if(!r.data.success||!r.data.data)throw Error((0,o.p4)("referral.getRebateFailed","获取返现记录失败"));return r.data.data}catch(e){throw Error(i.extractErrorMessage(e,"获取返现记录失败,请稍后重试"))}}static async getRewardRecords(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"rebate";try{let a=await n.default.get("/api/referral/reward-records",{page:e,limit:t,type:r});if(!a.data.success||!a.data.data)throw Error((0,o.p4)("referral.getRewardFailed","获取奖励记录失败"));return a.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getRewardFailedRetry","获取奖励记录失败,请稍后重试")))}}static async getShortLink(){if(i.shortLinkCache&&i.isFresh(i.shortLinkCache.ts))return i.shortLinkCache.value;if(i.inFlightShortLink)return i.inFlightShortLink;try{return i.inFlightShortLink=n.default.get("/api/referral/short-link").then(e=>{if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.getShortLinkFailed","获取短链接失败"));let t=e.data.data,r=window.location.origin,n=(0,a.D)(r),l=s(n,t.code);return i.shortLinkCache={value:l,ts:Date.now()},l}).finally(()=>{i.inFlightShortLink=null}),await i.inFlightShortLink}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getShortLinkFailedRetry","获取短链接失败,请稍后重试")))}}static async getTasks(){try{let e=await n.default.get("/api/referral/tasks");
1869if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.getTasksFailed","获取任务列表失败"));return e.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getTasksFailedRetry","获取任务列表失败,请稍后重试")))}}static async getWithdrawableInfo(){try{let e=await n.default.get("/api/referral/withdrawable");if(!e.data.success||!e.data.data)throw Error((0,o.p4)("referral.getWithdrawInfoFailed","获取可提现信息失败"));return e.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getWithdrawInfoFailedRetry","获取可提现信息失败,请稍后重试")))}}static async submitWithdrawal(e,t){try{let r=await n.default.post("/api/referral/withdraw",{amountYuan:e,emailCode:t});if(!r.data.success)throw Error(r.data.message||(0,o.p4)("referral.submitWithdrawFailed","提现申请提交失败"));return r.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.submitWithdrawFailedRetry","提现申请提交失败,请稍后重试")))}}static async getWithdrawalHistory(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;try{let r=await n.default.get("/api/referral/withdraw/history",{page:e,pageSize:t});if(!r.data.success||!r.data.data)throw Error((0,o.p4)("referral.getWithdrawHistoryFailed","获取提现历史记录失败"));return r.data.data}catch(e){throw Error(i.extractErrorMessage(e,(0,o.p4)("referral.getWithdrawHistoryFailedRetry","获取提现历史记录失败,请稍后重试")))}}}let l=i},70197:(e,t,r)=>{r.d(t,{$b:()=>n,AT:()=>a,ZN:()=>o});function n(e){return`姓名:${e}
1870性别:男
1871年龄:18
1872外貌:高大帅气`}function a(e,t){return t("module.quickStart.template",{defaultValue:n(e)}).replace(/\{\{displayName\}\}/g,e)}function o(e,t){var r,n;return(null==e||null==(r=e.firstName)?void 0:r.trim())||(null==e||null==(n=e.username)?void 0:n.trim())||t}},73647:(e,t,r)=>{r.d(t,{k:()=>s});var n=r(67914),a=r(71673),o=r(90935);function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,n.I)({queryKey:a.lH.aiModels.active(),queryFn:o.DY,enabled:e.enabled??!0,staleTime:o.ae,gcTime:o.l4,refetchOnMount:!1,refetchOnWindowFocus:!1})}},75730:(e,t,r)=>{r.d(t,{X:()=>a});var n=r(17308);function a(e){return(0,n.m4)(e??void 0)}r(92699)},78626:(e,t,r)=>{r.r(t),r.d(t,{DEFAULT_MODEL_PARAMS:()=>l,default:()=>c});var n=r(37876),a=r(14232),o=r(98477),s=r(65685),i=r(97445);let l={temperature:.7,topP:.8,presencePenalty:0,frequencyPenalty:0},d=[{key:"temperature",labelKey:"module.modelParams.temperature",min:0,max:2,step:.01,descriptionKey:"module.modelParams.temperatureDesc"},{key:"topP",labelKey:"module.modelParams.topP",min:0,max:1,step:.01,descriptionKey:"module.modelParams.topPDesc"},{key:"presencePenalty",labelKey:"module.modelParams.presencePenalty",min:0,max:1,step:.01,descriptionKey:"module.modelParams.presencePenaltyDesc",compatNoteKey:"module.modelParams.claudeCompat"},{key:"frequencyPenalty",labelKey:"module.modelParams.frequencyPenalty",min:0,max:1,step:.01,descriptionKey:"module.modelParams.frequencyPenaltyDesc",compatNoteKey:"module.modelParams.claudeCompat"}],c=e=>{let{isOpen:t,onClose:r,params:c,onSave:u,isLoading:m=!1}=e,{t:p}=(0,i.Bd)("chat"),[h,g]=(0,a.useState)({...c});(0,a.useEffect)(()=>{g({...c})},[c]),(0,a.useEffect)(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t]),(0,a.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&(e.preventDefault(),r())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,r]);let f=(0,a.useCallback)((e,t)=>{g(r=>({...r,[e]:t}))},[]),v=(0,a.useCallback)(()=>{u(h),r()},[h,u,r]),b=(0,a.useCallback)(()=>{g({...c}),r()},[c,r]),y=(0,a.useCallback)(()=>{g({...l})},[]),x=(0,a.useCallback)(e=>{e.target===e.currentTarget&&b()},[b]);if(!t||"u"<typeof document)return null;let w=(0,n.jsxs)("div",{className:"fixed inset-0 flex items-center justify-center p-4",style:{zIndex:1e3},onClick:x,role:"dialog","aria-modal":"true","aria-labelledby":"model-params-title",children:[(0,n.jsx)("div",{className:"absolute inset-0 chat-modal-overlay",style:{backgroundColor:"var(--v2-bg-overlay)"}}),(0,n.jsxs)("div",{className:"chat-modal-panel relative shadow-2xl rounded-xl w-full max-w-md flex flex-col max-h-[90vh]",style:{backgroundColor:"var(--v2-bg-card)"},children:[(0,n.jsxs)("div",{className:"flex justify-between items-center px-5 py-4 border-b border-v2-border-primary",children:[(0,n.jsx)("h2",{id:"model-params-title",className:"font-medium text-v2-text-primary",children:p("module.modelParams.title")}),(0,n.jsx)("button",{"aria-label":p("module.close"),onClick:b,className:"p-1 text-v2-text-tertiary hover:text-v2-text-primary hover:bg-v2-bg-hover rounded cursor-pointer transition-colors duration-200",children:(0,n.jsx)(s.A,{className:"w-5 h-5"})})]}),(0,n.jsx)("div",{className:"px-5 py-4 space-y-5 overflow-y-auto",children:m?(0,n.jsx)("div",{className:"flex justify-center py-8",children:(0,n.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2",style:{borderColor:"var(--v2-accent-primary)"},"aria-label":p("module.modelParams.loading")})}):(0,n.jsx)(n.Fragment,{children:d.map(e=>{var t,r,a,o;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,n.jsx)("label",{htmlFor:`param-${e.key}`,className:"text-sm font-medium text-v2-text-primary",children:p(e.labelKey)}),(0,n.jsx)("span",{className:"text-sm font-medium text-v2-text-primary","data-testid":`value-${e.key}`,children:h[e.key].toFixed(2)})]}),(0,n.jsx)("input",{id:`param-${e.key}`,type:"range",min:e.min,max:e.max,step:e.step,value:h[e.key],onChange:t=>f(e.key,Number(t.target.value)),className:"w-full h-2 rounded-lg appearance-none cursor-pointer accent-blue-500",style:{background:`linear-gradient(to right, #3b82f6 0%, #3b82f6 ${(t=h[e.key],(t-(r=e.min))/(e.max-r)*100)}%, var(--v2-bg-secondary, #e2e8f0) ${(a=h[e.key],(a-(o=e.min))/(e.max-o)*100)}%, var(--v2-bg-secondary, #e2e8f0) 100%)`},"aria-label":p(e.labelKey)}),(0,n.jsx)("p",{className:"mt-1 text-xs text-v2-text-secondary leading-relaxed",children:p(e.descriptionKey)}),e.compatNoteKey&&(0,n.jsx)("p",{className:"mt-0.5 text-xs text-amber-500 leading-relaxed","data-testid":`compat-${e.key}`,children:p(e.compatNoteKey)})]},e.key)})})}),!m&&(0,n.jsxs)("div",{className:"flex justify-between items-center px-5 py-3 border-t border-v2-border-primary",children:[(0,n.jsx)("button",{onClick:y,className:"px-3 py-2 text-sm text-v2-text-secondary hover:text-v2-text-primary hover:bg-v2-bg-hover rounded-lg cursor-pointer transition-colors duration-200",children:p("module.modelParams.restoreDefaults")}),(0,n.jsxs)("div",{className:"flex gap-3",children:[(0,n.jsx)("button",{onClick:b,className:"min-w-[72px] px-4 py-2 text-sm text-v2-text-primary border border-v2-border-primary rounded-lg hover:bg-v2-bg-hover cursor-pointer transition-colors duration-200",children:p("module.cancel")}),(0,n.jsx)("button",{onClick:v,className:"min-w-[72px] px-4 py-2 text-sm text-white bg-v2-gradient-primary hover:bg-v2-gradient-primary-hover shadow-v2-gradient rounded-lg cursor-pointer transition-v2-interactive duration-200",children:p("module.save")})]})]})]})]});return(0,o.createPortal)(w,document.body)}},85695:(e,t,r)=>{r.d(t,{Hr:()=>s,IL:()=>o,Nh:()=>n,No:()=>a});let n=!0,a=5e3,o=new Set(["qq.com","163.com","126.com","sohu.com","aliyun.com","139.com","189.cn","sina.com","icloud.com","outlook.com","hotmail.com","gmail.com","googlemail.com","gmx.com"]);function s(e){let t=e.lastIndexOf("@");if(t<=0||t>=e.length-1)return!1;let r=e.slice(t+1).trim().toLowerCase();return o.has(r)}},86517:(e,t,r)=>{r.d(t,{A:()=>f});var n=r(37876),a=r(14232),o=r(98477),s=r(24442),i=r(97445);function l(e){let{className:t}=e;return(0,n.jsxs)("svg",{className:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",children:[(0,n.jsx)("circle",{cx:"6",cy:"12",r:"1.5",fill:"currentColor",stroke:"none"}),(0,n.jsx)("path",{d:"M10 8.5a5 5 0 0 1 0 7"}),(0,n.jsx)("path",{d:"M13 5.5a9 9 0 0 1 0 13"}),(0,n.jsx)("path",{d:"M16 2.5a13 13 0 0 1 0 19"})]})}function d(e){let{className:t}=e;return(0,n.jsxs)("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:1.5,children:[(0,n.jsx)("rect",{x:"2",y:"4",width:"20",height:"14",rx:"2",strokeLinecap:"round",strokeLinejoin:"round"}),(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 8h.01M10 8h.01M14 8h.01M18 8h.01M6 12h.01M10 12h.01M14 12h.01M18 12h.01M8 16h8"})]})}var c=r(8779),u=r(97685);var m=r(77497),p=r(35529);function h(e){let{children:t,onClick:r,disabled:a=!1,icon:o,className:s="",...i}=e;return(0,n.jsxs)("button",{type:"button",disabled:a,onClick:r,className:`
1873        MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary
1874        compact text-v2-text-primary flex-shrink-0
1875        ${a?"opacity-50 cursor-not-allowed":"cursor-pointer"}
1876        ${s}
1877      `,style:{borderRadius:"6px"},...i,children:[o&&(0,n.jsx)("span",{className:"inline-block align-middle mr-1",children:o}),t]})}function g(e){let{checked:t,onChange:r,disabled:a=!1}=e;return(0,n.jsxs)(h,{onClick:r,disabled:a,icon:(0,n.jsxs)("svg",{className:"w-5 h-5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2.5,children:[(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2 8c3-3 5 3 8 0s5 3 8 0"}),(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2 16c3-3 5 3 8 0s5 3 8 0"})]}),children:["流式 ",t?"ON":"OFF"]})}let f=(0,a.memo)(function(e){let{value:t,onChange:r,onSend:l,disabled:d,placeholder:c,showAttachment:u=!0,isStreaming:f=!1,onCancel:v,showStreamToggle:b=!1,isStreamingEnabled:y=!0,onToggleStreaming:x,showModelSelector:w=!1,characterId:k,recommendedModelId:S,onModelChange:C,onUserModelSelect:I,initialModels:j,onModelSelectorClick:M,lockedModelId:N,preferredDefaultModelId:E,showChatHistory:_=!1,onOpenChatHistory:T,isLoading:P=!1,shortcutCommands:R=[],showHideButtonsToggle:A=!1,onQuickStart:L,showVoiceButton:O=!0,showActionPanelToggle:F=!1,isActionPanelOpen:$=!1,onToggleActionPanel:D,onModClick:B,onOpenMemorySettings:q}=e,{t:H}=(0,i.Bd)("chat"),z=(0,a.useRef)(null),U=(0,a.useRef)(!1),W=(0,a.useRef)(null),[K,V]=(0,a.useState)(!1),[G,Q]=(0,a.useState)(!1);(0,a.useEffect)(()=>{G&&Q(!1)},[G]);let[Y,X]=(0,a.useState)(!1),[J,Z]=(0,a.useState)(!1),{isMobile:ee,isHydrated:et}=(0,m.X)(),er=(0,a.useRef)(null);(0,a.useEffect)(()=>{requestAnimationFrame(()=>{(()=>{let e=W.current,t=z.current;if(!e||!t)return;let r=e.offsetWidth+24;t.style.paddingRight=`${r}px`})()})},[t,f]),(0,a.useEffect)(()=>
1877{if(!et)return;let e=er.current;if(er.current=G,!function(e){let{prevVoiceMode:t,isVoiceMode:r,isMobile:n}=e;return!0===t&&!r||null===t&&!n&&!r}({prevVoiceMode:e,isVoiceMode:G,isMobile:ee}))return;let t=setTimeout(()=>{var e;return null==(e=z.current)?void 0:e.focus()},100);return()=>clearTimeout(t)},[et,ee,G]),(0,a.useLayoutEffect)(()=>{let e=z.current;if(!e)return;e.style.height="auto";let t=e.scrollHeight;t<=34?(e.style.height="34px",e.style.overflowY="hidden",Z(!1)):t<=139?(e.style.height=t+"px",e.style.overflowY="hidden",Z(t>44)):(e.style.height="139px",e.style.overflowY="auto",Z(!0))},[t]),(0,a.useEffect)(()=>{let e=()=>{let e=z.current;if(!e)return;e.style.height="auto";let t=e.scrollHeight;t<=34?(e.style.height="34px",e.style.overflowY="hidden"):t<=139?(e.style.height=t+"px",e.style.overflowY="hidden"):(e.style.height="139px",e.style.overflowY="auto")};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},[]);let en=(0,a.useCallback)(e=>{r(e.target.value)},[r]),ea=(0,a.useCallback)(()=>{t.trim()&&!d&&l()},[t,d,l]),eo=(0,a.useCallback)(()=>{U.current=!0},[]),es=(0,a.useCallback)(()=>{U.current=!1},[]),ei=(0,a.useCallback)(e=>{"Enter"!==e.key||e.shiftKey||!ee&&(U.current||(e.preventDefault(),ea()))},[ea,ee]),el=(0,a.useCallback)(()=>{v&&v()},[v]),ed=(0,a.useCallback)(()=>{x&&x()},[x]),ec=(0,a.useCallback)(e=>{var t;r(e),null==(t=z.current)||t.focus()},[r]),eu=!t.trim()||d,em=d&&!t.trim()&&!f;return(0,n.jsxs)(n.Fragment,{children:[Y&&"u">typeof document&&(0,o.createPortal)((0,n.jsxs)("div",{className:"fixed inset-0 flex flex-col bg-v2-bg-primary",style:{touchAction:"manipulation",zIndex:9999},children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-v2-border-primary flex-shrink-0",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>X(!1),className:"flex items-center gap-1.5 text-sm text-v2-text-tertiary hover:text-v2-text-primary cursor-pointer compact","aria-label":H("module.input.exitFullscreen"),children:[(0,n.jsx)("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 4v5H4m11 11v-5h5M4 15h5v5m11-11h-5V4"})}),H("module.input.collapse")]}),(0,n.jsx)("span",{className:"text-sm text-v2-text-tertiary",children:H("module.input.characterCount",{count:t.length})}),(0,n.jsx)("button",{type:"button",onClick:()=>{X(!1),eu||ea()},disabled:eu,className:`text-sm font-medium px-4 py-1.5 rounded-lg cursor-pointer compact ${eu?"text-v2-text-disabled bg-v2-bg-secondary":"text-v2-text-inverse bg-v2-accent-primary hover:bg-v2-accent-hover active:bg-v2-accent-active"}`,"aria-label":H("module.sendMessage"),children:H("module.input.send")})]}),(0,n.jsx)("textarea",{autoFocus:!0,value:t,onChange:e=>r(e.target.value),onCompositionStart:()=>{U.current=!0},onCompositionEnd:()=>{U.current=!1},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||U.current||!ee&&(e.preventDefault(),X(!1),eu||ea())},placeholder:c,className:"flex-1 w-full p-4 text-base text-v2-text-primary outline-none resize-none leading-relaxed bg-transparent",style:{scrollbarWidth:"thin",scrollbarColor:"rgba(156, 163, 175, 0.3) transparent",WebkitOverflowScrolling:"touch"},"aria-label":H("module.input.fullscreenEditMessage")})]}),document.body),(b||w||A||Array.isArray(R)&&R.length>0)&&(0,n.jsxs)("div",{id:"ai-mod-button2",className:"relative z-[2] flex items-center gap-1.5 md:gap-2 pb-1.5 md:pb-2 overflow-x-auto overscroll-x-contain pl-0.5 pr-1.5 md:pr-2 [scrollbar-gutter:stable]",children:[!K&&(0,n.jsxs)(n.Fragment,{children:[B&&(0,n.jsx)(h,{onClick:B,icon:(0,n.jsxs)("svg",{className:"w-4 h-4 md:w-5 md:h-5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),(0,n.jsx)("text",{x:"12",y:"18",textAnchor:"middle",fontSize:"6",fill:"currentColor",stroke:"none",fontWeight:"bold",children:"MOD"})]}),children:"Mod"}),q&&(0,n.jsx)(h,{onClick:q,icon:(0,n.jsx)("svg",{className:"w-4 h-4 md:w-5 md:h-5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25Zm.75-12h9v9h-9v-9Z"})}),children:H("module.input.memory")}),b&&void 0!==y&&x&&(0,n.jsx)(g,{checked:y,onChange:ed,disabled:P}),L?(0,n.jsx)(h,{onClick:()=>{(0,p.HZ)("chat_quick_start_click",k?{character_id:k}:{}),L()},disabled:P,icon:(0,n.jsx)("svg",{className:"w-4 h-4 md:w-5 md:h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 01-2.448-2.448 14.9 14.9 0 01.06-.312m-2.24 2.39a4.493 4.493 0 00-1.757 4.306 4.493 4.493 0 004.306-1.758M16.5 9a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"})}),children:H("module.input.quickStart")}):null,w&&(0,n.jsx)(s.A,{characterId:k,recommendedModelId:S,onModelChange:C,onUserModelSelect:I,disabled:d||P,initialModels:j,variant:"dialog",id:"ai-model-selector","data-tour":"model-selector",onModelSelectorClick:M,lockedModelId:N,preferredDefaultModelId:E})]}),A&&(0,n.jsx)(h,{onClick:()=>V(!K),icon:(0,n.jsx)("svg",{className:"w-4 h-4 md:w-5 md:h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M11 17h10v-2H11zm-8-5 4 4V8zm0 9h18v-2H3zM3 3v2h18V3zm8 6h10V7H11zm0 4h10v-2H11z"})}),children:H(K?"module.input.showButtons":"module.input.hideButtons")}),Array.isArray(R)&&R.length>0&&R.map((e,t)=>(0,n.jsx)("button",{type:"button",onClick:()=>ec(e.command_text),disabled:d||P,className:"MuiButtonBase-root MuiButton-root MuiButton-outlined MuiButton-outlinedPrimary MuiButton-sizeSmall MuiButton-outlinedSizeSmall MuiButton-colorPrimary flex-shrink-0",style:{borderRadius:"6px"},children:e.label},t))]}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5 md:gap-2",children:[!1,(0,n.jsxs)("div",{className:"bg-v2-bg-card border-[1.5px] border-v2-border-primary relative rounded-lg md:rounded-xl flex-1","data-tour":"chat-compose",children:[(0,n.jsxs)("div",{className:"w-full overflow-y-auto p-1.5 md:p-[5.5px] max-h-[150px]",children:[!1,(0,n.jsx)("textarea",{id:"ai-chat-input",ref:z,value:t,onChange:en,onKeyDown:ei,onCompositionStart:eo,onCompositionEnd:es,placeholder:c,className:"rc-textarea block w-full pl-1.5 md:pl-2 py-1.5 md:py-[7px] leading-[1.2] md:leading-5 text-sm text-v2-text-primary outline-none appearance-none resize-none ",rows:1,style:{minHeight:"34px",transition:"height 0.15s ease-out",scrollbarWidth:"thin",scrollbarColor:"rgba(156, 163, 175, 0.3) transparent",WebkitOverflowScrolling:"touch"},"aria-label":"Message input"})]}),J&&!Y&&(0,n.jsx)("button",{type:"button",onClick:()=>{(0,p.HZ)("chat_input_fullscreen_open",{}),X(!0)},className:"absolute top-2 right-2 z-20 flex items-center justify-center w-6 h-6 rounded bg-v2-bg-secondary/80 hover:bg-v2-bg-tertiary text-v2-text-tertiary hover:text-v2-text-primary transition-colors duration-150 cursor-pointer compact","aria-label":H("module.input.fullscreenEdit"),title:H("module.input.fullscreenEdit"),children:(0,n.jsx)("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5v-4m0 4h-4m4 0l-5-5"})})}),(0,n.jsxs)("div",{ref:W,className:"absolute bottom-1.5 md:bottom-2 right-1.5 md:right-2 flex items-center h-7 md:h-8 bg-v2-bg-card/85 backdrop-blur-sm rounded-lg z-10 border border-v2-border-primary/30 ",children:[(0,n.jsx)("div",{className:"flex items-center px-0.5 md:px-1 h-[18px] md:h-5 rounded-md bg-v2-bg-secondary text-[11px] md:text-xs font-medium text-v2-text-tertiary",children:t.length}),(0,n.jsx)("div",{className:"mx-1 w-[1px] h-4 bg-v2-border-primary/40"}),(0,n.jsx)("div",{className:"inline-block",children:f?(0,n.jsx)("button",{onClick:el,className:"flex items-center justify-center rounded-lg transition-v2-interactive duration-200 active:scale-95 compact",style:{width:ee?30:32,height:ee?30:32,minWidth:ee?30:32,minHeight:ee?30:32,padding:0,backgroundColor:"var(--v2-state-error-bg)",color:"var(--v2-state-error)"},"aria-label":H("module.input.cancelReceiving"),title:H("module.input.cancelReceiving"),children:(0,n.jsx)("svg",{className:"w-4 h-4 sm:w-5 sm:h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2.5,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})}):(0,n.jsx)("div",{id:"ai-send-button",onClick:eu?void 0:ea,className:"cursor-pointer group flex items-center justify-center w-7 h-7 md:w-8 md:h-8 rounded-lg hover:bg-v2-info-bg compact",role:"button",tabIndex:eu?-1:0,style:{cursor:eu?"not-allowed":"pointer"},"aria-label":H(em?"module.sendingMessage":"module.sendMessage"),"aria-disabled":eu,title:H(em?"module.sendingMessage":"module.input.send"),onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||eu||(e.preventDefault(),ea())},children:em?(0,n.jsxs)("svg",{className:"w-4 h-4 md:w-5 md:h-5 animate-spin text-v2-text-disabled",fill:"none",viewBox:"0 0 24 24",children:[(0,n.jsx)("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),(0,n.jsx)("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}):(0,n.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:`w-4 h-4 md:w-5 md:h-5 transition-colors ${t.trim()?"text-v2-text-link":"text-v2-text-disabled"} group-hover:text-v2-text-link-hover`,"data-icon":"Send03","aria-hidden":"true",children:(0,n.jsx)("g",{id:"send-03",children:(0,n.jsx)("path",{id:"Solid",d:"M18.4385 10.5535C18.6111 10.2043 18.6111 9.79465 18.4385 9.44548C18.2865 9.13803 18.0197 8.97682 17.8815 8.89905C17.7327 8.81532 17.542 8.72955 17.3519 8.64403L3.36539 2.35014C3.17087 2.26257 2.97694 2.17526 2.81335 2.11859C2.66315 2.06656 2.36076 1.97151 2.02596 2.06467C1.64761 2.16994 1.34073 2.4469 1.19734 2.81251C1.07045 3.13604 1.13411 3.44656 1.17051 3.60129C1.21017 3.76983 1.2772
18771 3.9717 1.34445 4.17418L2.69818 8.25278C2.80718 8.58118 2.86168 8.74537 2.96302 8.86678C3.05252 8.97399 3.16752 9.05699 3.29746 9.10816C3.44462 9.1661 3.61762 9.1661 3.96363 9.1661H10.0001C10.4603 9.1661 10.8334 9.53919 10.8334 9.99943C10.8334 10.4597 10.4603 10.8328 10.0001 10.8328H3.97939C3.63425 10.8328 3.46168 10.8328 3.3148 10.8905C3.18508 10.9414 3.07022 11.0241 2.98072 11.1309C2.87937 11.2519 2.82459 11.4155 2.71502 11.7428L1.3504 15.8191C1.28243 16.0221 1.21472 16.2242 1.17455 16.3929C1.13773 16.5476 1.07301 16.8587 1.19956 17.1831C1.34245 17.5493 1.64936 17.827 2.02806 17.9327C2.36342 18.0263 2.6665 17.9309 2.81674 17.8789C2.98066 17.8221 3.17507 17.7346 3.37023 17.6467L17.3518 11.355C17.542 11.2695 17.7327 11.1837 17.8815 11.0999C18.0197 11.0222 18.2865 10.861 18.4385 10.5535Z",fill:"currentColor"})})})})})]})]}),F&&(0,n.jsx)("button",{type:"button",onClick:D,"data-tour":"action-panel-toggle",className:"md:hidden flex-shrink-0 flex items-center justify-center h-8 min-w-8 px-1 rounded-full cursor-pointer transition-colors duration-200 bg-v2-bg-secondary text-v2-text-tertiary hover:bg-v2-bg-tertiary hover:text-v2-text-primary active:bg-v2-bg-quaternary motion-reduce:transition-none text-[11px] font-medium","aria-label":H($?"module.input.collapseActionPanel":"module.input.expandActionPanel"),"aria-expanded":$,children:$?(0,n.jsx)("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})}):(0,n.jsx)("span",{children:H("module.input.more")})})]})]})},(e,t)=>e.value===t.value&&e.disabled===t.disabled&&e.placeholder===t.placeholder&&e.showAttachment===t.showAttachment&&e.isStreaming===t.isStreaming&&e.showStreamToggle===t.showStreamToggle&&e.isStreamingEnabled===t.isStreamingEnabled&&e.showModelSelector===t.showModelSelector&&e.showChatHistory===t.showChatHistory&&e.isLoading===t.isLoading&&e.characterId===t.characterId&&e.recommendedModelId===t.recommendedModelId&&e.shortcutCommands===t.shortcutCommands&&e.onChange===t.onChange&&e.onSend===t.onSend&&e.onCancel===t.onCancel&&e.onToggleStreaming===t.onToggleStreaming&&e.onModelChange===t.onModelChange&&e.onModelSelectorClick===t.onModelSelectorClick&&e.lockedModelId===t.lockedModelId&&e.preferredDefaultModelId===t.preferredDefaultModelId&&e.onOpenChatHistory===t.onOpenChatHistory&&e.onQuickStart===t.onQuickStart&&e.showVoiceButton===t.showVoiceButton&&e.onModClick===t.onModClick&&e.onOpenMemorySettings===t.onOpenMemorySettings&&e.showActionPanelToggle===t.showActionPanelToggle&&e.isActionPanelOpen===t.isActionPanelOpen&&e.onToggleActionPanel===t.onToggleActionPanel&&!0)},90777:(e,t,r)=>{r.d(t,{EU:()=>n,F7:()=>m,Oi:()=>c,_W:()=>u});let n=["off","low","medium","high"],a="chat_thinking_level_v1",o=new Set(["官方渠道","openrouter"]),s=new Set(["破限","破限渠道"]),i=new Set(["00f305c4-a63d-4654-8e28-92b25d0b95eb"]),l=new Set(["8f4b43ab-1fe7-4c96-9d8c-1c5fca2eea14","aa8931b2-f637-43ed-8be9-10e73420c251","69640e57-6c66-4c87-bb4b-74433c5babaa","7b1360fc-fd6e-47a4-84e4-d54b84b2ac4e","fbfb20a5-0d59-40b3-b863-b83d652dd02f","fbfb20a5-0d59-40b3-b863-b83d652dd02e","5c554ff9-2624-4d19-a33d-86ac934bdaa0","c43b5795-a1e8-4f33-be71-c3331a4befbd","d6d239fe-6f77-40b4-b2a2-45371ca5a047","c14fe79e-fd99-4d0f-a18a-8e0797efeeea","f42d5d14-0880-41ee-a1fa-bcd7bca3691c","d0c550cf-4f46-4aa5-b1cc-d0ab04833b63"]),d=new Set(["deepseek/deepseek-v4-flash","deepseek/deepseek-v4-flash-0731","deepseek/deepseek-v4-pro","deepseek/deepseek-v4-pro-0813","deepseek/deepseek-v4.1-flash","google/gemini-3.1-flash-lite","google/gemini-3.1-flash-lite-preview","mistralai/mistral-medium-3-5","openai/gpt-5.6-luna","openai/gpt-6-luna","qwen/qwen3.8-27b"]);function c(e){var t;if(!e)return"adjustable";if((t=e).id&&i.has(t.id)||"google/gemini-3.7-flash"===(t.name??"").trim().toLowerCase())return"unsupported";let r=(e.provider_name??"").trim();if(!r)return"adjustable";if(s.has(r))return"forced_off";let n=r.toLowerCase();return o.has(r)||o.has(n)?("openrouter"===n||"openrouter"===r)&&!function(e){if(e.id&&l.has(e.id))return!0;let t=(e.name??"").trim().toLowerCase();return d.has(t)}(e)?"unsupported":"adjustable":n.includes("redpill")?"forced_off":"unsupported"}function u(){try{let e=localStorage.getItem(a);if("string"==typeof e&&n.includes(e))return e}catch{}return"off"}function m(e){try{localStorage.setItem(a,e)}catch{}}},92789:(e,t,r)=>{r.d(t,{A:()=>d});var n=r(37876),a=r(14232),o=r(98477),s=r(67452),i=r(53731),l=r(97445);let d=(0,a.memo)(function(e){let{questions:t,onSelectQuestion:r,disabled:d=!1,tourKeepOpen:c}=e,{t:u}=(0,l.Bd)("chat"),[m,p]=(0,a.useState)(!1),h=(0,a.useRef)(null),g=(0,a.useRef)(void 0),[f,v]=(0,a.useState)({}),b=(0,a.useCallback)(()=>{let e=h.current;if(!e)return;let t=e.getBoundingClientRect(),r=window.innerWidth,n=Math.min(r-32,520),a=t.left+t.width/2-n/2;a=Math.max(16,Math.min(a,r-n-16)),v({position:"fixed",top:t.bottom+8,left:a,width:n,zIndex:9999})},[]),y=(0,a.useCallback)(()=>{d||p(e=>(e||b(),!e))},[d,b]);(0,a.useEffect)(()=>{!0===c?(p(!0),b()):!1===c&&!0===g.current&&p(!1),g.current=c},[c,b]),(0,a.useEffect)(()=>
1877{if(!m||!0===c)return;let e=e=>{var t;let r=e.target;null!=(t=h.current)&&t.contains(r)||p(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e,{passive:!0}),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}},[m,c]),(0,a.useEffect)(()=>{if(!m)return;let e=()=>b();return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[m,b]);let x=(0,a.useCallback)(e=>{p(!1),(0,a.startTransition)(()=>{r(e)})},[r]);if(!Array.isArray(t)||0===t.length)return null;let w=m&&(0,n.jsx)("div",{style:f,className:"max-h-[60vh] overflow-y-auto rounded-xl shadow-lg border border-v2-border-primary scrollbar-hide mobile-scroll",onMouseDown:e=>e.stopPropagation(),onTouchStart:e=>e.stopPropagation(),children:(0,n.jsxs)("div",{className:"p-2",style:{background:"linear-gradient(to bottom right, var(--v2-sidebar-gradient-from), var(--v2-sidebar-gradient-via), var(--v2-sidebar-gradient-to))"},children:[(0,n.jsx)("div",{className:"text-xs text-v2-text-tertiary px-3 py-2 mb-1",children:u("module.clickQuestionToSend")}),t.map((e,t)=>(0,n.jsxs)("div",{children:[t>0&&(0,n.jsx)("div",{className:"mx-4 border-t border-dashed border-v2-border-primary"}),(0,n.jsx)("button",{type:"button","data-tour":0===t?"suggested-question-0":void 0,onClick:()=>x(e),className:"w-full text-left px-3 py-3 text-sm text-v2-text-primary hover:bg-v2-bg-hover transition-colors rounded-lg",children:(0,n.jsxs)("div",{className:"flex items-start gap-2",children:[(0,n.jsx)("span",{className:"flex-shrink-0 w-5 h-5 flex items-center justify-center bg-v2-accent text-white text-xs rounded-full",children:t+1}),(0,n.jsx)("span",{children:e})]})})]},t))]})});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{id:"ai-mod-button","data-tour":"opening-statement-select",ref:h,onClick:y,disabled:d,className:"flex items-center gap-1.5 sm:gap-2 px-2.5 sm:px-4 py-1.5 sm:py-2 rounded-xl border border-v2-border-primary bg-v2-bg-card text-xs sm:text-sm text-v2-text-secondary hover:bg-v2-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed shadow-sm","aria-label":u("module.openingStatementSelect"),"aria-expanded":m,children:[(0,n.jsx)(s.A,{className:"w-3.5 h-3.5 sm:w-4 sm:h-4"}),(0,n.jsx)("span",{children:u("module.openingStatementSelect")}),(0,n.jsx)(i.A,{className:`w-3.5 h-3.5 sm:w-4 sm:h-4 transition-transform ${m?"rotate-180":""}`})]}),"u">typeof document&&w?(0,o.createPortal)(w,document.body):null]})})},96959:(e,t,r)=>{r.d(t,{Bx:()=>o,IS:()=>a,S2:()=>s,p0:()=>n});let n=20;function a(e){return"number"==typeof e.total_calls&&Number.isFinite(e.total_calls)&&e.total_calls>=0?e.total_calls:(e.success_calls??0)+(e.abnormal_calls??0)+(e.error_calls??0)}function o(e){if(!e)return!1;let t=e.success_rate;return!(null==t||!Number.isFinite(t)||0>=a(e))&&t>=n}function s(e){if(!e||0>=a(e))return!1;let t=e.success_rate;return null!=t&&!!Number.isFinite(t)&&t<n}}}]);

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.