aitu-app 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/assets/{CanvasAudioPlayer-cp00LGgR.js → CanvasAudioPlayer-C_USx5uz.js} +1 -1
- package/assets/{ComicCreator-CAmJF3JX.js → ComicCreator-qGQaXp7h.js} +2 -2
- package/assets/DeferredAIInputBar-CPykEFYX.css +1 -0
- package/assets/DeferredAIInputBar-LmZGQCLT.js +107 -0
- package/assets/{DrawnixDeferredFeatures-DIznfzB7.js → DrawnixDeferredFeatures-Hy_-quZ1.js} +1 -1
- package/assets/{KnowledgeBaseContent-CxilHI-j.js → KnowledgeBaseContent-DSKNA70H.js} +8 -8
- package/assets/{MVCreator-ZrinzYPm.js → MVCreator-C3iClDLU.js} +12 -10
- package/assets/{ModelBenchmarkWorkbench-DbesnX6E.js → ModelBenchmarkWorkbench-BxwdcZ0q.js} +2 -2
- package/assets/{MusicAnalyzer-BzXD1qYH.js → MusicAnalyzer-f_T6_YPJ.js} +2 -2
- package/assets/{ParametersDropdown-DBQCDv3g.js → ParametersDropdown-CTSN3ClD.js} +1 -1
- package/assets/{PromptHistoryTool-CUCIE0Ld.js → PromptHistoryTool-DV-8RSdz.js} +2 -2
- package/assets/{ResizableDivider-CdfJF8GW.js → ResizableDivider-CUQBmPpx.js} +1 -1
- package/assets/TaskQueuePanel-CtjY1W4t.js +1 -0
- package/assets/{VideoAnalyzer-wtxorxD3.js → VideoAnalyzer-BBVBSONO.js} +3 -3
- package/assets/{VideoAnalyzer-C90c84gt.js → VideoAnalyzer-BmAjGvN8.js} +1 -1
- package/assets/{ai-chat-B5qFht2H.js → ai-chat-BO5vbKZW.js} +5 -5
- package/assets/{ai-generation-preferences-service-CvWbMxv3.js → ai-generation-preferences-service-ZmPTR-wz.js} +1 -1
- package/assets/{batch-image-generation-Bo3h_Eop.js → batch-image-generation-BLBSv-t6.js} +6 -6
- package/assets/{diagram-engines-C9ewAq_o.js → diagram-engines-CSzW_-6N.js} +2 -2
- package/assets/{editor-engines-CvxZrFyB.js → editor-engines-C573k8UM.js} +1 -1
- package/assets/{index-Dw6PsLbq.js → index-BT-rxxI3.js} +2 -2
- package/assets/{index-BCqdmg38.js → index-Dw_8lcIi.js} +1 -1
- package/assets/{index-BSlnQdcy.js → index-IHNaVKGH.js} +1 -1
- package/assets/{index-CjBeKr1R.js → index-N8asYyaz.js} +1 -1
- package/assets/{index-CylhK_f5.js → index-jxwTv7c1.js} +1 -1
- package/assets/{index.es-BKVY-J2g.js → index.es-BLXvmueB.js} +1 -1
- package/assets/{jspdf.es.min-BM9ML7Zw.js → jspdf.es.min-DxWvbkh4.js} +2 -2
- package/assets/{markdown-to-drawnix-COS1iVyq.js → markdown-to-drawnix-BVFYnimo.js} +2 -2
- package/assets/{mermaid-to-drawnix-oplawQO0.js → mermaid-to-drawnix-nGs2aeZ7.js} +2 -2
- package/assets/{model-benchmark-launcher-DD4vN0Ca.js → model-benchmark-launcher-DAWoSySc.js} +1 -1
- package/assets/{photo-wall-splitter-CbKqFOIV.js → photo-wall-splitter-CCUURzGk.js} +1 -1
- package/assets/{prompt-utils-7t-jk6n6.js → prompt-utils-MF_LILNU.js} +1 -1
- package/assets/{settings-dialog-D2yEWl8J.js → settings-dialog-Ac7R-_CG.js} +1 -1
- package/assets/{skill-dsl-parser-C-utRXFg.js → skill-dsl-parser-Do9iAYbB.js} +1 -1
- package/assets/{startup-app-DxX-P1pm.js → startup-app-eD_rQhSh.js} +531 -527
- package/assets/{task-sync-Dr7Nza2v.js → task-sync-BJVOunRa.js} +1 -1
- package/assets/{tool-windows-BIjc1zsU.js → tool-windows-CmgL3thd.js} +17 -17
- package/assets/ttd-dialog-B12v0SVY.js +6 -0
- package/assets/{ttd-dialog-submit-shortcut-yUk15rsg.js → ttd-dialog-submit-shortcut-C2lJygXA.js} +1 -1
- package/assets/useCharacters-BAKE4TeJ.js +2 -0
- package/assets/{useMediaViewer-CEvHYype.js → useMediaViewer-BGw5RkSR.js} +1 -1
- package/assets/{useWorkflowSubmission-Cxhdsl2b.js → useWorkflowSubmission-iAPmKke9.js} +6 -6
- package/assets/{video-recovery-service-CB8hyRf5.js → video-recovery-service-CW7bErP2.js} +1 -1
- package/assets/{workflow-generation-utils-JoRODaP7.js → workflow-generation-utils-DhIVnOHO.js} +2 -2
- package/assets/workflow-submission-service-Ce0cpj8E.js +4 -0
- package/changelog.json +18 -13
- package/idle-prefetch-manifest.json +306 -306
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +6 -6
- package/sw.js +1 -1
- package/version.json +6 -3
- package/assets/DeferredAIInputBar-CzMATNng.js +0 -107
- package/assets/DeferredAIInputBar-D_e6qG1y.css +0 -1
- package/assets/TaskQueuePanel-oLG4DAzJ.js +0 -1
- package/assets/ttd-dialog-CNSSc4wk.js +0 -6
- package/assets/useCharacters-DzXMuknh.js +0 -2
- package/assets/workflow-submission-service-BIGFW4s4.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jy as Ks,jz as Ve,ac as St,r as u,ae as Ct,j as e,i0 as wt,i1 as Et,X as Bs,aH as Gs,jA as Fs,c4 as Ws,aK as Zs,v as At,E as J,jB as Hs,y as kt,jC as Dt,jD as Tt,gn as Ms,M as Y,hN as Ot,jE as Ys,ck as Ut,ee as Rt,at as zt,a6 as z,jF as ie,ag as Oe,a8 as Ie,aX as Ee,bn as fe,bp as ce,bb as ge,bo as me,aC as Ue,am as T,dp as Lt,dq as Ps,jG as Vt,jH as $t,jI as Kt,jJ as Bt,eH as Gt,jK as ke,jL as _e,ie as Ss,u as Cs,$ as Qe,jM as Re,jN as Ft,jO as Wt,N as Zt,jP as Ht,dv as Yt,jQ as W,al as he,a9 as Qt,jR as Xt,aA as qt,jS as Jt,jT as ei,jU as si,ah as ti,cc as ii,cb as ai}from"./startup-app-DxX-P1pm.js";import{jV as Yi,jW as Qi}from"./startup-app-DxX-P1pm.js";import{y as ni,z as ze,W as oi,B as Me,E as Xe}from"./ai-chat-B5qFht2H.js";import{T as li}from"./tool-windows-BIjc1zsU.js";import{o as di}from"./model-benchmark-launcher-DD4vN0Ca.js";import"./startup-runtime-DTmhLESk.js";const ws={all:"全部",image:"图片",video:"视频",audio:"音频",text:"文本"},ri={image:"图片",video:"视频",audio:"音频",text:"文本"},ci={image:"图",video:"视",audio:"音",text:"文"},Es=["text","image","video","audio"];function gi(t,a){const n=a.trim().toLowerCase();return n?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,Ve(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(n)):!0}function mi(t){return St(t)}function As(t,a){const n=new Map;for(const b of t){const y=n.get(b.vendor)||{vendor:b.vendor,models:[],counts:{image:0,video:0,audio:0,text:0},selectedCount:0};y.models.push(b),y.counts[b.type]+=1,a.has(b.id)&&(y.selectedCount+=1),n.set(b.vendor,y)}const g=new Map(Ks.map((b,y)=>[b,y]));return Array.from(n.values()).sort((b,y)=>{const K=g.get(b.vendor)??Number.MAX_SAFE_INTEGER,Q=g.get(y.vendor)??Number.MAX_SAFE_INTEGER;return K!==Q?K-Q:y.models.length-b.models.length})}function ui(t){return["image","video","audio","text"].filter(a=>t.counts[a]>0).map(a=>({type:a,models:mi(t.models.filter(n=>n.type===a))})).sort((a,n)=>n.models.length!==a.models.length?n.models.length-a.models.length:Es.indexOf(a.type)-Es.indexOf(n.type))}const _i=({open:t,container:a,models:n,selectedModelIds:g,onClose:b,onConfirm:y,onTestModel:K})=>{const[Q,pe]=u.useState(""),[ee,ye]=u.useState("all"),[B,P]=u.useState(g),[k,$]=u.useState({});u.useEffect(()=>{var U,H;if(!t)return;pe(""),ye("all"),P(g);const r=new Set(g),M=As(n,r),j=((U=M.find(G=>G.selectedCount>0))==null?void 0:U.vendor)||((H=M[0])==null?void 0:H.vendor)||null,A={};M.forEach(G=>{A[G.vendor]=G.vendor===j}),$(A)},[n,t,g]);const ae=u.useMemo(()=>({all:n.length,image:n.filter(r=>r.type==="image").length,video:n.filter(r=>r.type==="video").length,audio:n.filter(r=>r.type==="audio").length,text:n.filter(r=>r.type==="text").length}),[n]),F=u.useMemo(()=>{const r=Q.trim(),M=ee==="all"?n:n.filter(j=>j.type===ee);return r?M.filter(j=>gi(j,r)):M},[ee,n,Q]),f=u.useMemo(()=>new Set(B),[B]),O=u.useMemo(()=>As(F,f),[f,F]),w=B.length,Z=u.useMemo(()=>({image:n.filter(r=>r.type==="image"&&f.has(r.id)).length,video:n.filter(r=>r.type==="video"&&f.has(r.id)).length,text:n.filter(r=>r.type==="text"&&f.has(r.id)).length}),[n,f]),ne=F.length>0&&F.every(r=>f.has(r.id)),se=u.useMemo(()=>n.filter(r=>Ct(r.id)).map(r=>r.id),[n]),Pe=se.length>0&&se.every(r=>f.has(r));u.useEffect(()=>{O.length===0||O.some(j=>k[j.vendor])||!Object.values(k).some(Boolean)||$(O.reduce((j,A,U)=>(j[A.vendor]=U===0,j),{}))},[k,O]);const Se=r=>{P(M=>M.includes(r)?M.filter(j=>j!==r):[...M,r])},be=()=>{const r=F.map(j=>j.id),M=r.every(j=>f.has(j));P(j=>M?j.filter(A=>!r.includes(A)):Array.from(new Set([...j,...r])))},Ce=()=>{P(r=>Array.from(new Set([...r,...se])))},oe=r=>{$(M=>{const j=!M[r],A={};return O.forEach(U=>{A[U.vendor]=U.vendor===r?j:!1}),A})};return e.jsx(wt,{open:t,onOpenChange:r=>!r&&b(),children:e.jsxs(Et,{className:"model-discovery-dialog",container:a,"data-testid":"model-discovery-dialog",children:[e.jsxs("div",{className:"model-discovery-dialog__header",children:[e.jsxs("div",{className:"model-discovery-dialog__headline",children:[e.jsx("h3",{className:"model-discovery-dialog__title",children:"获取模型"}),e.jsxs("div",{className:"model-discovery-dialog__header-stats",children:[e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["已发现 ",n.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["品牌 ",O.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill model-discovery-dialog__header-pill--accent",children:["已选 ",w]})]})]}),e.jsx("button",{type:"button",className:"model-discovery-dialog__close",onClick:b,"aria-label":"关闭",children:e.jsx(Bs,{size:18})})]}),e.jsx("div",{className:"model-discovery-dialog__toolbar",children:e.jsxs("label",{className:"model-discovery-dialog__search",children:[e.jsx(Gs,{size:16}),e.jsx("input",{type:"text",value:Q,onChange:r=>pe(r.target.value),placeholder:"搜索模型名称、ID 或品牌"})]})}),e.jsx("div",{className:"model-discovery-dialog__type-tabs",children:Object.keys(ws).map(r=>{const M=ee===r;return e.jsxs("button",{type:"button",className:`model-discovery-dialog__type-tab ${M?"model-discovery-dialog__type-tab--active":""}`,onClick:()=>ye(r),children:[e.jsx("span",{children:ws[r]}),e.jsx("span",{className:"model-discovery-dialog__type-tab-count",children:ae[r]})]},r)})}),e.jsx("div",{className:"model-discovery-dialog__body",children:O.length===0?e.jsx("div",{className:"model-discovery-dialog__empty",children:Q.trim()?"没有匹配的模型":"暂无模型"}):e.jsx("div",{className:"model-discovery-dialog__group-list",children:O.map(r=>{const M=Fs(r.vendor),j=ui(r),A=!!k[r.vendor];return e.jsxs("section",{className:`model-discovery-dialog__vendor-group ${A?"model-discovery-dialog__vendor-group--expanded":""}`,style:{"--vendor-accent":M.accent,"--vendor-surface":M.surface,"--vendor-border":M.border},children:[e.jsxs("button",{type:"button",className:"model-discovery-dialog__vendor-header",onClick:()=>oe(r.vendor),children:[e.jsxs("div",{className:"model-discovery-dialog__vendor-main",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-logo-shell",children:e.jsx(Ws,{vendor:r.vendor,size:22})}),e.jsxs("div",{className:"model-discovery-dialog__vendor-copy",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-name",children:Ve(r.vendor)}),e.jsx("div",{className:"model-discovery-dialog__vendor-meta",children:j.map(({type:U,models:H})=>e.jsxs("span",{className:"model-discovery-dialog__vendor-meta-pill",children:[ci[U]," ",H.length]},`${r.vendor}-${U}`))})]})]}),e.jsx("span",{className:"model-discovery-dialog__vendor-spacer"}),e.jsxs("div",{className:"model-discovery-dialog__vendor-side",children:[r.selectedCount>0?e.jsxs("span",{className:"model-discovery-dialog__vendor-selected",children:["已选 ",r.selectedCount]}):null,e.jsx("span",{className:"model-discovery-dialog__vendor-count",children:r.models.length}),e.jsx("span",{className:`model-discovery-dialog__vendor-chevron ${A?"model-discovery-dialog__vendor-chevron--expanded":""}`,children:e.jsx(Zs,{size:16})})]})]}),A?e.jsx("div",{className:"model-discovery-dialog__vendor-body",children:j.map(({type:U,models:H})=>e.jsxs("div",{className:"model-discovery-dialog__type-section",children:[e.jsxs("div",{className:"model-discovery-dialog__type-section-header",children:[e.jsx("span",{className:"model-discovery-dialog__type-section-title",children:ri[U]}),e.jsx("span",{className:"model-discovery-dialog__type-section-count",children:H.length})]}),e.jsx("div",{className:"model-discovery-dialog__model-stack",children:H.map(G=>{const le=f.has(G.id);return e.jsxs("label",{className:`model-discovery-dialog__item ${le?"model-discovery-dialog__item--checked":""}`,children:[e.jsx("input",{type:"checkbox",className:"model-discovery-dialog__checkbox",checked:le,onChange:()=>Se(G.id)}),e.jsx("span",{className:"model-discovery-dialog__checkmark",children:le?e.jsx(At,{size:12}):null}),e.jsx("div",{className:"model-discovery-dialog__item-body",children:e.jsx("div",{className:`model-discovery-dialog__item-id ${le?"model-discovery-dialog__item-id--checked":""}`,children:G.id})}),K?e.jsx(J,{content:"测试此模型",showArrow:!1,children:e.jsx("button",{type:"button",className:"model-discovery-dialog__item-test",onClick:ve=>{ve.preventDefault(),ve.stopPropagation(),K(G.id)},children:e.jsx(Hs,{size:13})})}):null]},G.id)})})]},`${r.vendor}-${U}`))}):null]},r.vendor)})})}),e.jsxs("div",{className:"model-discovery-dialog__footer",children:[e.jsxs("span",{className:"model-discovery-dialog__selection-count",children:["已选 ",w," 个 · 图 ",Z.image," / 视"," ",Z.video," / 文 ",Z.text]}),e.jsxs("div",{className:"model-discovery-dialog__footer-bulk",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button",onClick:be,disabled:F.length===0,children:ne?"取消当前筛选":"全选"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button",onClick:Ce,disabled:se.length===0||Pe,children:"选中推荐模型"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button model-discovery-dialog__ghost-button--muted",onClick:()=>P([]),disabled:B.length===0,children:"清空"})]}),e.jsxs("div",{className:"model-discovery-dialog__actions",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--secondary",onClick:b,children:"取消"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--primary",onClick:()=>y(B),children:"添加模型"})]})]})]})})},hi=kt.memo(({profile:t,onUpdateProfile:a})=>{const[n,g]=u.useState(!1),b=Dt(t.id),y=Tt(t),K=(y==null?void 0:y.pricingUrl)||"",Q=(y==null?void 0:y.cnyPerUsd)??1,pe=(y==null?void 0:y.pricingGroup)||"default",ee=u.useCallback(async()=>{if(y){g(!0);try{await Ms.fetchAndCache(t.id,y.pricingUrl,t.apiKey,y.pricingGroup,y.cnyPerUsd,{force:!0,promoteToAutoRefresh:!0}),Y.success("价格信息已同步")}catch(P){Y.error(`获取价格失败: ${P instanceof Error?P.message:"未知错误"}`)}finally{g(!1)}}},[y,t.id,t.apiKey]),ye=u.useCallback(async P=>{const k=String(P);if(a($=>({...$,pricingGroup:k})),!!y){g(!0);try{await Ms.fetchAndCache(t.id,y.pricingUrl,t.apiKey,k,y.cnyPerUsd)}catch{}finally{g(!1)}}},[a,y,t.id,t.apiKey]),B=b.map(P=>({label:P.displayName||P.name,value:P.name}));return e.jsxs("div",{className:"settings-dialog__pricing-group",children:[e.jsxs("div",{className:"settings-dialog__pricing-row",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{flex:1,minWidth:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"模型价格 URL"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:K,onChange:P=>a(k=>({...k,pricingUrl:P.target.value})),placeholder:"如 https://api.tu-zi.com/api/pricing"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{width:110,flexShrink:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"¥/1USD"}),e.jsx("input",{type:"number",className:"settings-dialog__input",value:Q,step:.01,min:0,onChange:P=>a(k=>({...k,cnyPerUsd:parseFloat(P.target.value)||0}))})]})]}),e.jsxs("div",{className:"settings-dialog__pricing-row",children:[B.length>0?e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{flex:1,minWidth:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"当前分组"}),e.jsx(Ot,{value:pe,options:B,onChange:P=>ye(P),style:{width:"100%"}})]}):null,e.jsx("button",{type:"button",className:"settings-dialog__button settings-dialog__button--fetch",style:{alignSelf:"flex-end",height:32,flexShrink:0},onClick:ee,disabled:n||!K,children:n?"同步中":"获取价格"})]})]})});function pi(t,a){return{id:a,name:`供应商 ${t}`,iconUrl:"",homepageUrl:"",providerType:"openai-compatible",baseUrl:"",apiKey:"",authType:"bearer",imageApiCompatibility:Ys,enabled:!0,capabilities:{supportsModelsEndpoint:!0,supportsText:!0,supportsImage:!0,supportsVideo:!0,supportsAudio:!0,supportsTools:!0}}}const ks="aitu:settings:provider-nav",vi=980,xi=[{value:"providers",label:"供应商"},{value:"presets",label:"模型预设"},{value:"canvas",label:"画布显示"},{value:"speech",label:"语音播放"}],fi=["openai-compatible","gemini-compatible","custom"],yi=["auto","openai-gpt-image","tuzi-gpt-image","openai-compatible-basic"],Ds={image:"图片",video:"视频",audio:"音频",text:"文本"},bi={image:"图片模型",video:"视频模型",audio:"音频模型",text:"文本模型"},ji=u.memo(function({profileId:a,modelId:n}){const{summary:g,detail:b}=ai(a,n);return g?e.jsx(J,{content:b,placement:"top",disabled:b===g,children:e.jsx("span",{className:"settings-dialog__model-price",children:g})}):null}),Ni=u.memo(function({profileId:a,modelId:n}){const g=ii(a,n);return g!=null&&g.description?e.jsx(J,{content:g.description,placement:"top",children:e.jsx("span",{className:"settings-dialog__model-type-item-id settings-dialog__model-type-item-id--has-desc",children:n})}):e.jsx("span",{className:"settings-dialog__model-type-item-id",children:n})});function Ii(t,a,n,g){return a===0&&n===0?null:g===0&&n>0?`已清空 ${t} 的已添加模型`:a>0&&n>0?`已更新 ${t} 的模型(新增 ${a} 个,移除 ${n} 个)`:a>0?`已为 ${t} 添加 ${a} 个模型`:`已从 ${t} 移除 ${n} 个模型`}const Mi=["text","image","video","audio"],qe={"openai-compatible":{label:"OpenAI 兼容"},"gemini-compatible":{label:"Gemini 兼容"},custom:{label:"自定义接入"}},Je={auto:{label:"自动"},"openai-gpt-image":{label:"OpenAI GPT Image"},"tuzi-gpt-image":{label:"Tuzi GPT 兼容"},"openai-compatible-basic":{label:"OpenAI-compatible 通用兼容(兜底)"}};function Pi(t){return t==="auto"||t==="openai-gpt-image"||t==="tuzi-gpt-image"||t==="openai-compatible-basic"?t:t==="tuzi-compatible"?"tuzi-gpt-image":"auto"}function Si(t){const a=t.baseUrl.trim().toLowerCase();return a.includes("api.openai.com")?"openai-gpt-image":a.includes(".tu-zi.com")?"tuzi-gpt-image":"openai-compatible-basic"}function Ci(t){const a=Pi(t.imageApiCompatibility);if(a==="auto"){const n=Si(t);return`默认推荐显式选择 OpenAI GPT Image;如果保留自动模式,GPT Image 模型当前会解析为 ${Je[n].label}。`}return a==="openai-gpt-image"?"默认推荐模式。适用于官方 GPT Image 请求格式,也便于后续继续扩展官方图生图能力。":`同一个图片模型在不同 API Key 或网关下可能需要不同接口格式;当前已固定为 ${Je[a].label}。`}const Ts=["amber","sky","mint","rose","violet"];function Os(t){return t.reduce((a,n)=>(a[n.type]+=1,a),{image:0,video:0,audio:0,text:0})}function wi(t,a){const n=a.trim().toLowerCase();return n?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,Ve(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(n)):!0}function Ei(t){const a=new Set,n=[];return t.forEach(g=>{const b=`${g.type}:${g.id}`;a.has(b)||(a.add(b),n.push(g))}),n}function Us(t){return t?["image","video","audio","text"].filter(a=>!!W(t[a])).length:0}function Rs(t,a){const n=a.find(g=>g.id===t.id);return n?Li(n,t)?"saved":"dirty":"new"}function Le(t){return JSON.stringify(t)}function Ai(t){return typeof t.iconUrl!="string"?null:t.iconUrl.trim()||null}function ki(t){const a=zs(t.homepageUrl);if(a)return a;try{const n=zs(t.baseUrl);return n?new URL(n).origin:null}catch{return null}}function zs(t){const a=typeof t=="string"?t.trim():"";if(!a)return null;try{return new URL(/^[a-z][a-z\d+\-.]*:\/\//i.test(a)?a:`https://${a}`).toString()}catch{return null}}function Di(t){var g;const a=t.trim();if(!a)return"供";const n=a.match(/[A-Za-z0-9]+/g);return n!=null&&n[0]?n[0][0].toUpperCase():((g=Array.from(a)[0])==null?void 0:g.toUpperCase())||"供"}function Ti(t){const a=Array.from(`${t.id}-${t.providerType}-${t.name}`).reduce((n,g,b)=>n+g.charCodeAt(0)*(b+1),0);return Ts[a%Ts.length]}function ue(t){return JSON.parse(JSON.stringify(t))}function es(t){return`${t}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function Ls(t){return pi(t,es("profile"))}function Oi(){if(typeof window>"u")return null;const t=window.__aituPendingProviderNavigationIntent||null;return window.__aituPendingProviderNavigationIntent=void 0,t}function Vs(t){return"bearer"}function Ae(t){return t===z||t===Vt||t===$t||t===Kt||t===Bt}const $s=({profile:t,size:a="regular"})=>{const n=Ai(t),[g,b]=u.useState(n);u.useEffect(()=>{b(n)},[n]);const y=Ti(t),K=Di(t.name);return e.jsx("span",{className:`settings-dialog__provider-avatar settings-dialog__provider-avatar--${y} ${a==="large"?"settings-dialog__provider-avatar--large":""}`,"aria-hidden":"true",children:g?e.jsx("img",{src:g,alt:`${t.name} 图标`,className:"settings-dialog__provider-avatar-image",loading:"lazy",onError:()=>b(null)}):e.jsx("span",{className:"settings-dialog__provider-avatar-text",children:K})})};function Ui(t,a){return{id:es("preset"),name:"新预设",text:_e(he(t,a.text||null)),image:_e(he(t,a.image||null)),video:_e(he(t,a.video||null)),audio:_e(he(t,a.audio||null))}}function Ri(t,a,n){const g=t[a],b=n.defaultModelRef!==void 0?n.defaultModelRef:he(n.profileId!==void 0?n.profileId:ke(g),n.defaultModelId!==void 0?n.defaultModelId:W(g));return{...t,[a]:_e(b)}}function zi(t,a){const n={...t};return["image","video","audio","text"].forEach(g=>{ke(n[g])===a&&(n[g]=_e(null))}),n}function Li(t,a){return JSON.stringify(t)===JSON.stringify(a)}function Vi(t){return t.flatMap(({profile:a,models:n})=>n.map(g=>({...g,sourceProfileId:a.id,sourceProfileName:a.name,selectionKey:g.selectionKey||`${a.id}::${g.id}`})))}const Wi=({container:t})=>{const{appState:a,setAppState:n}=Ut(),{confirm:g,confirmDialog:b}=Rt({container:t}),{isMobile:y,viewportWidth:K,viewportHeight:Q}=zt(),pe=u.useRef(null),[ee,ye]=u.useState(0),[B,P]=u.useState("providers"),[k,$]=u.useState(z),[ae,F]=u.useState(ie),[f,O]=u.useState([]),[w,Z]=u.useState([]),[ne,se]=u.useState(ie),[Pe,Se]=u.useState([]),[be,Ce]=u.useState(""),[oe,r]=u.useState(""),[M,j]=u.useState(""),[A,U]=u.useState(""),[H,G]=u.useState(!0),[le,ve]=u.useState(""),[ss,De]=u.useState(!1),[Qs,$e]=u.useState(""),[ts,is]=u.useState(!1),[Xs,de]=u.useState("catalog"),[qs,je]=u.useState("catalog"),[Js,et]=u.useState(new Set),[Te,Ke]=u.useState(!1),st=s=>{et(i=>{const l=new Set(i);return l.has(s)?l.delete(s):l.add(s),l})},c=f.find(s=>s.id===k)||f[0]||null,tt=c?Ci(c):"同一个图片模型在不同 API Key 或网关下可能需要不同接口格式;不确定时使用自动。",R=w.find(s=>s.id===ae)||w[0]||null,L=ni((c==null?void 0:c.id)||z),it=u.useDeferredValue(le),as=ze(z,"image"),at=ze(z,"audio"),ns=ze(z,"video"),os=ze(z,"text"),nt=f.filter(s=>s.enabled),v=y||K<=vi,ls=v&&(ee>0?ee<600:K<600),Be=!!c&&!!c.apiKey.trim(),ot=Le({profiles:f,presets:w,activePresetId:ne,audioModelName:be,imageModelName:oe,videoModelName:M,textModelName:A,showWorkZoneCard:H}),ds=a.openSettings&&ot!==Qs;u.useEffect(()=>{Ke(!1)},[c==null?void 0:c.id]),u.useEffect(()=>{const s=pe.current;if(!s||typeof ResizeObserver>"u")return;const i=new ResizeObserver(l=>{var m;const o=(m=l[0])==null?void 0:m.contentRect.width;o&&ye(d=>Math.abs(d-o)<1?d:o)});return i.observe(s),()=>{i.disconnect()}},[a.openSettings]);const lt=s=>{T.trackUIInteraction({area:"settings",action:"view_changed",control:"settings_nav",value:s,source:"settings_dialog"}),P(s),v&&(s==="providers"&&de("catalog"),s==="presets"&&je("catalog"))},dt=s=>{T.trackUIInteraction({area:"settings",action:"provider_selected",control:"provider_list",source:"settings_dialog",metadata:{profileId:s,isManagedProfile:Ae(s)}}),$(s),v&&de("detail")},rt=s=>{T.trackUIInteraction({area:"settings",action:"preset_selected",control:"preset_list",source:"settings_dialog",metadata:{presetId:s}}),F(s),v&&je("detail")},ct=()=>{try{return localStorage.getItem(Ue.WORKZONE_CARD_VISIBLE)!=="false"}catch{return!0}},Ge=()=>{const s=ue(Oe.get()),i=ue(Ie.get()),l=Ie.getActivePresetId()||ie,o=Ee.get(),m=ct();Se(s),$e(Le({profiles:s,presets:i,activePresetId:l,audioModelName:o.audioModelName||fe(),imageModelName:o.imageModelName||ce(),videoModelName:o.videoModelName||ge(),textModelName:o.textModelName||me(),showWorkZoneCard:m}))};u.useEffect(()=>{var p;if(!a.openSettings)return;Ke(!1);const s=ue(Oe.get()),i=ue(Ie.get()),l=Ie.getActivePresetId()||ie,o=Ee.get();let m=!0;const d=Oi(),_=(d==null?void 0:d.action)==="select"&&s.some(N=>N.id===d.profileId)?d.profileId:((p=s[0])==null?void 0:p.id)||z;O(s),Z(i),Se(s),se(l),$(N=>{var I;return d?_:s.some(C=>C.id===N)?N:((I=s[0])==null?void 0:I.id)||z}),F(N=>{var I;return i.some(C=>C.id===N)?N:((I=i[0])==null?void 0:I.id)||ie}),Ce(o.audioModelName||fe()),r(o.imageModelName||ce()),j(o.videoModelName||ge()),U(o.textModelName||me());try{m=localStorage.getItem(Ue.WORKZONE_CARD_VISIBLE)!=="false"}catch{m=!0}G(m),P("providers"),de(d&&v?"detail":"catalog"),je("catalog"),ve(""),De(!1),$e(Le({profiles:s,presets:i,activePresetId:l,audioModelName:o.audioModelName||fe(),imageModelName:o.imageModelName||ce(),videoModelName:o.videoModelName||ge(),textModelName:o.textModelName||me(),showWorkZoneCard:m})),(d==null?void 0:d.action)==="create"&&cs(d,s)},[a.openSettings]),u.useEffect(()=>{if(!k&&f[0]){$(f[0].id);return}k&&f.length>0&&!f.some(s=>s.id===k)&&$(f[0].id)},[f,k]),u.useEffect(()=>{if(!ae&&w[0]){F(w[0].id);return}ae&&w.length>0&&!w.some(s=>s.id===ae)&&F(w[0].id)},[w,ae]),u.useEffect(()=>{ve("")},[k,B]);const xe=(s,i)=>{O(l=>l.map(o=>o.id===s?i(o):o))},gt=(s,i)=>{Z(l=>l.map(o=>o.id===s?i(o):o))},rs=async(s,i)=>{var l,o;try{const m=Ee.get(),d=((l=s.find(S=>S.id===i))==null?void 0:l.id)||((o=s[0])==null?void 0:o.id)||ie,_=s.find(S=>S.id===d)||s[0]||null,p=W(_==null?void 0:_.audio)||m.audioModelName||fe(),N=W(_==null?void 0:_.image)||m.imageModelName||ce(),I=W(_==null?void 0:_.video)||m.videoModelName||ge(),C=W(_==null?void 0:_.text)||m.textModelName||m.chatModel||me();return await Ie.update(ue(s)),await Ie.setActivePresetId(d),await Ee.update({audioModelName:p,imageModelName:N,videoModelName:I,textModelName:C,chatModel:C}),Z(s),se(d),Ce(p),r(N),j(I),U(C),Ge(),!0}catch(m){return console.error("Failed to persist preset configuration:",m),Y.error("预设保存失败,请重试"),!1}},mt=async(s,i)=>{if(T.trackUIInteraction({area:"settings",action:"provider_enabled_changed",control:"provider_enabled_switch",value:i,source:"settings_dialog",metadata:{profileId:s,isManagedProfile:Ae(s)}}),O(l=>l.map(o=>o.id===s?{...o,enabled:i}:o)),!!Pe.some(l=>l.id===s))try{await Oe.update(ue(Oe.get()).map(l=>l.id===s?{...l,enabled:i}:l)),Ge()}catch(l){console.error("Failed to persist provider enabled state:",l),O(o=>o.map(m=>m.id===s?{...m,enabled:!i}:m)),Y.error("供应商状态保存失败,请重试")}},ut=async s=>{T.trackUIInteraction({area:"settings",action:"workzone_card_visibility_changed",control:"workzone_card_switch",value:s,source:"settings_dialog"}),G(s);try{localStorage.setItem(Ue.WORKZONE_CARD_VISIBLE,String(s)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed")),Ge()}catch(i){console.error("Failed to persist canvas visibility state:",i),G(!s),Y.error("画布显示配置保存失败,请重试")}},cs=(s,i)=>{var d;const l=i||f;if(P("providers"),v&&de("detail"),s.action==="select"){const _=l.some(p=>p.id===s.profileId)?s.profileId:((d=l[l.length-1])==null?void 0:d.id)||z;return $(_),l}const o=Ls(l.length+1),m=[...l,o];return O(m),$(o.id),m},gs=()=>{const s=Ls(f.length+1);T.trackUIInteraction({area:"settings",action:"provider_added",control:"add_provider",source:"settings_dialog",metadata:{profilesCount:f.length+1}}),O(i=>[...i,s]),$(s.id),P("providers"),v&&de("detail")};u.useEffect(()=>{if(!a.openSettings)return;const s=i=>{const l=i.detail;l&&cs(l)};return window.addEventListener(ks,s),()=>{window.removeEventListener(ks,s)}},[a.openSettings,v,f]);const ms=async s=>{var m;if(Ae(s))return;const i=f.find(d=>d.id===s);if(!await g({title:"确认删除供应商",description:`确定要删除供应商「${(i==null?void 0:i.name)||"未命名供应商"}」吗?相关预设里的路由会被清空。`,confirmText:"删除",cancelText:"取消",danger:!0}))return;T.trackUIInteraction({area:"settings",action:"provider_deleted",control:"delete_provider",source:"settings_dialog",metadata:{profileId:s,profilesCount:Math.max(0,f.length-1)}});const o=f.filter(d=>d.id!==s);O(o),Z(d=>d.map(_=>zi(_,s))),k===s&&$(((m=o[0])==null?void 0:m.id)||z),v&&de("catalog")},us=u.useCallback(s=>{const i=f.find(o=>o.id===s);if(!i)return;const l={...ue(i),id:es("profile"),name:`${i.name} (副本)`};O(o=>[...o,l]),T.trackUIInteraction({area:"settings",action:"provider_cloned",control:"clone_provider",source:"settings_dialog",metadata:{profileId:s,clonedProfileId:l.id,profilesCount:f.length+1}}),$(l.id),P("providers"),v&&de("detail")},[f,v]),Fe=Lt(),_t=u.useCallback(s=>{const i=[{key:"clone",label:"克隆",icon:e.jsx(Gt,{size:14}),onSelect:us}];return Ae(s)||i.push({key:"divider",type:"divider"},{key:"delete",label:"删除",icon:e.jsx(Ps,{size:14}),danger:!0,onSelect:ms}),i},[us]),_s=()=>{var l;const s=((l=nt[0])==null?void 0:l.id)||null,i=Ui(s,{audio:be||fe(),image:oe||ce(),video:M||ge(),text:A||me()});Z(o=>[...o,i]),T.trackUIInteraction({area:"settings",action:"preset_added",control:"add_preset",source:"settings_dialog",metadata:{presetId:i.id,presetsCount:w.length+1,hasFallbackProfile:!!s}}),F(i.id),P("presets"),v&&je("detail")},ht=async s=>{var m,d;if(w.length<=1)return;const i=w.find(_=>_.id===s);if(!await g({title:"确认删除预设",description:`确定要删除预设「${(i==null?void 0:i.name)||"未命名预设"}」吗?此操作不可撤销。`,confirmText:"删除",cancelText:"取消",danger:!0}))return;T.trackUIInteraction({area:"settings",action:"preset_deleted",control:"delete_preset",source:"settings_dialog",metadata:{presetId:s,presetsCount:Math.max(0,w.length-1)}});const o=w.filter(_=>_.id!==s);Z(o),ne===s&&se(((m=o[0])==null?void 0:m.id)||ie),ae===s&&F(((d=o[0])==null?void 0:d.id)||ie),v&&je("catalog")},hs=(s,i)=>{if(!R)return;const l=w.map(o=>o.id===R.id?Ri(o,s,{defaultModelRef:i}):o);Z(l),T.trackUIInteraction({area:"settings",action:"route_model_changed",control:"route_model_dropdown",value:s,source:"settings_dialog",metadata:{presetId:R.id,routeType:s,hasModel:!!(i!=null&&i.modelId),hasProfile:!!(i!=null&&i.profileId)}}),rs(l,ne)},pt=async()=>{if(!c){Y.warning("请先选择供应商配置");return}if(ds&&!await xs(!1))return;const s=c.apiKey.trim(),i=Xe(c.baseUrl.trim()||Re);if(!s){Y.warning("请先填写 API Key");return}try{T.trackUIInteraction({area:"settings",action:"model_discovery_started",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id}}),await Me.discover(c.id,i,s),T.trackUIInteraction({area:"settings",action:"model_discovery_succeeded",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id}}),De(!0)}catch(l){const o=l instanceof Error?l.message:"模型同步失败";T.trackUIInteraction({area:"settings",action:"model_discovery_failed",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id,error:o}}),Me.setError(c.id,o),Y.error({content:o,duration:3600})}},ps=(s,i)=>{var d,_,p;if(!c)return;const l=Me.applySelection(c.id,s),o=l.models;if(c.id===z){const N=o.filter(x=>x.type==="image"),I=o.filter(x=>x.type==="video"),C=o.filter(x=>x.type==="text"),S=L.discoveredModels.filter(x=>x.type==="image").map(x=>x.id),X=L.discoveredModels.filter(x=>x.type==="video").map(x=>x.id),E=L.discoveredModels.filter(x=>x.type==="text").map(x=>x.id);!N.some(x=>x.id===oe)&&S.includes(oe)&&r(((d=N[0])==null?void 0:d.id)||ce()),!I.some(x=>x.id===M)&&X.includes(M)&&j(((_=I[0])==null?void 0:_.id)||ge()),!C.some(x=>x.id===A)&&E.includes(A)&&U(((p=C[0])==null?void 0:p.id)||me())}const m=(i==null?void 0:i.successMessage)||Ii(c.name,l.addedModelIds.length,l.removedModelIds.length,o.length);m&&Y.success(m),T.trackUIInteraction({area:"settings",action:"discovered_models_applied",control:"model_discovery_dialog",source:"settings_dialog",metadata:{profileId:c.id,selectedCount:o.length,addedCount:l.addedModelIds.length,removedCount:l.removedModelIds.length}}),De(!1)},vt=s=>{if(!c)return;if(!L.selectedModelIds.includes(s)){Y.warning("该模型不是当前分组动态添加的模型,无法在此移除");return}const i=L.selectedModelIds.filter(l=>l!==s);ps(i)},vs=()=>{n(s=>({...s,openSettings:!1}))},xs=async(s=!1)=>{var i,l,o,m,d,_;if(ts)return!1;is(!0);try{const p=f.map(h=>{var Ne,we;const V=h.baseUrl.trim()?Xe(h.baseUrl):"";return{...h,name:h.name.trim()||"未命名供应商",iconUrl:((Ne=h.iconUrl)==null?void 0:Ne.trim())||void 0,homepageUrl:((we=h.homepageUrl)==null?void 0:we.trim())||void 0,baseUrl:V,apiKey:h.apiKey.trim()}}),N=new Set(p.map(h=>h.id)),I=w.map(h=>{const V={...h,name:h.name.trim()||"未命名预设",audio:{...h.audio},image:{...h.image},video:{...h.video},text:{...h.text}};return["image","video","audio","text"].forEach(Ne=>{const we=V[Ne],Ye=ke(we),Is=W(we);if(Ye&&!N.has(Ye)){V[Ne]=_e(he(null,Is));return}V[Ne]=_e(he(Ye,Is))}),V}),C=((i=I.find(h=>h.id===ne))==null?void 0:i.id)||((l=I[0])==null?void 0:l.id)||ie,S=I.find(h=>h.id===C)||I[0]||null,X=p.find(h=>h.id===z)||p[0],E=Xe((X==null?void 0:X.baseUrl)||Re),x=be.trim()||((o=at[0])==null?void 0:o.id)||fe(),te=oe.trim()||((m=as[0])==null?void 0:m.id)||ce(),D=M.trim()||((d=ns[0])==null?void 0:d.id)||ge(),q=A.trim()||((_=os[0])==null?void 0:_.id)||me(),He=W(S==null?void 0:S.image)||te,re=W(S==null?void 0:S.video)||D,Mt=W(S==null?void 0:S.audio)||x,Pt=W(S==null?void 0:S.text)||q;p.forEach(h=>{Me.invalidateIfConfigChanged(h.id,h.baseUrl||Re,h.apiKey||"")}),await Qt.updateSettings({gemini:{...Ee.get(),apiKey:(X==null?void 0:X.apiKey)||"",baseUrl:E,audioModelName:Mt,imageModelName:He,videoModelName:re,textModelName:Pt},providerProfiles:p,providerCatalogs:Me.getCatalogs().filter(h=>N.has(h.profileId)),invocationPresets:I,activePresetId:C});try{localStorage.setItem(Ue.WORKZONE_CARD_VISIBLE,String(H)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed"))}catch{}return O(p),Se(ue(p)),Z(I),se(C),Ce(x),r(te),j(D),U(q),$e(Le({profiles:p,presets:I,activePresetId:C,audioModelName:x,imageModelName:te,videoModelName:D,textModelName:q,showWorkZoneCard:H})),s&&vs(),T.trackUIInteraction({area:"settings",action:"settings_saved",control:"save_settings",source:"settings_dialog",metadata:{closeAfterSave:s,profilesCount:p.length,presetsCount:I.length,enabledProfilesCount:p.filter(h=>h.enabled).length}}),p.forEach(h=>{const V=Xt(h.baseUrl);T.track("provider_endpoint_configured",{profileId:h.id,providerType:h.providerType,providerOrigin:V==null?void 0:V.origin,providerHost:V==null?void 0:V.host,providerProtocol:V==null?void 0:V.protocol,enabled:h.enabled,authType:h.authType,supportsText:h.capabilities.supportsText,supportsImage:h.capabilities.supportsImage,supportsVideo:h.capabilities.supportsVideo,supportsAudio:h.capabilities.supportsAudio,supportsTools:h.capabilities.supportsTools,hasApiKey:!!h.apiKey})}),!0}catch(p){return console.error("Failed to persist settings drafts:",p),T.trackUIInteraction({area:"settings",action:"settings_save_failed",control:"save_settings",source:"settings_dialog",metadata:{closeAfterSave:s,error:p instanceof Error?p.message:String(p)}}),Y.error("设置保存失败,请稍后重试"),!1}finally{is(!1)}},xt=()=>{if(!ds){vs();return}(async()=>await xs(!0)||Y.warning("设置尚未保存,请检查后重试"))()},ft=()=>{ss||ts||xt()},fs=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell settings-dialog__sidebar-shell--catalog",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"供应商目录"}),v?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:gs,children:"新增供应商"}):null]}),v?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先从列表里选择供应商,再进入对应的配置页面。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:f.map(s=>{const i=s.id===(c==null?void 0:c.id);return e.jsxs("div",{className:`settings-dialog__provider-row ${i?"settings-dialog__provider-row--active":""} ${s.enabled?"":"settings-dialog__provider-row--disabled"}`,onContextMenu:l=>{l.preventDefault(),Fe.open(l,s.id)},children:[e.jsxs("button",{type:"button",className:"settings-dialog__provider-select",onClick:()=>dt(s.id),"aria-pressed":i,children:[e.jsxs("span",{className:"settings-dialog__provider-select-main",children:[e.jsx($s,{profile:s}),e.jsxs("span",{className:"settings-dialog__provider-copy",children:[e.jsxs("span",{className:"settings-dialog__provider-name-row",children:[e.jsx("span",{className:"settings-dialog__provider-name",children:s.name}),s.id===z?e.jsx("span",{className:"settings-dialog__provider-tag",children:"默认"}):null]}),v?e.jsxs("span",{className:"settings-dialog__provider-meta",children:[e.jsx("span",{children:qe[s.providerType].label}),e.jsx("span",{children:s.enabled?"启用":"停用"})]}):null]})]}),v?e.jsx(Qe,{size:16,className:"settings-dialog__provider-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__provider-switch",children:[e.jsx("span",{className:"settings-dialog__provider-switch-copy",children:s.enabled?"启用":"停用"}),e.jsx(Ss,{size:"small",value:s.enabled,disabled:s.id===z,onChange:l=>void mt(s.id,l)})]})]},s.id)})}),e.jsx(Yt,{state:Fe.contextMenu,items:_t,onClose:Fe.close,zIndex:2e4}),v?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:gs,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增供应商"})]})]}),ys=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"默认模型"}),v?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:_s,children:"新增预设"}):null]}),v?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先选中一个预设,再进入详情页调整默认路由。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:w.map(s=>{const i=s.id===(R==null?void 0:R.id),l=s.id===ne,o=Us(s);return e.jsxs("button",{type:"button",className:`settings-dialog__sidebar-item ${i?"settings-dialog__sidebar-item--active":""}`,onClick:()=>rt(s.id),children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-head",children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-top",children:[e.jsx("span",{children:s.name}),l?e.jsx("span",{className:"settings-dialog__sidebar-badge settings-dialog__sidebar-badge--accent",children:"当前"}):null]}),v?e.jsx(Qe,{size:16,className:"settings-dialog__sidebar-item-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__sidebar-item-meta",children:[e.jsxs("span",{children:[o,"/3 已配置"]}),v?e.jsx("span",{children:l?"正在生效":"点击查看详情"}):null]})]},s.id)})}),v?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:_s,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增预设"})]})]}),bs=(s,i)=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsx("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--compact",children:e.jsx("div",{className:"settings-dialog__mobile-stage",children:i},s)})}),js=(s=!1)=>{if(!c)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个供应商。"});const i=Os(L.models),l=Rs(c,Pe),o=i.image+i.video+i.text,m=ki(c);return e.jsxs("div",{className:`settings-dialog__content-panel settings-dialog__content-panel--providers ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>de("catalog"),children:[e.jsx(Cs,{size:16}),e.jsx("span",{children:"返回供应商目录"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"供应商配置"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"进入详情后再编辑接口信息、密钥和模型同步配置。"})]})]}):null,e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("a",{className:`settings-dialog__profile-hero ${m?"settings-dialog__profile-hero--link":""}`,href:m||void 0,target:"_blank",rel:"noopener noreferrer","aria-label":m?`打开 ${c.name} 域名页面`:void 0,onClick:d=>{m||d.preventDefault()},children:[e.jsx($s,{profile:c,size:"large"}),e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:c.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:qe[c.providerType].label}),e.jsx("span",{children:c.enabled?"启用":"停用"}),e.jsxs("span",{children:[o," 个模型"]}),e.jsx("span",{children:l==="saved"?"已保存":"未保存"})]})]})]}),Ae(c.id)?null:e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>ms(c.id),children:"删除"})]})}),e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"基础配置"})})}),e.jsxs("div",{className:"settings-dialog__grid",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:c.name,onChange:d=>xe(c.id,_=>({..._,name:d.target.value}))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"接口类型"}),e.jsx("select",{className:"settings-dialog__select",value:c.providerType,onChange:d=>xe(c.id,_=>{const p=d.target.value,N=Vs(_.providerType),I=Vs();return{..._,providerType:p,authType:_.authType===N?I:_.authType}}),children:fi.map(d=>e.jsx("option",{value:d,children:qe[d].label},d))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"图片接口格式"}),e.jsx("select",{className:"settings-dialog__select",value:c.imageApiCompatibility||Ys,onChange:d=>xe(c.id,_=>({..._,imageApiCompatibility:d.target.value})),children:yi.map(d=>e.jsx("option",{value:d,children:Je[d].label},d))}),e.jsx("span",{className:"settings-dialog__field-hint",children:tt})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"图标 URL"}),e.jsx("input",{type:"url",className:"settings-dialog__input",value:c.iconUrl||"",onChange:d=>xe(c.id,_=>({..._,iconUrl:d.target.value})),placeholder:"可选,留空时自动生成默认图标"}),e.jsx("span",{className:"settings-dialog__field-hint",children:"支持填写远程图片地址;未填写时将根据供应商名称生成默认图标。"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API 地址"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:c.baseUrl,onChange:d=>xe(c.id,_=>({..._,baseUrl:d.target.value})),placeholder:Re})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsxs("div",{className:"settings-dialog__label-with-tooltip settings-dialog__label-with-tooltip--left",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API Key"}),e.jsx(J,{content:e.jsxs("div",{style:{maxWidth:480},children:["您可以从以下地址获取 API Key:",e.jsx("br",{}),e.jsx("a",{href:"https://api.tu-zi.com/token",target:"_blank",rel:"noopener noreferrer",style:{color:"#F39C12",textDecoration:"none",display:"inline-block",marginBottom:8},children:"api.tu-zi.com/token"}),e.jsx("div",{style:{position:"relative",width:"100%",paddingTop:"56.25%",marginTop:8,borderRadius:8,overflow:"hidden",backgroundColor:"#000",boxShadow:"0 4px 16px rgba(0,0,0,0.2)"},children:e.jsx("iframe",{title:"Bilibili tutorial video",src:"//player.bilibili.com/player.html?isOutside=true&aid=116171584049629&bvid=BV1k4PqzPEKz&cid=36455319822&p=1",allowFullScreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",border:0}})})]}),placement:"top",theme:"light",showArrow:!1,overlayStyle:{maxWidth:"none"},children:e.jsx(Ft,{className:"settings-dialog__tooltip-icon"})})]}),e.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"center",width:"100%",flexDirection:v?"column":"row"},children:[e.jsxs("div",{className:"settings-dialog__secret-input-wrap",style:{flex:v?"none":1},children:[e.jsx("input",{type:Te?"text":"password",className:"settings-dialog__input settings-dialog__secret-input",value:c.apiKey,onChange:d=>xe(c.id,_=>({..._,apiKey:d.target.value})),autoComplete:"off"}),e.jsx(J,{content:Te?"隐藏 API Key":"查看 API Key",showArrow:!1,children:e.jsx("button",{type:"button",className:"settings-dialog__secret-toggle","aria-label":Te?"隐藏 API Key":"查看 API Key",onMouseDown:d=>d.preventDefault(),onClick:()=>Ke(d=>!d),children:Te?e.jsx(Wt,{size:16}):e.jsx(Zt,{size:16})})})]}),e.jsx("button",{type:"button",className:"settings-dialog__button settings-dialog__button--fetch",style:{whiteSpace:"nowrap",height:v?"42px":"32px",width:v?"100%":"auto"},onClick:pt,disabled:!Be||L.status==="loading",children:L.status==="loading"?e.jsxs(e.Fragment,{children:[e.jsx(Ht,{size:15,className:"settings-dialog__button-spinner"}),"同步中"]}):"获取模型"})]})]})]})]}),e.jsx(hi,{profile:c,onUpdateProfile:d=>xe(c.id,d)}),c.id===z?e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__compat-card",children:[e.jsx("div",{className:"settings-dialog__compat-title",children:"兼容默认模型"}),e.jsxs("div",{className:"settings-dialog__compat-meta",children:[e.jsxs("span",{children:["图片:",oe||ce()]}),e.jsxs("span",{children:["视频:",M||ge()]}),e.jsxs("span",{children:["音频:",be||fe()]}),e.jsxs("span",{children:["文本:",A||me()]})]})]})}):null,yt()]},s?`provider-detail-${c.id}`:void 0)},We=u.useCallback(s=>{s.profileId&&(di({profileId:s.profileId,modelId:s.modelId,modality:s.modality,compareMode:s.compareMode}),T.trackUIInteraction({area:"settings",action:"model_benchmark_launched",control:"model_benchmark",source:"settings_dialog",metadata:{profileId:s.profileId,modality:s.modality,compareMode:s.compareMode,hasModel:!!s.modelId}}))},[n]),yt=()=>{const s=c?Rs(c,Pe):"saved",i=!!(c!=null&&c.apiKey.trim())&&s==="saved"&&L.status!=="loading",l=(c==null?void 0:c.id)===z,o=Ei(L.models),m=new Map(Ks.map((E,x)=>[E,x])),d=it.trim(),_=Os(o),p=o.filter(E=>wi(E,d)),N=Mi.map(E=>({type:E,models:p.filter(x=>x.type===E).sort((x,te)=>{const D=m.get(x.vendor)??Number.MAX_SAFE_INTEGER,q=m.get(te.vendor)??Number.MAX_SAFE_INTEGER;return D!==q?D-q:Jt(x,te)})})).filter(E=>E.models.length>0),I=Be||o.length>0,C=o.length>0&&p.length===0&&!!d,S=L.status==="error"&&o.length===0,X=!Be&&o.length===0;return e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:"模型"}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsxs("span",{children:["已添加 ",o.length," 个"]}),e.jsxs("span",{children:["图 ",_.image]}),e.jsxs("span",{children:["视 ",_.video]}),e.jsxs("span",{children:["音 ",_.audio]}),e.jsxs("span",{children:["文 ",_.text]})]})]})}),I?e.jsx("div",{className:"settings-dialog__model-toolbar",children:e.jsxs("label",{className:`settings-dialog__model-search ${o.length===0?"settings-dialog__model-search--disabled":""}`,children:[e.jsx(Gs,{size:15}),e.jsx("input",{type:"text",value:le,onChange:E=>ve(E.target.value),placeholder:o.length>0?"搜索模型 ID、名称或品牌":"获取模型后可搜索",disabled:o.length===0}),le?e.jsx("button",{type:"button",className:"settings-dialog__model-search-clear",onClick:()=>ve(""),"aria-label":"清空搜索",children:e.jsx(Bs,{size:14})}):null]})}):null,N.length>0?e.jsx("div",{className:"settings-dialog__model-type-groups",children:N.map(({type:E,models:x})=>{const te=Js.has(E);return e.jsxs("div",{className:"settings-dialog__model-type-group",children:[e.jsxs("div",{className:"settings-dialog__model-type-header",style:{cursor:"pointer"},onClick:()=>st(E),children:[e.jsxs("div",{className:"settings-dialog__model-type-meta",children:[te?e.jsx(Qe,{size:16,className:"settings-dialog__model-type-toggle"}):e.jsx(Zs,{size:16,className:"settings-dialog__model-type-toggle"}),e.jsx("span",{className:"settings-dialog__model-type-title",children:bi[E]}),e.jsx("span",{className:"settings-dialog__model-type-count",children:x.length})]}),e.jsx(J,{content:i?"测试当前供应商这一组模型":"请先保存供应商配置并确保 API Key 可用",showArrow:!1,children:e.jsx("button",{type:"button",className:"settings-dialog__model-group-test",onClick:D=>{D.stopPropagation(),c&&We({profileId:c.id,modality:E,compareMode:"cross-model"})},disabled:!i,children:"测试本组"})})]}),!te&&e.jsx("div",{className:"settings-dialog__model-type-list",children:x.map(D=>{const q=Fs(D.vendor),He=!l||L.selectedModelIds.includes(D.id);return e.jsxs("div",{className:"settings-dialog__model-type-item",style:{"--model-brand-accent":q.accent,"--model-brand-surface":q.surface,"--model-brand-border":q.border},children:[e.jsx("span",{className:"settings-dialog__model-type-item-logo",children:e.jsx(Ws,{vendor:D.vendor,size:16})}),e.jsxs("div",{className:"settings-dialog__model-type-item-copy",children:[e.jsx(Ni,{profileId:c.id,modelId:D.id}),e.jsx("span",{className:"settings-dialog__model-type-item-vendor",children:Ve(D.vendor)}),e.jsx(ji,{profileId:c.id,modelId:D.id})]}),e.jsxs("div",{className:"settings-dialog__model-type-item-btns",children:[(()=>{const re=ei.getLatestEntryStatus(c.id,D.id);return re==="completed"?e.jsx(J,{content:"上次测试成功",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("span",{className:"settings-dialog__model-status settings-dialog__model-status--ok"})})}):re==="failed"?e.jsx(J,{content:"上次测试失败",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("span",{className:"settings-dialog__model-status settings-dialog__model-status--fail"})})}):null})(),e.jsx(J,{content:i?"测试":"请先保存供应商配置并确保 API Key 可用",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("button",{type:"button",className:"settings-dialog__model-icon-btn settings-dialog__model-icon-btn--test",onClick:re=>{re.stopPropagation(),c&&We({profileId:c.id,modality:E,modelId:D.id,compareMode:"cross-provider"})},disabled:!i,children:e.jsx(Hs,{size:14})})})}),He?e.jsx(J,{content:"移除此模型",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("button",{type:"button",className:"settings-dialog__model-icon-btn settings-dialog__model-icon-btn--delete",onClick:re=>{re.stopPropagation(),vt(D.id)},children:e.jsx(Ps,{size:14})})})}):null]})]},D.id)})})]},E)})}):C?e.jsx("div",{className:"settings-dialog__model-empty",children:"没有匹配的模型,试试搜索品牌名或更完整的模型 ID。"}):S?e.jsxs("div",{className:"settings-dialog__model-empty settings-dialog__model-empty--error",children:[e.jsx(si,{size:16}),e.jsx("span",{children:L.error||"模型获取失败,请稍后重试"})]}):X?e.jsx("div",{className:"settings-dialog__model-empty",children:"填写 API Key 后即可获取模型,获取完成后可在这里检索和浏览。"}):e.jsx("div",{className:"settings-dialog__model-empty",children:"还没有已添加的模型"})]})},bt=(s,i,l)=>{const o=ke(l),m=W(l);return f.filter(d=>d.id===o||d.enabled&&d.capabilities[i]).map(d=>{const p=(d.id===z?s==="image"?as:s==="video"?ns:os:Me.getState(d.id).models.filter(N=>N.type===s)).filter((N,I,C)=>C.findIndex(S=>S.id===N.id)===I);return d.id===o&&m&&!p.some(N=>N.id===m)&&p.unshift({id:m,label:m,shortLabel:m,type:s,vendor:ti.OTHER}),{profile:d,models:p}}).filter(d=>d.models.length>0)},Ze=(s,i,l)=>{var I;const o=bt(s,l,i),m=ke(i),d=W(i),_=((I=f.find(C=>C.id===m))==null?void 0:I.name)||"未配置",p=Vi(o),N=m&&d?`${m}::${d}`:d||void 0;return e.jsxs("div",{className:`settings-dialog__route-card settings-dialog__route-card--${s}`,children:[e.jsx("div",{className:"settings-dialog__route-card-top",children:e.jsx("div",{className:"settings-dialog__route-card-title",children:Ds[s]})}),e.jsxs("div",{className:"settings-dialog__stack",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"默认模型"}),e.jsxs("div",{className:"settings-dialog__route-model-picker",children:[e.jsx(qt,{variant:"form",selectedModel:d||"",selectedSelectionKey:N,models:p,providerProfilesOverride:f,placement:"down",placeholder:`搜索${Ds[s]}模型或供应商`,allowCustomValue:!1,showProviderAction:!1,onSelect:(C,S)=>{hs(s,S||he(null,C))},disabled:p.length===0}),d?e.jsx("button",{type:"button",className:"settings-dialog__route-clear",onClick:()=>hs(s,null),children:"清空"}):null]})]}),e.jsxs("div",{className:"settings-dialog__route-meta",children:[e.jsx("span",{children:_}),e.jsx("span",{children:d||"未选择模型"}),o.length===0?e.jsx("span",{children:"暂无可选模型"}):null]})]})]})},Ns=(s=!1)=>{if(!R)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个默认模型预设。"});const i=Us(R),l=R.id===ne;return e.jsxs("div",{className:`settings-dialog__content-panel ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>je("catalog"),children:[e.jsx(Cs,{size:16}),e.jsx("span",{children:"返回模型预设"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"模型预设"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"在这里设置图片、视频和文本模型的默认路由。"})]})]}):null,e.jsxs("div",{className:"settings-dialog__section",children:[e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:R.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:l?"当前预设":"未激活"}),e.jsxs("span",{children:[i,"/3 已配置"]})]})]}),e.jsxs("div",{className:"settings-dialog__inline-row",children:[e.jsx("button",{type:"button",className:"settings-dialog__ghost-button",onClick:()=>{rs(w,R.id)},children:"设为当前预设"}),e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>ht(R.id),disabled:w.length<=1,children:"删除预设"})]})]}),e.jsx("div",{className:"settings-dialog__grid",children:e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"预设名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:R.name,onChange:o=>gt(R.id,m=>({...m,name:o.target.value}))})]})})]}),e.jsxs("div",{className:"settings-dialog__routes",children:[Ze("image",R.image,"supportsImage"),Ze("video",R.video,"supportsVideo"),Ze("text",R.text,"supportsText")]})]},s?`preset-detail-${R.id}`:void 0)},jt=()=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsxs("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--canvas",children:[v?e.jsx("div",{className:"settings-dialog__compact-stage-header",children:e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"画布显示"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"手机上会以更集中的卡片形式展示,方便快速切换画布相关开关。"})]})}):null,e.jsxs("div",{className:"settings-dialog__section settings-dialog__section--canvas-card",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"画布显示配置"})})}),e.jsxs("div",{className:"settings-dialog__preference settings-dialog__preference--panel",children:[e.jsxs("div",{className:"settings-dialog__toggle-copy",children:[e.jsx("span",{className:"settings-dialog__toggle-title",children:"任务进度卡片"}),e.jsx("span",{className:"settings-dialog__toggle-desc",children:"在画布中显示任务进度卡片,便于追踪当前生成状态。"})]}),e.jsx(Ss,{size:"small",value:H,onChange:s=>void ut(s)})]})]})]})}),Nt=()=>e.jsx("aside",{className:"settings-dialog__nav",children:e.jsx("div",{className:"settings-dialog__nav-shell",children:e.jsx("div",{className:"settings-dialog__nav-list",children:xi.map(s=>e.jsx("button",{type:"button",className:`settings-dialog__nav-item ${B===s.value?"settings-dialog__nav-item--active":""}`,onClick:()=>lt(s.value),children:e.jsx("span",{className:"settings-dialog__nav-item-title",children:s.label})},s.value))})})}),It=()=>B==="canvas"?jt():B==="speech"?e.jsx(li,{}):B==="presets"?ls?qs==="catalog"?bs("presets-catalog",ys()):Ns(!0):e.jsxs("div",{className:`settings-dialog__workspace ${v?"settings-dialog__workspace--show-sidebar":""}`,children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:ys()}),Ns(!1)]}):ls?Xs==="catalog"?bs("providers-catalog",fs()):js(!0):e.jsxs("div",{className:`settings-dialog__workspace ${v?"settings-dialog__workspace--show-sidebar":""}`,children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:fs()}),js(!1)]});return e.jsxs(e.Fragment,{children:[e.jsx(oi,{id:"settings-dialog",visible:a.openSettings,title:"设置",onClose:ft,width:v?"100%":"88%",height:v?"100%":"88%",minWidth:v?Math.max(320,Math.min(K-16,640)):1080,minHeight:v?Math.max(520,Math.min(Q-16,820)):680,x:"center",y:"center",maximizable:!0,minimizable:!1,resizable:!v,movable:!v,modal:!1,className:"winbox-ai-generation winbox-tool-window winbox-settings-window",container:t,background:"#ffffff",children:e.jsx("div",{ref:pe,className:`settings-dialog ${v?"settings-dialog--compact":""}`,"data-testid":"settings-dialog",children:e.jsxs("div",{className:"settings-dialog__layout",children:[Nt(),e.jsx("div",{className:"settings-dialog__main",children:It()})]})})}),e.jsx(_i,{open:ss,container:t,models:L.discoveredModels,selectedModelIds:L.selectedModelIds,onClose:()=>De(!1),onConfirm:ps,onTestModel:s=>{if(!c)return;const i=L.discoveredModels.find(l=>l.id===s);We({profileId:c.id,modelId:s,modality:(i==null?void 0:i.type)||"image",compareMode:"cross-provider"})}}),b]})};export{Yi as IMAGE_MODEL_GROUPED_OPTIONS,Wi as SettingsDialog,Qi as VIDEO_MODEL_OPTIONS};
|
|
1
|
+
import{jE as Ks,jF as Ve,ac as St,r as _,ae as Ct,j as e,i1 as wt,i2 as Et,X as Gs,aH as Bs,jG as Fs,c4 as Ws,aK as Zs,v as At,E as J,jH as Hs,y as kt,jI as Dt,jJ as Tt,gn as Ms,M as Y,hO as Ot,jK as Ys,ck as Ut,ee as Rt,at as zt,a6 as z,jL as ie,ag as Oe,a8 as Ie,aX as Ee,bn as fe,bp as ce,bb as ge,bo as me,aC as Ue,am as T,dp as Lt,dq as Ps,jM as Vt,jN as $t,jO as Kt,jP as Gt,eH as Bt,jQ as ke,jR as ue,ig as Ss,u as Cs,$ as Xe,jS as Re,jT as Ft,jU as Wt,N as Zt,jV as Ht,dv as Yt,jW as W,al as he,a9 as Xt,jX as Qt,aA as qt,jY as Jt,jZ as ei,j_ as si,ah as ti,cc as ii,cb as ai}from"./startup-app-eD_rQhSh.js";import{j$ as Yi,k0 as Xi}from"./startup-app-eD_rQhSh.js";import{y as ni,z as ze,W as oi,B as Me,E as Qe}from"./ai-chat-BO5vbKZW.js";import{T as li}from"./tool-windows-CmgL3thd.js";import{o as di}from"./model-benchmark-launcher-DAWoSySc.js";import"./startup-runtime-DTmhLESk.js";const ws={all:"全部",image:"图片",video:"视频",audio:"音频",text:"文本"},ri={image:"图片",video:"视频",audio:"音频",text:"文本"},ci={image:"图",video:"视",audio:"音",text:"文"},Es=["text","image","video","audio"];function gi(t,a){const n=a.trim().toLowerCase();return n?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,Ve(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(n)):!0}function mi(t){return St(t)}function As(t,a){const n=new Map;for(const b of t){const y=n.get(b.vendor)||{vendor:b.vendor,models:[],counts:{image:0,video:0,audio:0,text:0},selectedCount:0};y.models.push(b),y.counts[b.type]+=1,a.has(b.id)&&(y.selectedCount+=1),n.set(b.vendor,y)}const g=new Map(Ks.map((b,y)=>[b,y]));return Array.from(n.values()).sort((b,y)=>{const K=g.get(b.vendor)??Number.MAX_SAFE_INTEGER,X=g.get(y.vendor)??Number.MAX_SAFE_INTEGER;return K!==X?K-X:y.models.length-b.models.length})}function _i(t){return["image","video","audio","text"].filter(a=>t.counts[a]>0).map(a=>({type:a,models:mi(t.models.filter(n=>n.type===a))})).sort((a,n)=>n.models.length!==a.models.length?n.models.length-a.models.length:Es.indexOf(a.type)-Es.indexOf(n.type))}const ui=({open:t,container:a,models:n,selectedModelIds:g,onClose:b,onConfirm:y,onTestModel:K})=>{const[X,pe]=_.useState(""),[ee,ye]=_.useState("all"),[G,P]=_.useState(g),[k,$]=_.useState({});_.useEffect(()=>{var U,H;if(!t)return;pe(""),ye("all"),P(g);const r=new Set(g),M=As(n,r),j=((U=M.find(B=>B.selectedCount>0))==null?void 0:U.vendor)||((H=M[0])==null?void 0:H.vendor)||null,A={};M.forEach(B=>{A[B.vendor]=B.vendor===j}),$(A)},[n,t,g]);const ae=_.useMemo(()=>({all:n.length,image:n.filter(r=>r.type==="image").length,video:n.filter(r=>r.type==="video").length,audio:n.filter(r=>r.type==="audio").length,text:n.filter(r=>r.type==="text").length}),[n]),F=_.useMemo(()=>{const r=X.trim(),M=ee==="all"?n:n.filter(j=>j.type===ee);return r?M.filter(j=>gi(j,r)):M},[ee,n,X]),f=_.useMemo(()=>new Set(G),[G]),O=_.useMemo(()=>As(F,f),[f,F]),w=G.length,Z=_.useMemo(()=>({image:n.filter(r=>r.type==="image"&&f.has(r.id)).length,video:n.filter(r=>r.type==="video"&&f.has(r.id)).length,text:n.filter(r=>r.type==="text"&&f.has(r.id)).length}),[n,f]),ne=F.length>0&&F.every(r=>f.has(r.id)),se=_.useMemo(()=>n.filter(r=>Ct(r.id)).map(r=>r.id),[n]),Pe=se.length>0&&se.every(r=>f.has(r));_.useEffect(()=>{O.length===0||O.some(j=>k[j.vendor])||!Object.values(k).some(Boolean)||$(O.reduce((j,A,U)=>(j[A.vendor]=U===0,j),{}))},[k,O]);const Se=r=>{P(M=>M.includes(r)?M.filter(j=>j!==r):[...M,r])},be=()=>{const r=F.map(j=>j.id),M=r.every(j=>f.has(j));P(j=>M?j.filter(A=>!r.includes(A)):Array.from(new Set([...j,...r])))},Ce=()=>{P(r=>Array.from(new Set([...r,...se])))},oe=r=>{$(M=>{const j=!M[r],A={};return O.forEach(U=>{A[U.vendor]=U.vendor===r?j:!1}),A})};return e.jsx(wt,{open:t,onOpenChange:r=>!r&&b(),children:e.jsxs(Et,{className:"model-discovery-dialog",container:a,"data-testid":"model-discovery-dialog",children:[e.jsxs("div",{className:"model-discovery-dialog__header",children:[e.jsxs("div",{className:"model-discovery-dialog__headline",children:[e.jsx("h3",{className:"model-discovery-dialog__title",children:"获取模型"}),e.jsxs("div",{className:"model-discovery-dialog__header-stats",children:[e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["已发现 ",n.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["品牌 ",O.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill model-discovery-dialog__header-pill--accent",children:["已选 ",w]})]})]}),e.jsx("button",{type:"button",className:"model-discovery-dialog__close",onClick:b,"aria-label":"关闭",children:e.jsx(Gs,{size:18})})]}),e.jsx("div",{className:"model-discovery-dialog__toolbar",children:e.jsxs("label",{className:"model-discovery-dialog__search",children:[e.jsx(Bs,{size:16}),e.jsx("input",{type:"text",value:X,onChange:r=>pe(r.target.value),placeholder:"搜索模型名称、ID 或品牌"})]})}),e.jsx("div",{className:"model-discovery-dialog__type-tabs",children:Object.keys(ws).map(r=>{const M=ee===r;return e.jsxs("button",{type:"button",className:`model-discovery-dialog__type-tab ${M?"model-discovery-dialog__type-tab--active":""}`,onClick:()=>ye(r),children:[e.jsx("span",{children:ws[r]}),e.jsx("span",{className:"model-discovery-dialog__type-tab-count",children:ae[r]})]},r)})}),e.jsx("div",{className:"model-discovery-dialog__body",children:O.length===0?e.jsx("div",{className:"model-discovery-dialog__empty",children:X.trim()?"没有匹配的模型":"暂无模型"}):e.jsx("div",{className:"model-discovery-dialog__group-list",children:O.map(r=>{const M=Fs(r.vendor),j=_i(r),A=!!k[r.vendor];return e.jsxs("section",{className:`model-discovery-dialog__vendor-group ${A?"model-discovery-dialog__vendor-group--expanded":""}`,style:{"--vendor-accent":M.accent,"--vendor-surface":M.surface,"--vendor-border":M.border},children:[e.jsxs("button",{type:"button",className:"model-discovery-dialog__vendor-header",onClick:()=>oe(r.vendor),children:[e.jsxs("div",{className:"model-discovery-dialog__vendor-main",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-logo-shell",children:e.jsx(Ws,{vendor:r.vendor,size:22})}),e.jsxs("div",{className:"model-discovery-dialog__vendor-copy",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-name",children:Ve(r.vendor)}),e.jsx("div",{className:"model-discovery-dialog__vendor-meta",children:j.map(({type:U,models:H})=>e.jsxs("span",{className:"model-discovery-dialog__vendor-meta-pill",children:[ci[U]," ",H.length]},`${r.vendor}-${U}`))})]})]}),e.jsx("span",{className:"model-discovery-dialog__vendor-spacer"}),e.jsxs("div",{className:"model-discovery-dialog__vendor-side",children:[r.selectedCount>0?e.jsxs("span",{className:"model-discovery-dialog__vendor-selected",children:["已选 ",r.selectedCount]}):null,e.jsx("span",{className:"model-discovery-dialog__vendor-count",children:r.models.length}),e.jsx("span",{className:`model-discovery-dialog__vendor-chevron ${A?"model-discovery-dialog__vendor-chevron--expanded":""}`,children:e.jsx(Zs,{size:16})})]})]}),A?e.jsx("div",{className:"model-discovery-dialog__vendor-body",children:j.map(({type:U,models:H})=>e.jsxs("div",{className:"model-discovery-dialog__type-section",children:[e.jsxs("div",{className:"model-discovery-dialog__type-section-header",children:[e.jsx("span",{className:"model-discovery-dialog__type-section-title",children:ri[U]}),e.jsx("span",{className:"model-discovery-dialog__type-section-count",children:H.length})]}),e.jsx("div",{className:"model-discovery-dialog__model-stack",children:H.map(B=>{const le=f.has(B.id);return e.jsxs("label",{className:`model-discovery-dialog__item ${le?"model-discovery-dialog__item--checked":""}`,children:[e.jsx("input",{type:"checkbox",className:"model-discovery-dialog__checkbox",checked:le,onChange:()=>Se(B.id)}),e.jsx("span",{className:"model-discovery-dialog__checkmark",children:le?e.jsx(At,{size:12}):null}),e.jsx("div",{className:"model-discovery-dialog__item-body",children:e.jsx("div",{className:`model-discovery-dialog__item-id ${le?"model-discovery-dialog__item-id--checked":""}`,children:B.id})}),K?e.jsx(J,{content:"测试此模型",showArrow:!1,children:e.jsx("button",{type:"button",className:"model-discovery-dialog__item-test",onClick:ve=>{ve.preventDefault(),ve.stopPropagation(),K(B.id)},children:e.jsx(Hs,{size:13})})}):null]},B.id)})})]},`${r.vendor}-${U}`))}):null]},r.vendor)})})}),e.jsxs("div",{className:"model-discovery-dialog__footer",children:[e.jsxs("span",{className:"model-discovery-dialog__selection-count",children:["已选 ",w," 个 · 图 ",Z.image," / 视"," ",Z.video," / 文 ",Z.text]}),e.jsxs("div",{className:"model-discovery-dialog__footer-bulk",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button",onClick:be,disabled:F.length===0,children:ne?"取消当前筛选":"全选"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button",onClick:Ce,disabled:se.length===0||Pe,children:"选中推荐模型"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button model-discovery-dialog__ghost-button--muted",onClick:()=>P([]),disabled:G.length===0,children:"清空"})]}),e.jsxs("div",{className:"model-discovery-dialog__actions",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--secondary",onClick:b,children:"取消"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--primary",onClick:()=>y(G),children:"添加模型"})]})]})]})})},hi=kt.memo(({profile:t,onUpdateProfile:a})=>{const[n,g]=_.useState(!1),b=Dt(t.id),y=Tt(t),K=(y==null?void 0:y.pricingUrl)||"",X=(y==null?void 0:y.cnyPerUsd)??1,pe=(y==null?void 0:y.pricingGroup)||"default",ee=_.useCallback(async()=>{if(y){g(!0);try{await Ms.fetchAndCache(t.id,y.pricingUrl,t.apiKey,y.pricingGroup,y.cnyPerUsd,{force:!0,promoteToAutoRefresh:!0}),Y.success("价格信息已同步")}catch(P){Y.error(`获取价格失败: ${P instanceof Error?P.message:"未知错误"}`)}finally{g(!1)}}},[y,t.id,t.apiKey]),ye=_.useCallback(async P=>{const k=String(P);if(a($=>({...$,pricingGroup:k})),!!y){g(!0);try{await Ms.fetchAndCache(t.id,y.pricingUrl,t.apiKey,k,y.cnyPerUsd)}catch{}finally{g(!1)}}},[a,y,t.id,t.apiKey]),G=b.map(P=>({label:P.displayName||P.name,value:P.name}));return e.jsxs("div",{className:"settings-dialog__pricing-group",children:[e.jsxs("div",{className:"settings-dialog__pricing-row",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{flex:1,minWidth:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"模型价格 URL"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:K,onChange:P=>a(k=>({...k,pricingUrl:P.target.value})),placeholder:"如 https://api.tu-zi.com/api/pricing"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{width:110,flexShrink:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"¥/1USD"}),e.jsx("input",{type:"number",className:"settings-dialog__input",value:X,step:.01,min:0,onChange:P=>a(k=>({...k,cnyPerUsd:parseFloat(P.target.value)||0}))})]})]}),e.jsxs("div",{className:"settings-dialog__pricing-row",children:[G.length>0?e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",style:{flex:1,minWidth:0},children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"当前分组"}),e.jsx(Ot,{value:pe,options:G,onChange:P=>ye(P),style:{width:"100%"}})]}):null,e.jsx("button",{type:"button",className:"settings-dialog__button settings-dialog__button--fetch",style:{alignSelf:"flex-end",height:32,flexShrink:0},onClick:ee,disabled:n||!K,children:n?"同步中":"获取价格"})]})]})});function pi(t,a){return{id:a,name:`供应商 ${t}`,iconUrl:"",homepageUrl:"",providerType:"openai-compatible",baseUrl:"",apiKey:"",authType:"bearer",imageApiCompatibility:Ys,enabled:!0,capabilities:{supportsModelsEndpoint:!0,supportsText:!0,supportsImage:!0,supportsVideo:!0,supportsAudio:!0,supportsTools:!0}}}const ks="aitu:settings:provider-nav",vi=980,xi=[{value:"providers",label:"供应商"},{value:"presets",label:"模型预设"},{value:"canvas",label:"画布显示"},{value:"speech",label:"语音播放"}],fi=["openai-compatible","gemini-compatible","custom"],yi=["auto","openai-gpt-image","tuzi-gpt-image","openai-compatible-basic"],Ds={image:"图片",video:"视频",audio:"音频",text:"文本"},bi={image:"图片模型",video:"视频模型",audio:"音频模型",text:"文本模型"},ji=_.memo(function({profileId:a,modelId:n}){const{summary:g,detail:b}=ai(a,n);return g?e.jsx(J,{content:b,placement:"top",disabled:b===g,children:e.jsx("span",{className:"settings-dialog__model-price",children:g})}):null}),Ni=_.memo(function({profileId:a,modelId:n}){const g=ii(a,n);return g!=null&&g.description?e.jsx(J,{content:g.description,placement:"top",children:e.jsx("span",{className:"settings-dialog__model-type-item-id settings-dialog__model-type-item-id--has-desc",children:n})}):e.jsx("span",{className:"settings-dialog__model-type-item-id",children:n})});function Ii(t,a,n,g){return a===0&&n===0?null:g===0&&n>0?`已清空 ${t} 的已添加模型`:a>0&&n>0?`已更新 ${t} 的模型(新增 ${a} 个,移除 ${n} 个)`:a>0?`已为 ${t} 添加 ${a} 个模型`:`已从 ${t} 移除 ${n} 个模型`}const Mi=["text","image","video","audio"],qe={"openai-compatible":{label:"OpenAI 兼容"},"gemini-compatible":{label:"Gemini 兼容"},custom:{label:"自定义接入"}},Je={auto:{label:"自动"},"openai-gpt-image":{label:"OpenAI GPT Image"},"tuzi-gpt-image":{label:"Tuzi GPT 兼容"},"openai-compatible-basic":{label:"OpenAI-compatible 通用兼容(兜底)"}};function Pi(t){return t==="auto"||t==="openai-gpt-image"||t==="tuzi-gpt-image"||t==="openai-compatible-basic"?t:t==="tuzi-compatible"?"tuzi-gpt-image":"auto"}function Si(t){const a=t.baseUrl.trim().toLowerCase();return a.includes("api.openai.com")?"openai-gpt-image":a.includes(".tu-zi.com")?"tuzi-gpt-image":"openai-compatible-basic"}function Ci(t){const a=Pi(t.imageApiCompatibility);if(a==="auto"){const n=Si(t);return`默认推荐显式选择 OpenAI GPT Image;如果保留自动模式,GPT Image 模型当前会解析为 ${Je[n].label}。`}return a==="openai-gpt-image"?"默认推荐模式。适用于官方 GPT Image 请求格式,也便于后续继续扩展官方图生图能力。":`同一个图片模型在不同 API Key 或网关下可能需要不同接口格式;当前已固定为 ${Je[a].label}。`}const Ts=["amber","sky","mint","rose","violet"];function Os(t){return t.reduce((a,n)=>(a[n.type]+=1,a),{image:0,video:0,audio:0,text:0})}function wi(t,a){const n=a.trim().toLowerCase();return n?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,Ve(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(n)):!0}function Ei(t){const a=new Set,n=[];return t.forEach(g=>{const b=`${g.type}:${g.id}`;a.has(b)||(a.add(b),n.push(g))}),n}function Us(t){return t?["image","video","audio","text"].filter(a=>!!W(t[a])).length:0}function Rs(t,a){const n=a.find(g=>g.id===t.id);return n?Li(n,t)?"saved":"dirty":"new"}function Le(t){return JSON.stringify(t)}function Ai(t){return typeof t.iconUrl!="string"?null:t.iconUrl.trim()||null}function ki(t){const a=zs(t.homepageUrl);if(a)return a;try{const n=zs(t.baseUrl);return n?new URL(n).origin:null}catch{return null}}function zs(t){const a=typeof t=="string"?t.trim():"";if(!a)return null;try{return new URL(/^[a-z][a-z\d+\-.]*:\/\//i.test(a)?a:`https://${a}`).toString()}catch{return null}}function Di(t){var g;const a=t.trim();if(!a)return"供";const n=a.match(/[A-Za-z0-9]+/g);return n!=null&&n[0]?n[0][0].toUpperCase():((g=Array.from(a)[0])==null?void 0:g.toUpperCase())||"供"}function Ti(t){const a=Array.from(`${t.id}-${t.providerType}-${t.name}`).reduce((n,g,b)=>n+g.charCodeAt(0)*(b+1),0);return Ts[a%Ts.length]}function _e(t){return JSON.parse(JSON.stringify(t))}function es(t){return`${t}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function Ls(t){return pi(t,es("profile"))}function Oi(){if(typeof window>"u")return null;const t=window.__aituPendingProviderNavigationIntent||null;return window.__aituPendingProviderNavigationIntent=void 0,t}function Vs(t){return"bearer"}function Ae(t){return t===z||t===Vt||t===$t||t===Kt||t===Gt}const $s=({profile:t,size:a="regular"})=>{const n=Ai(t),[g,b]=_.useState(n);_.useEffect(()=>{b(n)},[n]);const y=Ti(t),K=Di(t.name);return e.jsx("span",{className:`settings-dialog__provider-avatar settings-dialog__provider-avatar--${y} ${a==="large"?"settings-dialog__provider-avatar--large":""}`,"aria-hidden":"true",children:g?e.jsx("img",{src:g,alt:`${t.name} 图标`,className:"settings-dialog__provider-avatar-image",loading:"lazy",onError:()=>b(null)}):e.jsx("span",{className:"settings-dialog__provider-avatar-text",children:K})})};function Ui(t,a){return{id:es("preset"),name:"新预设",text:ue(he(t,a.text||null)),image:ue(he(t,a.image||null)),video:ue(he(t,a.video||null)),audio:ue(he(t,a.audio||null))}}function Ri(t,a,n){const g=t[a],b=n.defaultModelRef!==void 0?n.defaultModelRef:he(n.profileId!==void 0?n.profileId:ke(g),n.defaultModelId!==void 0?n.defaultModelId:W(g));return{...t,[a]:ue(b)}}function zi(t,a){const n={...t};return["image","video","audio","text"].forEach(g=>{ke(n[g])===a&&(n[g]=ue(null))}),n}function Li(t,a){return JSON.stringify(t)===JSON.stringify(a)}function Vi(t){return t.flatMap(({profile:a,models:n})=>n.map(g=>({...g,sourceProfileId:a.id,sourceProfileName:a.name,selectionKey:g.selectionKey||`${a.id}::${g.id}`})))}const Wi=({container:t})=>{const{appState:a,setAppState:n}=Ut(),{confirm:g,confirmDialog:b}=Rt({container:t}),{isMobile:y,viewportWidth:K,viewportHeight:X}=zt(),pe=_.useRef(null),[ee,ye]=_.useState(0),[G,P]=_.useState("providers"),[k,$]=_.useState(z),[ae,F]=_.useState(ie),[f,O]=_.useState([]),[w,Z]=_.useState([]),[ne,se]=_.useState(ie),[Pe,Se]=_.useState([]),[be,Ce]=_.useState(""),[oe,r]=_.useState(""),[M,j]=_.useState(""),[A,U]=_.useState(""),[H,B]=_.useState(!0),[le,ve]=_.useState(""),[ss,De]=_.useState(!1),[Xs,$e]=_.useState(""),[ts,is]=_.useState(!1),[Qs,de]=_.useState("catalog"),[qs,je]=_.useState("catalog"),[Js,et]=_.useState(new Set),[Te,Ke]=_.useState(!1),st=s=>{et(i=>{const l=new Set(i);return l.has(s)?l.delete(s):l.add(s),l})},c=f.find(s=>s.id===k)||f[0]||null,tt=c?Ci(c):"同一个图片模型在不同 API Key 或网关下可能需要不同接口格式;不确定时使用自动。",R=w.find(s=>s.id===ae)||w[0]||null,L=ni((c==null?void 0:c.id)||z),it=_.useDeferredValue(le),as=ze(z,"image"),at=ze(z,"audio"),ns=ze(z,"video"),os=ze(z,"text"),nt=f.filter(s=>s.enabled),v=y||K<=vi,ls=v&&(ee>0?ee<600:K<600),Ge=!!c&&!!c.apiKey.trim(),ot=Le({profiles:f,presets:w,activePresetId:ne,audioModelName:be,imageModelName:oe,videoModelName:M,textModelName:A,showWorkZoneCard:H}),ds=a.openSettings&&ot!==Xs;_.useEffect(()=>{Ke(!1)},[c==null?void 0:c.id]),_.useEffect(()=>{const s=pe.current;if(!s||typeof ResizeObserver>"u")return;const i=new ResizeObserver(l=>{var m;const o=(m=l[0])==null?void 0:m.contentRect.width;o&&ye(d=>Math.abs(d-o)<1?d:o)});return i.observe(s),()=>{i.disconnect()}},[a.openSettings]);const lt=s=>{T.trackUIInteraction({area:"settings",action:"view_changed",control:"settings_nav",value:s,source:"settings_dialog"}),P(s),v&&(s==="providers"&&de("catalog"),s==="presets"&&je("catalog"))},dt=s=>{T.trackUIInteraction({area:"settings",action:"provider_selected",control:"provider_list",source:"settings_dialog",metadata:{profileId:s,isManagedProfile:Ae(s)}}),$(s),v&&de("detail")},rt=s=>{T.trackUIInteraction({area:"settings",action:"preset_selected",control:"preset_list",source:"settings_dialog",metadata:{presetId:s}}),F(s),v&&je("detail")},ct=()=>{try{return localStorage.getItem(Ue.WORKZONE_CARD_VISIBLE)!=="false"}catch{return!0}},Be=()=>{const s=_e(Oe.get()),i=_e(Ie.get()),l=Ie.getActivePresetId()||ie,o=Ee.get(),m=ct();Se(s),$e(Le({profiles:s,presets:i,activePresetId:l,audioModelName:o.audioModelName||fe(),imageModelName:o.imageModelName||ce(),videoModelName:o.videoModelName||ge(),textModelName:o.textModelName||me(),showWorkZoneCard:m}))};_.useEffect(()=>{var p;if(!a.openSettings)return;Ke(!1);const s=_e(Oe.get()),i=_e(Ie.get()),l=Ie.getActivePresetId()||ie,o=Ee.get();let m=!0;const d=Oi(),u=(d==null?void 0:d.action)==="select"&&s.some(N=>N.id===d.profileId)?d.profileId:((p=s[0])==null?void 0:p.id)||z;O(s),Z(i),Se(s),se(l),$(N=>{var I;return d?u:s.some(C=>C.id===N)?N:((I=s[0])==null?void 0:I.id)||z}),F(N=>{var I;return i.some(C=>C.id===N)?N:((I=i[0])==null?void 0:I.id)||ie}),Ce(o.audioModelName||fe()),r(o.imageModelName||ce()),j(o.videoModelName||ge()),U(o.textModelName||me());try{m=localStorage.getItem(Ue.WORKZONE_CARD_VISIBLE)!=="false"}catch{m=!0}B(m),P("providers"),de(d&&v?"detail":"catalog"),je("catalog"),ve(""),De(!1),$e(Le({profiles:s,presets:i,activePresetId:l,audioModelName:o.audioModelName||fe(),imageModelName:o.imageModelName||ce(),videoModelName:o.videoModelName||ge(),textModelName:o.textModelName||me(),showWorkZoneCard:m})),(d==null?void 0:d.action)==="create"&&cs(d,s)},[a.openSettings]),_.useEffect(()=>{if(!k&&f[0]){$(f[0].id);return}k&&f.length>0&&!f.some(s=>s.id===k)&&$(f[0].id)},[f,k]),_.useEffect(()=>{if(!ae&&w[0]){F(w[0].id);return}ae&&w.length>0&&!w.some(s=>s.id===ae)&&F(w[0].id)},[w,ae]),_.useEffect(()=>{ve("")},[k,G]);const xe=(s,i)=>{O(l=>l.map(o=>o.id===s?i(o):o))},gt=(s,i)=>{Z(l=>l.map(o=>o.id===s?i(o):o))},rs=async(s,i)=>{var l,o;try{const m=Ee.get(),d=((l=s.find(S=>S.id===i))==null?void 0:l.id)||((o=s[0])==null?void 0:o.id)||ie,u=s.find(S=>S.id===d)||s[0]||null,p=W(u==null?void 0:u.audio)||m.audioModelName||fe(),N=W(u==null?void 0:u.image)||m.imageModelName||ce(),I=W(u==null?void 0:u.video)||m.videoModelName||ge(),C=W(u==null?void 0:u.text)||m.textModelName||m.chatModel||me();return await Ie.update(_e(s)),await Ie.setActivePresetId(d),await Ee.update({audioModelName:p,imageModelName:N,videoModelName:I,textModelName:C,chatModel:C}),Z(s),se(d),Ce(p),r(N),j(I),U(C),Be(),!0}catch(m){return console.error("Failed to persist preset configuration:",m),Y.error("预设保存失败,请重试"),!1}},mt=async(s,i)=>{if(T.trackUIInteraction({area:"settings",action:"provider_enabled_changed",control:"provider_enabled_switch",value:i,source:"settings_dialog",metadata:{profileId:s,isManagedProfile:Ae(s)}}),O(l=>l.map(o=>o.id===s?{...o,enabled:i}:o)),!!Pe.some(l=>l.id===s))try{await Oe.update(_e(Oe.get()).map(l=>l.id===s?{...l,enabled:i}:l)),Be()}catch(l){console.error("Failed to persist provider enabled state:",l),O(o=>o.map(m=>m.id===s?{...m,enabled:!i}:m)),Y.error("供应商状态保存失败,请重试")}},_t=async s=>{T.trackUIInteraction({area:"settings",action:"workzone_card_visibility_changed",control:"workzone_card_switch",value:s,source:"settings_dialog"}),B(s);try{localStorage.setItem(Ue.WORKZONE_CARD_VISIBLE,String(s)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed")),Be()}catch(i){console.error("Failed to persist canvas visibility state:",i),B(!s),Y.error("画布显示配置保存失败,请重试")}},cs=(s,i)=>{var d;const l=i||f;if(P("providers"),v&&de("detail"),s.action==="select"){const u=l.some(p=>p.id===s.profileId)?s.profileId:((d=l[l.length-1])==null?void 0:d.id)||z;return $(u),l}const o=Ls(l.length+1),m=[...l,o];return O(m),$(o.id),m},gs=()=>{const s=Ls(f.length+1);T.trackUIInteraction({area:"settings",action:"provider_added",control:"add_provider",source:"settings_dialog",metadata:{profilesCount:f.length+1}}),O(i=>[...i,s]),$(s.id),P("providers"),v&&de("detail")};_.useEffect(()=>{if(!a.openSettings)return;const s=i=>{const l=i.detail;l&&cs(l)};return window.addEventListener(ks,s),()=>{window.removeEventListener(ks,s)}},[a.openSettings,v,f]);const ms=async s=>{var m;if(Ae(s))return;const i=f.find(d=>d.id===s);if(!await g({title:"确认删除供应商",description:`确定要删除供应商「${(i==null?void 0:i.name)||"未命名供应商"}」吗?相关预设里的路由会被清空。`,confirmText:"删除",cancelText:"取消",danger:!0}))return;T.trackUIInteraction({area:"settings",action:"provider_deleted",control:"delete_provider",source:"settings_dialog",metadata:{profileId:s,profilesCount:Math.max(0,f.length-1)}});const o=f.filter(d=>d.id!==s);O(o),Z(d=>d.map(u=>zi(u,s))),k===s&&$(((m=o[0])==null?void 0:m.id)||z),v&&de("catalog")},_s=_.useCallback(s=>{const i=f.find(o=>o.id===s);if(!i)return;const l={..._e(i),id:es("profile"),name:`${i.name} (副本)`};O(o=>[...o,l]),T.trackUIInteraction({area:"settings",action:"provider_cloned",control:"clone_provider",source:"settings_dialog",metadata:{profileId:s,clonedProfileId:l.id,profilesCount:f.length+1}}),$(l.id),P("providers"),v&&de("detail")},[f,v]),Fe=Lt(),ut=_.useCallback(s=>{const i=[{key:"clone",label:"克隆",icon:e.jsx(Bt,{size:14}),onSelect:_s}];return Ae(s)||i.push({key:"divider",type:"divider"},{key:"delete",label:"删除",icon:e.jsx(Ps,{size:14}),danger:!0,onSelect:ms}),i},[_s]),us=()=>{var l;const s=((l=nt[0])==null?void 0:l.id)||null,i=Ui(s,{audio:be||fe(),image:oe||ce(),video:M||ge(),text:A||me()});Z(o=>[...o,i]),T.trackUIInteraction({area:"settings",action:"preset_added",control:"add_preset",source:"settings_dialog",metadata:{presetId:i.id,presetsCount:w.length+1,hasFallbackProfile:!!s}}),F(i.id),P("presets"),v&&je("detail")},ht=async s=>{var m,d;if(w.length<=1)return;const i=w.find(u=>u.id===s);if(!await g({title:"确认删除预设",description:`确定要删除预设「${(i==null?void 0:i.name)||"未命名预设"}」吗?此操作不可撤销。`,confirmText:"删除",cancelText:"取消",danger:!0}))return;T.trackUIInteraction({area:"settings",action:"preset_deleted",control:"delete_preset",source:"settings_dialog",metadata:{presetId:s,presetsCount:Math.max(0,w.length-1)}});const o=w.filter(u=>u.id!==s);Z(o),ne===s&&se(((m=o[0])==null?void 0:m.id)||ie),ae===s&&F(((d=o[0])==null?void 0:d.id)||ie),v&&je("catalog")},hs=(s,i)=>{if(!R)return;const l=w.map(o=>o.id===R.id?Ri(o,s,{defaultModelRef:i}):o);Z(l),T.trackUIInteraction({area:"settings",action:"route_model_changed",control:"route_model_dropdown",value:s,source:"settings_dialog",metadata:{presetId:R.id,routeType:s,hasModel:!!(i!=null&&i.modelId),hasProfile:!!(i!=null&&i.profileId)}}),rs(l,ne)},pt=async()=>{if(!c){Y.warning("请先选择供应商配置");return}if(ds&&!await xs(!1))return;const s=c.apiKey.trim(),i=Qe(c.baseUrl.trim()||Re);if(!s){Y.warning("请先填写 API Key");return}try{T.trackUIInteraction({area:"settings",action:"model_discovery_started",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id}}),await Me.discover(c.id,i,s),T.trackUIInteraction({area:"settings",action:"model_discovery_succeeded",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id}}),De(!0)}catch(l){const o=l instanceof Error?l.message:"模型同步失败";T.trackUIInteraction({area:"settings",action:"model_discovery_failed",control:"fetch_models",source:"settings_dialog",metadata:{profileId:c.id,error:o}}),Me.setError(c.id,o),Y.error({content:o,duration:3600})}},ps=(s,i)=>{var d,u,p;if(!c)return;const l=Me.applySelection(c.id,s),o=l.models;if(c.id===z){const N=o.filter(x=>x.type==="image"),I=o.filter(x=>x.type==="video"),C=o.filter(x=>x.type==="text"),S=L.discoveredModels.filter(x=>x.type==="image").map(x=>x.id),Q=L.discoveredModels.filter(x=>x.type==="video").map(x=>x.id),E=L.discoveredModels.filter(x=>x.type==="text").map(x=>x.id);!N.some(x=>x.id===oe)&&S.includes(oe)&&r(((d=N[0])==null?void 0:d.id)||ce()),!I.some(x=>x.id===M)&&Q.includes(M)&&j(((u=I[0])==null?void 0:u.id)||ge()),!C.some(x=>x.id===A)&&E.includes(A)&&U(((p=C[0])==null?void 0:p.id)||me())}const m=(i==null?void 0:i.successMessage)||Ii(c.name,l.addedModelIds.length,l.removedModelIds.length,o.length);m&&Y.success(m),T.trackUIInteraction({area:"settings",action:"discovered_models_applied",control:"model_discovery_dialog",source:"settings_dialog",metadata:{profileId:c.id,selectedCount:o.length,addedCount:l.addedModelIds.length,removedCount:l.removedModelIds.length}}),De(!1)},vt=s=>{if(!c)return;if(!L.selectedModelIds.includes(s)){Y.warning("该模型不是当前分组动态添加的模型,无法在此移除");return}const i=L.selectedModelIds.filter(l=>l!==s);ps(i)},vs=()=>{n(s=>({...s,openSettings:!1}))},xs=async(s=!1)=>{var i,l,o,m,d,u;if(ts)return!1;is(!0);try{const p=f.map(h=>{var Ne,we;const V=h.baseUrl.trim()?Qe(h.baseUrl):"";return{...h,name:h.name.trim()||"未命名供应商",iconUrl:((Ne=h.iconUrl)==null?void 0:Ne.trim())||void 0,homepageUrl:((we=h.homepageUrl)==null?void 0:we.trim())||void 0,baseUrl:V,apiKey:h.apiKey.trim()}}),N=new Set(p.map(h=>h.id)),I=w.map(h=>{const V={...h,name:h.name.trim()||"未命名预设",audio:{...h.audio},image:{...h.image},video:{...h.video},text:{...h.text}};return["image","video","audio","text"].forEach(Ne=>{const we=V[Ne],Ye=ke(we),Is=W(we);if(Ye&&!N.has(Ye)){V[Ne]=ue(he(null,Is));return}V[Ne]=ue(he(Ye,Is))}),V}),C=((i=I.find(h=>h.id===ne))==null?void 0:i.id)||((l=I[0])==null?void 0:l.id)||ie,S=I.find(h=>h.id===C)||I[0]||null,Q=p.find(h=>h.id===z)||p[0],E=Qe((Q==null?void 0:Q.baseUrl)||Re),x=be.trim()||((o=at[0])==null?void 0:o.id)||fe(),te=oe.trim()||((m=as[0])==null?void 0:m.id)||ce(),D=M.trim()||((d=ns[0])==null?void 0:d.id)||ge(),q=A.trim()||((u=os[0])==null?void 0:u.id)||me(),He=W(S==null?void 0:S.image)||te,re=W(S==null?void 0:S.video)||D,Mt=W(S==null?void 0:S.audio)||x,Pt=W(S==null?void 0:S.text)||q;p.forEach(h=>{Me.invalidateIfConfigChanged(h.id,h.baseUrl||Re,h.apiKey||"")}),await Xt.updateSettings({gemini:{...Ee.get(),apiKey:(Q==null?void 0:Q.apiKey)||"",baseUrl:E,audioModelName:Mt,imageModelName:He,videoModelName:re,textModelName:Pt},providerProfiles:p,providerCatalogs:Me.getCatalogs().filter(h=>N.has(h.profileId)),invocationPresets:I,activePresetId:C});try{localStorage.setItem(Ue.WORKZONE_CARD_VISIBLE,String(H)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed"))}catch{}return O(p),Se(_e(p)),Z(I),se(C),Ce(x),r(te),j(D),U(q),$e(Le({profiles:p,presets:I,activePresetId:C,audioModelName:x,imageModelName:te,videoModelName:D,textModelName:q,showWorkZoneCard:H})),s&&vs(),T.trackUIInteraction({area:"settings",action:"settings_saved",control:"save_settings",source:"settings_dialog",metadata:{closeAfterSave:s,profilesCount:p.length,presetsCount:I.length,enabledProfilesCount:p.filter(h=>h.enabled).length}}),p.forEach(h=>{const V=Qt(h.baseUrl);T.track("provider_endpoint_configured",{profileId:h.id,providerType:h.providerType,providerOrigin:V==null?void 0:V.origin,providerHost:V==null?void 0:V.host,providerProtocol:V==null?void 0:V.protocol,enabled:h.enabled,authType:h.authType,supportsText:h.capabilities.supportsText,supportsImage:h.capabilities.supportsImage,supportsVideo:h.capabilities.supportsVideo,supportsAudio:h.capabilities.supportsAudio,supportsTools:h.capabilities.supportsTools,hasApiKey:!!h.apiKey})}),!0}catch(p){return console.error("Failed to persist settings drafts:",p),T.trackUIInteraction({area:"settings",action:"settings_save_failed",control:"save_settings",source:"settings_dialog",metadata:{closeAfterSave:s,error:p instanceof Error?p.message:String(p)}}),Y.error("设置保存失败,请稍后重试"),!1}finally{is(!1)}},xt=()=>{if(!ds){vs();return}(async()=>await xs(!0)||Y.warning("设置尚未保存,请检查后重试"))()},ft=()=>{ss||ts||xt()},fs=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell settings-dialog__sidebar-shell--catalog",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"供应商目录"}),v?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:gs,children:"新增供应商"}):null]}),v?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先从列表里选择供应商,再进入对应的配置页面。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:f.map(s=>{const i=s.id===(c==null?void 0:c.id);return e.jsxs("div",{className:`settings-dialog__provider-row ${i?"settings-dialog__provider-row--active":""} ${s.enabled?"":"settings-dialog__provider-row--disabled"}`,onContextMenu:l=>{l.preventDefault(),Fe.open(l,s.id)},children:[e.jsxs("button",{type:"button",className:"settings-dialog__provider-select",onClick:()=>dt(s.id),"aria-pressed":i,children:[e.jsxs("span",{className:"settings-dialog__provider-select-main",children:[e.jsx($s,{profile:s}),e.jsxs("span",{className:"settings-dialog__provider-copy",children:[e.jsxs("span",{className:"settings-dialog__provider-name-row",children:[e.jsx("span",{className:"settings-dialog__provider-name",children:s.name}),s.id===z?e.jsx("span",{className:"settings-dialog__provider-tag",children:"默认"}):null]}),v?e.jsxs("span",{className:"settings-dialog__provider-meta",children:[e.jsx("span",{children:qe[s.providerType].label}),e.jsx("span",{children:s.enabled?"启用":"停用"})]}):null]})]}),v?e.jsx(Xe,{size:16,className:"settings-dialog__provider-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__provider-switch",children:[e.jsx("span",{className:"settings-dialog__provider-switch-copy",children:s.enabled?"启用":"停用"}),e.jsx(Ss,{size:"small",value:s.enabled,disabled:s.id===z,onChange:l=>void mt(s.id,l)})]})]},s.id)})}),e.jsx(Yt,{state:Fe.contextMenu,items:ut,onClose:Fe.close,zIndex:2e4}),v?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:gs,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增供应商"})]})]}),ys=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"默认模型"}),v?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:us,children:"新增预设"}):null]}),v?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先选中一个预设,再进入详情页调整默认路由。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:w.map(s=>{const i=s.id===(R==null?void 0:R.id),l=s.id===ne,o=Us(s);return e.jsxs("button",{type:"button",className:`settings-dialog__sidebar-item ${i?"settings-dialog__sidebar-item--active":""}`,onClick:()=>rt(s.id),children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-head",children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-top",children:[e.jsx("span",{children:s.name}),l?e.jsx("span",{className:"settings-dialog__sidebar-badge settings-dialog__sidebar-badge--accent",children:"当前"}):null]}),v?e.jsx(Xe,{size:16,className:"settings-dialog__sidebar-item-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__sidebar-item-meta",children:[e.jsxs("span",{children:[o,"/3 已配置"]}),v?e.jsx("span",{children:l?"正在生效":"点击查看详情"}):null]})]},s.id)})}),v?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:us,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增预设"})]})]}),bs=(s,i)=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsx("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--compact",children:e.jsx("div",{className:"settings-dialog__mobile-stage",children:i},s)})}),js=(s=!1)=>{if(!c)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个供应商。"});const i=Os(L.models),l=Rs(c,Pe),o=i.image+i.video+i.text,m=ki(c);return e.jsxs("div",{className:`settings-dialog__content-panel settings-dialog__content-panel--providers ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>de("catalog"),children:[e.jsx(Cs,{size:16}),e.jsx("span",{children:"返回供应商目录"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"供应商配置"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"进入详情后再编辑接口信息、密钥和模型同步配置。"})]})]}):null,e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("a",{className:`settings-dialog__profile-hero ${m?"settings-dialog__profile-hero--link":""}`,href:m||void 0,target:"_blank",rel:"noopener noreferrer","aria-label":m?`打开 ${c.name} 域名页面`:void 0,onClick:d=>{m||d.preventDefault()},children:[e.jsx($s,{profile:c,size:"large"}),e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:c.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:qe[c.providerType].label}),e.jsx("span",{children:c.enabled?"启用":"停用"}),e.jsxs("span",{children:[o," 个模型"]}),e.jsx("span",{children:l==="saved"?"已保存":"未保存"})]})]})]}),Ae(c.id)?null:e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>ms(c.id),children:"删除"})]})}),e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"基础配置"})})}),e.jsxs("div",{className:"settings-dialog__grid",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:c.name,onChange:d=>xe(c.id,u=>({...u,name:d.target.value}))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"接口类型"}),e.jsx("select",{className:"settings-dialog__select",value:c.providerType,onChange:d=>xe(c.id,u=>{const p=d.target.value,N=Vs(u.providerType),I=Vs();return{...u,providerType:p,authType:u.authType===N?I:u.authType}}),children:fi.map(d=>e.jsx("option",{value:d,children:qe[d].label},d))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"图片接口格式"}),e.jsx("select",{className:"settings-dialog__select",value:c.imageApiCompatibility||Ys,onChange:d=>xe(c.id,u=>({...u,imageApiCompatibility:d.target.value})),children:yi.map(d=>e.jsx("option",{value:d,children:Je[d].label},d))}),e.jsx("span",{className:"settings-dialog__field-hint",children:tt})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"图标 URL"}),e.jsx("input",{type:"url",className:"settings-dialog__input",value:c.iconUrl||"",onChange:d=>xe(c.id,u=>({...u,iconUrl:d.target.value})),placeholder:"可选,留空时自动生成默认图标"}),e.jsx("span",{className:"settings-dialog__field-hint",children:"支持填写远程图片地址;未填写时将根据供应商名称生成默认图标。"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API 地址"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:c.baseUrl,onChange:d=>xe(c.id,u=>({...u,baseUrl:d.target.value})),placeholder:Re})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsxs("div",{className:"settings-dialog__label-with-tooltip settings-dialog__label-with-tooltip--left",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API Key"}),e.jsx(J,{content:e.jsxs("div",{style:{maxWidth:480},children:["您可以从以下地址获取 API Key:",e.jsx("br",{}),e.jsx("a",{href:"https://api.tu-zi.com/token",target:"_blank",rel:"noopener noreferrer",style:{color:"#F39C12",textDecoration:"none",display:"inline-block",marginBottom:8},children:"api.tu-zi.com/token"}),e.jsx("div",{style:{position:"relative",width:"100%",paddingTop:"56.25%",marginTop:8,borderRadius:8,overflow:"hidden",backgroundColor:"#000",boxShadow:"0 4px 16px rgba(0,0,0,0.2)"},children:e.jsx("iframe",{title:"Bilibili tutorial video",src:"//player.bilibili.com/player.html?isOutside=true&aid=116171584049629&bvid=BV1k4PqzPEKz&cid=36455319822&p=1",allowFullScreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",border:0}})})]}),placement:"top",theme:"light",showArrow:!1,overlayStyle:{maxWidth:"none"},children:e.jsx(Ft,{className:"settings-dialog__tooltip-icon"})})]}),e.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"center",width:"100%",flexDirection:v?"column":"row"},children:[e.jsxs("div",{className:"settings-dialog__secret-input-wrap",style:{flex:v?"none":1},children:[e.jsx("input",{type:Te?"text":"password",className:"settings-dialog__input settings-dialog__secret-input",value:c.apiKey,onChange:d=>xe(c.id,u=>({...u,apiKey:d.target.value})),autoComplete:"off"}),e.jsx(J,{content:Te?"隐藏 API Key":"查看 API Key",showArrow:!1,children:e.jsx("button",{type:"button",className:"settings-dialog__secret-toggle","aria-label":Te?"隐藏 API Key":"查看 API Key",onMouseDown:d=>d.preventDefault(),onClick:()=>Ke(d=>!d),children:Te?e.jsx(Wt,{size:16}):e.jsx(Zt,{size:16})})})]}),e.jsx("button",{type:"button",className:"settings-dialog__button settings-dialog__button--fetch",style:{whiteSpace:"nowrap",height:v?"42px":"32px",width:v?"100%":"auto"},onClick:pt,disabled:!Ge||L.status==="loading",children:L.status==="loading"?e.jsxs(e.Fragment,{children:[e.jsx(Ht,{size:15,className:"settings-dialog__button-spinner"}),"同步中"]}):"获取模型"})]})]})]})]}),e.jsx(hi,{profile:c,onUpdateProfile:d=>xe(c.id,d)}),c.id===z?e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__compat-card",children:[e.jsx("div",{className:"settings-dialog__compat-title",children:"兼容默认模型"}),e.jsxs("div",{className:"settings-dialog__compat-meta",children:[e.jsxs("span",{children:["图片:",oe||ce()]}),e.jsxs("span",{children:["视频:",M||ge()]}),e.jsxs("span",{children:["音频:",be||fe()]}),e.jsxs("span",{children:["文本:",A||me()]})]})]})}):null,yt()]},s?`provider-detail-${c.id}`:void 0)},We=_.useCallback(s=>{s.profileId&&(di({profileId:s.profileId,modelId:s.modelId,modality:s.modality,compareMode:s.compareMode}),T.trackUIInteraction({area:"settings",action:"model_benchmark_launched",control:"model_benchmark",source:"settings_dialog",metadata:{profileId:s.profileId,modality:s.modality,compareMode:s.compareMode,hasModel:!!s.modelId}}))},[n]),yt=()=>{const s=c?Rs(c,Pe):"saved",i=!!(c!=null&&c.apiKey.trim())&&s==="saved"&&L.status!=="loading",l=(c==null?void 0:c.id)===z,o=Ei(L.models),m=new Map(Ks.map((E,x)=>[E,x])),d=it.trim(),u=Os(o),p=o.filter(E=>wi(E,d)),N=Mi.map(E=>({type:E,models:p.filter(x=>x.type===E).sort((x,te)=>{const D=m.get(x.vendor)??Number.MAX_SAFE_INTEGER,q=m.get(te.vendor)??Number.MAX_SAFE_INTEGER;return D!==q?D-q:Jt(x,te)})})).filter(E=>E.models.length>0),I=Ge||o.length>0,C=o.length>0&&p.length===0&&!!d,S=L.status==="error"&&o.length===0,Q=!Ge&&o.length===0;return e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:"模型"}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsxs("span",{children:["已添加 ",o.length," 个"]}),e.jsxs("span",{children:["图 ",u.image]}),e.jsxs("span",{children:["视 ",u.video]}),e.jsxs("span",{children:["音 ",u.audio]}),e.jsxs("span",{children:["文 ",u.text]})]})]})}),I?e.jsx("div",{className:"settings-dialog__model-toolbar",children:e.jsxs("label",{className:`settings-dialog__model-search ${o.length===0?"settings-dialog__model-search--disabled":""}`,children:[e.jsx(Bs,{size:15}),e.jsx("input",{type:"text",value:le,onChange:E=>ve(E.target.value),placeholder:o.length>0?"搜索模型 ID、名称或品牌":"获取模型后可搜索",disabled:o.length===0}),le?e.jsx("button",{type:"button",className:"settings-dialog__model-search-clear",onClick:()=>ve(""),"aria-label":"清空搜索",children:e.jsx(Gs,{size:14})}):null]})}):null,N.length>0?e.jsx("div",{className:"settings-dialog__model-type-groups",children:N.map(({type:E,models:x})=>{const te=Js.has(E);return e.jsxs("div",{className:"settings-dialog__model-type-group",children:[e.jsxs("div",{className:"settings-dialog__model-type-header",style:{cursor:"pointer"},onClick:()=>st(E),children:[e.jsxs("div",{className:"settings-dialog__model-type-meta",children:[te?e.jsx(Xe,{size:16,className:"settings-dialog__model-type-toggle"}):e.jsx(Zs,{size:16,className:"settings-dialog__model-type-toggle"}),e.jsx("span",{className:"settings-dialog__model-type-title",children:bi[E]}),e.jsx("span",{className:"settings-dialog__model-type-count",children:x.length})]}),e.jsx(J,{content:i?"测试当前供应商这一组模型":"请先保存供应商配置并确保 API Key 可用",showArrow:!1,children:e.jsx("button",{type:"button",className:"settings-dialog__model-group-test",onClick:D=>{D.stopPropagation(),c&&We({profileId:c.id,modality:E,compareMode:"cross-model"})},disabled:!i,children:"测试本组"})})]}),!te&&e.jsx("div",{className:"settings-dialog__model-type-list",children:x.map(D=>{const q=Fs(D.vendor),He=!l||L.selectedModelIds.includes(D.id);return e.jsxs("div",{className:"settings-dialog__model-type-item",style:{"--model-brand-accent":q.accent,"--model-brand-surface":q.surface,"--model-brand-border":q.border},children:[e.jsx("span",{className:"settings-dialog__model-type-item-logo",children:e.jsx(Ws,{vendor:D.vendor,size:16})}),e.jsxs("div",{className:"settings-dialog__model-type-item-copy",children:[e.jsx(Ni,{profileId:c.id,modelId:D.id}),e.jsx("span",{className:"settings-dialog__model-type-item-vendor",children:Ve(D.vendor)}),e.jsx(ji,{profileId:c.id,modelId:D.id})]}),e.jsxs("div",{className:"settings-dialog__model-type-item-btns",children:[(()=>{const re=ei.getLatestEntryStatus(c.id,D.id);return re==="completed"?e.jsx(J,{content:"上次测试成功",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("span",{className:"settings-dialog__model-status settings-dialog__model-status--ok"})})}):re==="failed"?e.jsx(J,{content:"上次测试失败",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("span",{className:"settings-dialog__model-status settings-dialog__model-status--fail"})})}):null})(),e.jsx(J,{content:i?"测试":"请先保存供应商配置并确保 API Key 可用",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("button",{type:"button",className:"settings-dialog__model-icon-btn settings-dialog__model-icon-btn--test",onClick:re=>{re.stopPropagation(),c&&We({profileId:c.id,modality:E,modelId:D.id,compareMode:"cross-provider"})},disabled:!i,children:e.jsx(Hs,{size:14})})})}),He?e.jsx(J,{content:"移除此模型",showArrow:!1,children:e.jsx("span",{className:"settings-dialog__model-tip-trigger",children:e.jsx("button",{type:"button",className:"settings-dialog__model-icon-btn settings-dialog__model-icon-btn--delete",onClick:re=>{re.stopPropagation(),vt(D.id)},children:e.jsx(Ps,{size:14})})})}):null]})]},D.id)})})]},E)})}):C?e.jsx("div",{className:"settings-dialog__model-empty",children:"没有匹配的模型,试试搜索品牌名或更完整的模型 ID。"}):S?e.jsxs("div",{className:"settings-dialog__model-empty settings-dialog__model-empty--error",children:[e.jsx(si,{size:16}),e.jsx("span",{children:L.error||"模型获取失败,请稍后重试"})]}):Q?e.jsx("div",{className:"settings-dialog__model-empty",children:"填写 API Key 后即可获取模型,获取完成后可在这里检索和浏览。"}):e.jsx("div",{className:"settings-dialog__model-empty",children:"还没有已添加的模型"})]})},bt=(s,i,l)=>{const o=ke(l),m=W(l);return f.filter(d=>d.id===o||d.enabled&&d.capabilities[i]).map(d=>{const p=(d.id===z?s==="image"?as:s==="video"?ns:os:Me.getState(d.id).models.filter(N=>N.type===s)).filter((N,I,C)=>C.findIndex(S=>S.id===N.id)===I);return d.id===o&&m&&!p.some(N=>N.id===m)&&p.unshift({id:m,label:m,shortLabel:m,type:s,vendor:ti.OTHER}),{profile:d,models:p}}).filter(d=>d.models.length>0)},Ze=(s,i,l)=>{var I;const o=bt(s,l,i),m=ke(i),d=W(i),u=((I=f.find(C=>C.id===m))==null?void 0:I.name)||"未配置",p=Vi(o),N=m&&d?`${m}::${d}`:d||void 0;return e.jsxs("div",{className:`settings-dialog__route-card settings-dialog__route-card--${s}`,children:[e.jsx("div",{className:"settings-dialog__route-card-top",children:e.jsx("div",{className:"settings-dialog__route-card-title",children:Ds[s]})}),e.jsxs("div",{className:"settings-dialog__stack",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"默认模型"}),e.jsxs("div",{className:"settings-dialog__route-model-picker",children:[e.jsx(qt,{variant:"form",selectedModel:d||"",selectedSelectionKey:N,models:p,providerProfilesOverride:f,placement:"down",placeholder:`搜索${Ds[s]}模型或供应商`,allowCustomValue:!1,showProviderAction:!1,onSelect:(C,S)=>{hs(s,S||he(null,C))},disabled:p.length===0}),d?e.jsx("button",{type:"button",className:"settings-dialog__route-clear",onClick:()=>hs(s,null),children:"清空"}):null]})]}),e.jsxs("div",{className:"settings-dialog__route-meta",children:[e.jsx("span",{children:u}),e.jsx("span",{children:d||"未选择模型"}),o.length===0?e.jsx("span",{children:"暂无可选模型"}):null]})]})]})},Ns=(s=!1)=>{if(!R)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个默认模型预设。"});const i=Us(R),l=R.id===ne;return e.jsxs("div",{className:`settings-dialog__content-panel ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>je("catalog"),children:[e.jsx(Cs,{size:16}),e.jsx("span",{children:"返回模型预设"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"模型预设"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"在这里设置图片、视频和文本模型的默认路由。"})]})]}):null,e.jsxs("div",{className:"settings-dialog__section",children:[e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:R.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:l?"当前预设":"未激活"}),e.jsxs("span",{children:[i,"/3 已配置"]})]})]}),e.jsxs("div",{className:"settings-dialog__inline-row",children:[e.jsx("button",{type:"button",className:"settings-dialog__ghost-button",onClick:()=>{rs(w,R.id)},children:"设为当前预设"}),e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>ht(R.id),disabled:w.length<=1,children:"删除预设"})]})]}),e.jsx("div",{className:"settings-dialog__grid",children:e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"预设名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:R.name,onChange:o=>gt(R.id,m=>({...m,name:o.target.value}))})]})})]}),e.jsxs("div",{className:"settings-dialog__routes",children:[Ze("image",R.image,"supportsImage"),Ze("video",R.video,"supportsVideo"),Ze("text",R.text,"supportsText")]})]},s?`preset-detail-${R.id}`:void 0)},jt=()=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsxs("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--canvas",children:[v?e.jsx("div",{className:"settings-dialog__compact-stage-header",children:e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"画布显示"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"手机上会以更集中的卡片形式展示,方便快速切换画布相关开关。"})]})}):null,e.jsxs("div",{className:"settings-dialog__section settings-dialog__section--canvas-card",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"画布显示配置"})})}),e.jsxs("div",{className:"settings-dialog__preference settings-dialog__preference--panel",children:[e.jsxs("div",{className:"settings-dialog__toggle-copy",children:[e.jsx("span",{className:"settings-dialog__toggle-title",children:"任务进度卡片"}),e.jsx("span",{className:"settings-dialog__toggle-desc",children:"在画布中显示任务进度卡片,便于追踪当前生成状态。"})]}),e.jsx(Ss,{size:"small",value:H,onChange:s=>void _t(s)})]})]})]})}),Nt=()=>e.jsx("aside",{className:"settings-dialog__nav",children:e.jsx("div",{className:"settings-dialog__nav-shell",children:e.jsx("div",{className:"settings-dialog__nav-list",children:xi.map(s=>e.jsx("button",{type:"button",className:`settings-dialog__nav-item ${G===s.value?"settings-dialog__nav-item--active":""}`,onClick:()=>lt(s.value),children:e.jsx("span",{className:"settings-dialog__nav-item-title",children:s.label})},s.value))})})}),It=()=>G==="canvas"?jt():G==="speech"?e.jsx(li,{}):G==="presets"?ls?qs==="catalog"?bs("presets-catalog",ys()):Ns(!0):e.jsxs("div",{className:`settings-dialog__workspace ${v?"settings-dialog__workspace--show-sidebar":""}`,children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:ys()}),Ns(!1)]}):ls?Qs==="catalog"?bs("providers-catalog",fs()):js(!0):e.jsxs("div",{className:`settings-dialog__workspace ${v?"settings-dialog__workspace--show-sidebar":""}`,children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:fs()}),js(!1)]});return e.jsxs(e.Fragment,{children:[e.jsx(oi,{id:"settings-dialog",visible:a.openSettings,title:"设置",onClose:ft,width:v?"100%":"88%",height:v?"100%":"88%",minWidth:v?Math.max(320,Math.min(K-16,640)):1080,minHeight:v?Math.max(520,Math.min(X-16,820)):680,x:"center",y:"center",maximizable:!0,minimizable:!1,resizable:!v,movable:!v,modal:!1,className:"winbox-ai-generation winbox-tool-window winbox-settings-window",container:t,background:"#ffffff",children:e.jsx("div",{ref:pe,className:`settings-dialog ${v?"settings-dialog--compact":""}`,"data-testid":"settings-dialog",children:e.jsxs("div",{className:"settings-dialog__layout",children:[Nt(),e.jsx("div",{className:"settings-dialog__main",children:It()})]})})}),e.jsx(ui,{open:ss,container:t,models:L.discoveredModels,selectedModelIds:L.selectedModelIds,onClose:()=>De(!1),onConfirm:ps,onTestModel:s=>{if(!c)return;const i=L.discoveredModels.find(l=>l.id===s);We({profileId:c.id,modelId:s,modality:(i==null?void 0:i.type)||"image",compareMode:"cross-provider"})}}),b]})};export{Yi as IMAGE_MODEL_GROUPED_OPTIONS,Wi as SettingsDialog,Xi as VIDEO_MODEL_OPTIONS};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{q as E}from"./ai-chat-
|
|
1
|
+
import{q as E}from"./ai-chat-BO5vbKZW.js";const g=/^(调用|CALL)\s+(\S+)/im,S=/^-\s*([\w]+)\s*:\s*(.+)/,L=/^\d+(\.\d+)?$/,R=/^\s*(#|\/\/)/;class d{static parse(t,s,a="skill",r){if(!t||!t.trim())return null;const o=t.split(`
|
|
2
2
|
`),n=[];let e=null,l=0;for(const p of o){const m=p.trim();if(!m||R.test(m))continue;const f=m.match(g);if(f){e&&n.push(e),l++;const c=f[2].replace(/\\(.)/g,"$1");e={id:`${a}-step-${l}`,mcp:c,args:{},options:{mode:"async"},description:`执行 ${c}`,status:"pending"};continue}if(e){const c=m.match(S);if(c){const h=c[1].trim(),u=c[2].trim().replace(/\\(.)/g,"$1"),N=L.test(u)?Number(u):u;e.args[h]=N}}}if(e&&n.push(e),n.length===0)return null;const i=r||s.input;if(i)for(const p of n)d.injectUserInput(p,String(i));return{steps:n,parseMethod:"regex"}}static injectUserInput(t,s){var o,n;const a=["topic","theme","prompt","query","text","content"];for(const e of a)if(e in t.args)return;const r=E.getTool(t.mcp);if(r){const e=r.inputSchema.required||[],l=r.inputSchema.properties||{};for(const i of a)if(e.includes(i)&&((o=l[i])==null?void 0:o.type)==="string"){t.args[i]=s;return}for(const i of e)if(((n=l[i])==null?void 0:n.type)==="string"&&!(i in t.args)){t.args[i]=s;return}}t.args.theme=s}static isDSLContent(t){return!t||!t.trim()?!1:t.split(`
|
|
3
3
|
`).some(a=>g.test(a.trim()))}static extractToolNamesFromContent(t){if(!t||!t.trim())return[];const s=new Set,a=/(调用|CALL)\s+(\S+)/gim;let r;for(;(r=a.exec(t))!==null;){const e=r[2].replace(/\\(.)/g,"$1");s.add(e)}const o=/\b([a-z][a-z0-9]*(?:_[a-z0-9]+)+)\b/g;for(;(r=o.exec(t))!==null;)s.add(r[1]);const n=/mcp:\s*(\S+)/gi;for(;(r=n.exec(t))!==null;){const e=r[1].replace(/\\(.)/g,"$1");s.add(e)}return Array.from(s)}}export{d as S};
|